久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2606|回復(fù): 0
收起左側(cè)

ATK-RM04 WIFI模塊程序

[復(fù)制鏈接]
ID:511461 發(fā)表于 2019-7-30 14:38 | 顯示全部樓層 |閱讀模式
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:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "key.h"
  7. #include "usmart.h"
  8. #include "malloc.h"  
  9. #include "MMC_SD.h"
  10. #include "ff.h"  
  11. #include "exfuns.h"
  12. #include "fontupd.h"
  13. #include "text.h"      
  14. #include "common.h"
  15. #include "touch.h"      
  16. #include "usart2.h"      
  17. //ALIENTEK Mini STM32開發(fā)板擴(kuò)展實(shí)驗(yàn)15
  18. //ATK-RM04 WIFI模塊測(cè)試實(shí)驗(yàn)
  19. //廣州市星翼電子科技有限公司  


  20. int main(void)
  21. {
  22.         u8 key,fontok=0;           
  23.         delay_init();                     //延時(shí)函數(shù)初始化
  24.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)         
  25.         uart_init(115200);                 //串口初始化為9600                        
  26.         LCD_Init();                                //初始化液晶
  27.         LED_Init();                 //LED初始化         
  28.         KEY_Init();                                //按鍵初始化                                                                                                                     

  29.         tp_dev.init();                        //觸摸屏初始化
  30.         mem_init();                                //初始化內(nèi)存池            
  31.         exfuns_init();                        //為fatfs相關(guān)變量申請(qǐng)內(nèi)存  
  32.   f_mount(fs[0],"0:",1);         //掛載SD卡  
  33.                   f_mount(fs[1],"1:",1);         //掛載FLASH.
  34.         key=KEY_Scan(0);  
  35.         if(key==KEY0_PRES)                //強(qiáng)制校準(zhǔn)
  36.         {
  37.                 LCD_Clear(WHITE);        //清屏
  38.                 tp_dev.adjust();          //屏幕校準(zhǔn)  
  39.                 LCD_Clear(WHITE);        //清屏
  40.         }
  41.         fontok=font_init();                //檢查字庫是否OK
  42.         if(fontok||key==KEY1_PRES)//需要更新字庫(字庫不存在/KEY1按下)                        
  43.         {
  44.                 LCD_Clear(WHITE);                           //清屏
  45.                 POINT_COLOR=RED;                        //設(shè)置字體為紅色                                
  46.                 LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32");
  47.                 while(SD_Initialize())                //檢測(cè)SD卡
  48.                 {
  49.                         LCD_ShowString(60,70,200,16,16,"SD Card Failed!");
  50.                         delay_ms(200);
  51.                         LCD_Fill(60,70,200+60,70+16,WHITE);
  52.                         delay_ms(200);                    
  53.                 }                                                                                                                     
  54.                 LCD_ShowString(60,70,200,16,16,"SD Card OK");
  55.                 LCD_ShowString(60,90,200,16,16,"Font Updating...");
  56.                 key=update_font(20,110,16);//更新字庫
  57.                 while(key)//更新失敗               
  58.                 {                                          
  59.                         LCD_ShowString(60,110,200,16,16,"Font Update Failed!");
  60.                         delay_ms(200);
  61.                         LCD_Fill(20,110,200+20,110+16,WHITE);
  62.                         delay_ms(200);                       
  63.                 }                  
  64.                 LCD_ShowString(60,110,200,16,16,"Font Update Success!");
  65.                 delay_ms(1500);      
  66.                 LCD_Clear(WHITE);//清屏               
  67.         }  
  68.         atk_rm04_init();                //初始化RM04模塊
  69.         atk_rm04_test();                //進(jìn)入RM04測(cè)試
  70. }

  71. common.c:
  72. #include "common.h"
  73. void atk_rm04_init(void)
  74. {
  75. #if AT_MODE_CONFIG==0
  76.         RCC->APB2ENR|=1<<2;            //PA時(shí)鐘使能         
  77.         GPIOA->CRL&=0XFFF0FFFF;         
  78.         GPIOA->CRL|=3<<4*4;                //PA4推挽輸出
  79.         ES_CTRL=1;                                //PA4輸出高
  80. #endif
  81.         USART2_Init(115200);        //初始化串口2        
  82. }
  83. //usmart支持部分
  84. //將收到的AT指令應(yīng)答數(shù)據(jù)返回給電腦串口
  85. //mode:0,不清零USART2_RX_STA;
  86. //     1,清零USART2_RX_STA;
  87. void atk_rm04_at_response(u8 mode)
  88. {
  89.         if(USART2_RX_STA&0X8000)                //接收到一次數(shù)據(jù)了
  90.         {
  91.                 USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結(jié)束符
  92.                 printf("%s",USART2_RX_BUF);        //發(fā)送到串口
  93.                 if(mode)USART2_RX_STA=0;
  94.         }
  95. }
  96. //ATK-RM04發(fā)送命令后,檢測(cè)接收到的應(yīng)答
  97. //str:期待的應(yīng)答結(jié)果
  98. //返回值:0,沒有得到期待的應(yīng)答結(jié)果
  99. //    其他,期待應(yīng)答結(jié)果的位置(str的位置)
  100. u8* atk_rm04_check_cmd(u8 *str)
  101. {
  102.       
  103.         char *strx=0;
  104.         if(USART2_RX_STA&0X8000)                //接收到一次數(shù)據(jù)了
  105.         {
  106.                 USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結(jié)束符
  107.                 strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
  108.         }
  109.         return (u8*)strx;
  110. }
  111. //向ATK-RM04發(fā)送命令
  112. //cmd:發(fā)送的命令字符串(不需要添加回車了)
  113. //ack:期待的應(yīng)答結(jié)果,如果為空,則表示不需要等待應(yīng)答
  114. //waittime:等待時(shí)間(單位:10ms)
  115. //返回值:0,發(fā)送成功(得到了期待的應(yīng)答結(jié)果)
  116. //       1,發(fā)送失敗
  117. u8 atk_rm04_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
  118. {
  119.         u8 res=0;
  120.         USART2_RX_STA=0;
  121.         u2_printf("%s\r",cmd);        //發(fā)送命令
  122.         if(ack&&waittime)                //需要等待應(yīng)答
  123.         {
  124.                 while(--waittime)        //等待倒計(jì)時(shí)
  125.                 {
  126.                         delay_ms(10);
  127.                         if(USART2_RX_STA&0X8000)//接收到期待的應(yīng)答結(jié)果
  128.                         {
  129.                                 if(atk_rm04_check_cmd(ack))break;//得到有效數(shù)據(jù)
  130.                                 USART2_RX_STA=0;
  131.                         }
  132.                 }
  133.                 if(waittime==0)res=1;
  134.         }
  135.         return res;
  136. }
  137. //ATK-RM04退出透傳模式
  138. //返回值:0,退出成功;
  139. //       1,退出失敗
  140. u8 atk_rm04_quit_trans(void)
  141. {
  142. #if AT_MODE_CONFIG==1        //使用串口特殊序列退出透傳,進(jìn)入AT模式
  143.         while(DMA1_Channel7->CNDTR!=0);        //等待通道7傳輸完成   
  144.         delay_ms(15);                                        //大于串口組幀時(shí)間(10ms)
  145.         while((USART2->SR&0X40)==0);        //等待發(fā)送空
  146.         USART2->DR='+';      
  147.         delay_ms(15);                                        //大于串口組幀時(shí)間(10ms)
  148.         while((USART2->SR&0X40)==0);        //等待發(fā)送空
  149.         USART2->DR='+';      
  150.         delay_ms(15);                                        //大于串口組幀時(shí)間(10ms)
  151.         while((USART2->SR&0X40)==0);        //等待發(fā)送空
  152.         USART2->DR='+';      
  153.         delay_ms(500);                                        //等待500ms
  154.         while((USART2->SR&0X40)==0);        //等待發(fā)送空
  155.         USART2->DR=0X1B;      
  156.         delay_ms(15);                                        //大于串口組幀時(shí)間(10ms)
  157.         while((USART2->SR&0X40)==0);        //等待發(fā)送空
  158.         USART2->DR=0X1B;      
  159.         delay_ms(15);                                        //大于串口組幀時(shí)間(10ms)
  160.         while((USART2->SR&0X40)==0);        //等待發(fā)送空
  161.         USART2->DR=0X1B;      
  162.         delay_ms(15);                                        //大于串口組幀時(shí)間(10ms)
  163.         return atk_rm04_send_cmd("at","at",20);//退出透傳判斷.
  164. #else                                        //使用ES/RST引腳控制,退出透傳,進(jìn)入AT模式
  165.         ES_CTRL=0;                        //拉低ES/RST
  166.         delay_ms(120);                //等待120ms
  167.         ES_CTRL=1;                        //ES/RST恢復(fù)
  168.         return 0;
  169. #endif
  170. }
  171. //獲取ATK-RM04模塊的連接狀態(tài)
  172. //返回值:0,未連接;1,連接成功.
  173. u8 atk_rm04_consta_check(void)
  174. {
  175.         u8 *p;
  176.         u8 res;
  177.         if(atk_rm04_quit_trans())return 0;                        //退出透傳
  178.         atk_rm04_send_cmd("at+S2N_Stat=?","?",50);        //發(fā)送at+S2N_Stat=?指令,查詢連接狀態(tài)
  179.         p=atk_rm04_check_cmd("\r\n");
  180.         res=*(p+2);                                                                        //得到連接狀態(tài)      
  181.         atk_rm04_send_cmd("at+out_trans=0","ok",50);//發(fā)送at+out_trans=0,進(jìn)入透傳模式
  182.         return res;
  183. }
  184. //鍵盤碼表
  185. const u8* kbd_tbl[13]={"1","2","3","4","5","6","7","8","9",".","0","#","DEL"};
  186. u8* kbd_fn_tbl[2];
  187. //加載鍵盤界面(尺寸為240*140)
  188. //x,y:界面起始坐標(biāo)(320*240分辨率的時(shí)候,x必須為0)
  189. void atk_rm04_load_keyboard(u16 x,u16 y)
  190. {
  191.         u16 i;
  192.         POINT_COLOR=RED;
  193.         LCD_Fill(x,y,x+240,y+140,WHITE);
  194.         LCD_DrawRectangle(x,y,x+240,y+140);                                                  
  195.         LCD_DrawRectangle(x+80,y,x+160,y+140);         
  196.         LCD_DrawRectangle(x,y+28,x+240,y+56);
  197.         LCD_DrawRectangle(x,y+84,x+240,y+112);
  198.         POINT_COLOR=BLUE;
  199.         for(i=0;i<15;i++)
  200.         {
  201.                 if(i<13)Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),(u8*)kbd_tbl,16,80);
  202.                 else Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),kbd_fn_tbl[i-13],16,80);
  203.         }                                                            
  204. }
