|
AT指令格式:AT指令都以”AT”開頭,以<CR>(即\r,回車符)結(jié)束,模塊運(yùn)行后,串口默認(rèn)的設(shè)置為:8位數(shù)據(jù)位、1位停止位、無奇偶校驗(yàn)位、硬件流控制(CTS/RTS).注意為了發(fā)送AT命令,最后還要加上<LF> (即\n,換行符)這是串口終端要求.
AT返回狀態(tài)包括三種情況 OK,ERROR,和命令相關(guān)的錯(cuò)誤原因字符串.返回狀態(tài)前后都有一個(gè)<CR>字符.
如 <CR>OK<CR> 表示AT命令執(zhí)行成功.
<CR>ERROR<CR> 表示AT命令執(zhí)行失敗
<CR>NO DIAL TONE<CR> 只出現(xiàn)在ATD命令返回狀態(tài)中,表示沒有撥號(hào)音,這類返回狀態(tài)要查命令手冊(cè)
還有一些命令本身是要向DCE查詢數(shù)據(jù),數(shù)據(jù)返回時(shí),一般是+打頭命令.返回格式
<CR>+命令:命令結(jié)果<CR>
main.c:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "lcd.h"
- #include "key.h"
- #include "usmart.h"
- #include "malloc.h"
- #include "MMC_SD.h"
- #include "ff.h"
- #include "exfuns.h"
- #include "fontupd.h"
- #include "text.h"
- #include "common.h"
- #include "touch.h"
- #include "usart2.h"
- //ALIENTEK Mini STM32開發(fā)板擴(kuò)展實(shí)驗(yàn)15
- //ATK-RM04 WIFI模塊測(cè)試實(shí)驗(yàn)
- //廣州市星翼電子科技有限公司
- int main(void)
- {
- u8 key,fontok=0;
- delay_init(); //延時(shí)函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
- uart_init(115200); //串口初始化為9600
- LCD_Init(); //初始化液晶
- LED_Init(); //LED初始化
- KEY_Init(); //按鍵初始化
- tp_dev.init(); //觸摸屏初始化
- mem_init(); //初始化內(nèi)存池
- exfuns_init(); //為fatfs相關(guān)變量申請(qǐng)內(nèi)存
- f_mount(fs[0],"0:",1); //掛載SD卡
- f_mount(fs[1],"1:",1); //掛載FLASH.
- key=KEY_Scan(0);
- if(key==KEY0_PRES) //強(qiáng)制校準(zhǔn)
- {
- LCD_Clear(WHITE); //清屏
- tp_dev.adjust(); //屏幕校準(zhǔn)
- LCD_Clear(WHITE); //清屏
- }
- fontok=font_init(); //檢查字庫是否OK
- if(fontok||key==KEY1_PRES)//需要更新字庫(字庫不存在/KEY1按下)
- {
- LCD_Clear(WHITE); //清屏
- POINT_COLOR=RED; //設(shè)置字體為紅色
- LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32");
- while(SD_Initialize()) //檢測(cè)SD卡
- {
- LCD_ShowString(60,70,200,16,16,"SD Card Failed!");
- delay_ms(200);
- LCD_Fill(60,70,200+60,70+16,WHITE);
- delay_ms(200);
- }
- LCD_ShowString(60,70,200,16,16,"SD Card OK");
- LCD_ShowString(60,90,200,16,16,"Font Updating...");
- key=update_font(20,110,16);//更新字庫
- while(key)//更新失敗
- {
- LCD_ShowString(60,110,200,16,16,"Font Update Failed!");
- delay_ms(200);
- LCD_Fill(20,110,200+20,110+16,WHITE);
- delay_ms(200);
- }
- LCD_ShowString(60,110,200,16,16,"Font Update Success!");
- delay_ms(1500);
- LCD_Clear(WHITE);//清屏
- }
- atk_rm04_init(); //初始化RM04模塊
- atk_rm04_test(); //進(jìn)入RM04測(cè)試
- }
- common.c:
- #include "common.h"
- void atk_rm04_init(void)
- {
- #if AT_MODE_CONFIG==0
- RCC->APB2ENR|=1<<2; //PA時(shí)鐘使能
- GPIOA->CRL&=0XFFF0FFFF;
- GPIOA->CRL|=3<<4*4; //PA4推挽輸出
- ES_CTRL=1; //PA4輸出高
- #endif
- USART2_Init(115200); //初始化串口2
- }
- //usmart支持部分
- //將收到的AT指令應(yīng)答數(shù)據(jù)返回給電腦串口
- //mode:0,不清零USART2_RX_STA;
- // 1,清零USART2_RX_STA;
- void atk_rm04_at_response(u8 mode)
- {
- if(USART2_RX_STA&0X8000) //接收到一次數(shù)據(jù)了
- {
- USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結(jié)束符
- printf("%s",USART2_RX_BUF); //發(fā)送到串口
- if(mode)USART2_RX_STA=0;
- }
- }
- //ATK-RM04發(fā)送命令后,檢測(cè)接收到的應(yīng)答
- //str:期待的應(yīng)答結(jié)果
- //返回值:0,沒有得到期待的應(yīng)答結(jié)果
- // 其他,期待應(yīng)答結(jié)果的位置(str的位置)
- u8* atk_rm04_check_cmd(u8 *str)
- {
-
- char *strx=0;
- if(USART2_RX_STA&0X8000) //接收到一次數(shù)據(jù)了
- {
- USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結(jié)束符
- strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
- }
- return (u8*)strx;
- }
- //向ATK-RM04發(fā)送命令
- //cmd:發(fā)送的命令字符串(不需要添加回車了)
- //ack:期待的應(yīng)答結(jié)果,如果為空,則表示不需要等待應(yīng)答
- //waittime:等待時(shí)間(單位:10ms)
- //返回值:0,發(fā)送成功(得到了期待的應(yīng)答結(jié)果)
- // 1,發(fā)送失敗
- u8 atk_rm04_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
- {
- u8 res=0;
- USART2_RX_STA=0;
- u2_printf("%s\r",cmd); //發(fā)送命令
- if(ack&&waittime) //需要等待應(yīng)答
- {
- while(--waittime) //等待倒計(jì)時(shí)
- {
- delay_ms(10);
- if(USART2_RX_STA&0X8000)//接收到期待的應(yīng)答結(jié)果
- {
- if(atk_rm04_check_cmd(ack))break;//得到有效數(shù)據(jù)
- USART2_RX_STA=0;
- }
- }
- if(waittime==0)res=1;
- }
- return res;
- }
- //ATK-RM04退出透傳模式
- //返回值:0,退出成功;
- // 1,退出失敗
- u8 atk_rm04_quit_trans(void)
- {
- #if AT_MODE_CONFIG==1 //使用串口特殊序列退出透傳,進(jìn)入AT模式
- while(DMA1_Channel7->CNDTR!=0); //等待通道7傳輸完成
- delay_ms(15); //大于串口組幀時(shí)間(10ms)
- while((USART2->SR&0X40)==0); //等待發(fā)送空
- USART2->DR='+';
- delay_ms(15); //大于串口組幀時(shí)間(10ms)
- while((USART2->SR&0X40)==0); //等待發(fā)送空
- USART2->DR='+';
- delay_ms(15); //大于串口組幀時(shí)間(10ms)
- while((USART2->SR&0X40)==0); //等待發(fā)送空
- USART2->DR='+';
- delay_ms(500); //等待500ms
- while((USART2->SR&0X40)==0); //等待發(fā)送空
- USART2->DR=0X1B;
- delay_ms(15); //大于串口組幀時(shí)間(10ms)
- while((USART2->SR&0X40)==0); //等待發(fā)送空
- USART2->DR=0X1B;
- delay_ms(15); //大于串口組幀時(shí)間(10ms)
- while((USART2->SR&0X40)==0); //等待發(fā)送空
- USART2->DR=0X1B;
- delay_ms(15); //大于串口組幀時(shí)間(10ms)
- return atk_rm04_send_cmd("at","at",20);//退出透傳判斷.
- #else //使用ES/RST引腳控制,退出透傳,進(jìn)入AT模式
- ES_CTRL=0; //拉低ES/RST
- delay_ms(120); //等待120ms
- ES_CTRL=1; //ES/RST恢復(fù)
- return 0;
- #endif
- }
- //獲取ATK-RM04模塊的連接狀態(tài)
- //返回值:0,未連接;1,連接成功.
- u8 atk_rm04_consta_check(void)
- {
- u8 *p;
- u8 res;
- if(atk_rm04_quit_trans())return 0; //退出透傳
- atk_rm04_send_cmd("at+S2N_Stat=?","?",50); //發(fā)送at+S2N_Stat=?指令,查詢連接狀態(tài)
- p=atk_rm04_check_cmd("\r\n");
- res=*(p+2); //得到連接狀態(tài)
- atk_rm04_send_cmd("at+out_trans=0","ok",50);//發(fā)送at+out_trans=0,進(jìn)入透傳模式
- return res;
- }
- //鍵盤碼表
- const u8* kbd_tbl[13]={"1","2","3","4","5","6","7","8","9",".","0","#","DEL"};
- u8* kbd_fn_tbl[2];
- //加載鍵盤界面(尺寸為240*140)
- //x,y:界面起始坐標(biāo)(320*240分辨率的時(shí)候,x必須為0)
- void atk_rm04_load_keyboard(u16 x,u16 y)
- {
- u16 i;
- POINT_COLOR=RED;
- LCD_Fill(x,y,x+240,y+140,WHITE);
- LCD_DrawRectangle(x,y,x+240,y+140);
- LCD_DrawRectangle(x+80,y,x+160,y+140);
- LCD_DrawRectangle(x,y+28,x+240,y+56);
- LCD_DrawRectangle(x,y+84,x+240,y+112);
- POINT_COLOR=BLUE;
- for(i=0;i<15;i++)
- {
- if(i<13)Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),(u8*)kbd_tbl,16,80);
- else Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),kbd_fn_tbl[i-13],16,80);
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
AT指令集018.zip
(619.52 KB, 下載次數(shù): 15)
|
|