標(biāo)題:
ATK-RM04 WIFI模塊程序
[打印本頁(yè)]
作者:
aaaaaa。
時(shí)間:
2019-7-30 14:38
標(biāo)題:
ATK-RM04 WIFI模塊程序
AT指令格式:AT指令都以”AT”開(kāi)頭,以<CR>(即\r,回車符)結(jié)束,模塊運(yùn)行后,串口默認(rèn)的設(shè)置為:8位數(shù)據(jù)位、1位停止位、無(wú)奇偶校驗(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)中,表示沒(mé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開(kāi)發(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(); //檢查字庫(kù)是否OK
if(fontok||key==KEY1_PRES)//需要更新字庫(kù)(字庫(kù)不存在/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);//更新字庫(kù)
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,沒(méi)有得到期待的應(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退出透?jìng)髂J?br />
//返回值:0,退出成功;
// 1,退出失敗
u8 atk_rm04_quit_trans(void)
{
#if AT_MODE_CONFIG==1 //使用串口特殊序列退出透?jìng)?進(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);//退出透?jìng)髋袛?
#else //使用ES/RST引腳控制,退出透?jìng)?進(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; //退出透?jìng)?br />
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)入透?jìng)髂J?br />
return res;
}
//鍵盤(pán)碼表
const u8* kbd_tbl[13]={"1","2","3","4","5","6","7","8","9",".","0","#","DEL"};
u8* kbd_fn_tbl[2];
//加載鍵盤(pán)界面(尺寸為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)
2019-7-30 14:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
ATK-RM04 WIFI模塊測(cè)試實(shí)驗(yàn).7z
(716.41 KB, 下載次數(shù): 21)
2019-7-30 20:51 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1