復(fù)制代碼

全部資料51hei下載地址:
AT指令集018.zip (619.52 KB, 下載次數(shù): 15)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品乱码久久久久久按摩 | 日日操视频 | 国产精品毛片 | 九九精品影院 | 久久久久久久国产精品视频 | 亚洲性人人天天夜夜摸 | 久久婷婷av| 亚州精品天堂中文字幕 | www.性色| 亚洲高清视频一区二区 | 亚洲色图插插插 | 欧美精品中文字幕久久二区 | 波多野结衣在线观看一区二区三区 | 国产精品高清在线 | 国产福利在线 | 欧美日韩高清 | 天天想天天干 | 久草www| 欧美激情视频一区二区三区在线播放 | 国产精品视频网址 | 午夜影院 | 国产欧美日韩一区二区三区在线 | 亚洲视频在线播放 | 久久国产亚洲 | 欧美日韩亚洲二区 | 欧美日韩一区二区三区在线观看 | 日韩在线中文 | 亚洲精品一区二区在线观看 | 亚洲精品免费在线观看 | 91精品国产92| 欧美一级二级三级视频 | 日韩中文一区二区三区 | 欧美亚洲视频在线观看 | 国产日韩欧美在线观看 | 日韩在线精品强乱中文字幕 | 欧美久久不卡 | re久久 | 免费在线精品视频 | 亚洲精品二区 | 综合久久久 | 99在线免费观看视频 |