欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
ATK-RM04 WIFI模塊程序
[打印本頁]
作者:
aaaaaa。
時間:
2019-7-30 14:38
標題:
ATK-RM04 WIFI模塊程序
AT指令格式:AT指令都以”AT”開頭,以<CR>(即\r,回車符)結束,模塊運行后,串口默認的設置為:8位數據位、1位停止位、無奇偶校驗位、硬件流控制(CTS/RTS).注意為了發送AT命令,最后還要加上<LF> (即\n,換行符)這是串口終端要求.
AT返回狀態包括三種情況 OK,ERROR,和命令相關的錯誤原因字符串.返回狀態前后都有一個<CR>字符.
如 <CR>OK<CR> 表示AT命令執行成功.
<CR>ERROR<CR> 表示AT命令執行失敗
<CR>NO DIAL TONE<CR> 只出現在ATD命令返回狀態中,表示沒有撥號音,這類返回狀態要查命令手冊
還有一些命令本身是要向DCE查詢數據,數據返回時,一般是+打頭命令.返回格式
<CR>+命令:命令結果<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開發板擴展實驗15
//ATK-RM04 WIFI模塊測試實驗
//廣州市星翼電子科技有限公司
int main(void)
{
u8 key,fontok=0;
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
uart_init(115200); //串口初始化為9600
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
KEY_Init(); //按鍵初始化
tp_dev.init(); //觸摸屏初始化
mem_init(); //初始化內存池
exfuns_init(); //為fatfs相關變量申請內存
f_mount(fs[0],"0:",1); //掛載SD卡
f_mount(fs[1],"1:",1); //掛載FLASH.
key=KEY_Scan(0);
if(key==KEY0_PRES) //強制校準
{
LCD_Clear(WHITE); //清屏
tp_dev.adjust(); //屏幕校準
LCD_Clear(WHITE); //清屏
}
fontok=font_init(); //檢查字庫是否OK
if(fontok||key==KEY1_PRES)//需要更新字庫(字庫不存在/KEY1按下)
{
LCD_Clear(WHITE); //清屏
POINT_COLOR=RED; //設置字體為紅色
LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32");
while(SD_Initialize()) //檢測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(); //進入RM04測試
}
common.c:
#include "common.h"
void atk_rm04_init(void)
{
#if AT_MODE_CONFIG==0
RCC->APB2ENR|=1<<2; //PA時鐘使能
GPIOA->CRL&=0XFFF0FFFF;
GPIOA->CRL|=3<<4*4; //PA4推挽輸出
ES_CTRL=1; //PA4輸出高
#endif
USART2_Init(115200); //初始化串口2
}
//usmart支持部分
//將收到的AT指令應答數據返回給電腦串口
//mode:0,不清零USART2_RX_STA;
// 1,清零USART2_RX_STA;
void atk_rm04_at_response(u8 mode)
{
if(USART2_RX_STA&0X8000) //接收到一次數據了
{
USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結束符
printf("%s",USART2_RX_BUF); //發送到串口
if(mode)USART2_RX_STA=0;
}
}
//ATK-RM04發送命令后,檢測接收到的應答
//str:期待的應答結果
//返回值:0,沒有得到期待的應答結果
// 其他,期待應答結果的位置(str的位置)
u8* atk_rm04_check_cmd(u8 *str)
{
char *strx=0;
if(USART2_RX_STA&0X8000) //接收到一次數據了
{
USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結束符
strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
}
return (u8*)strx;
}
//向ATK-RM04發送命令
//cmd:發送的命令字符串(不需要添加回車了)
//ack:期待的應答結果,如果為空,則表示不需要等待應答
//waittime:等待時間(單位:10ms)
//返回值:0,發送成功(得到了期待的應答結果)
// 1,發送失敗
u8 atk_rm04_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=0;
USART2_RX_STA=0;
u2_printf("%s\r",cmd); //發送命令
if(ack&&waittime) //需要等待應答
{
while(--waittime) //等待倒計時
{
delay_ms(10);
if(USART2_RX_STA&0X8000)//接收到期待的應答結果
{
if(atk_rm04_check_cmd(ack))break;//得到有效數據
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 //使用串口特殊序列退出透傳,進入AT模式
while(DMA1_Channel7->CNDTR!=0); //等待通道7傳輸完成
delay_ms(15); //大于串口組幀時間(10ms)
while((USART2->SR&0X40)==0); //等待發送空
USART2->DR='+';
delay_ms(15); //大于串口組幀時間(10ms)
while((USART2->SR&0X40)==0); //等待發送空
USART2->DR='+';
delay_ms(15); //大于串口組幀時間(10ms)
while((USART2->SR&0X40)==0); //等待發送空
USART2->DR='+';
delay_ms(500); //等待500ms
while((USART2->SR&0X40)==0); //等待發送空
USART2->DR=0X1B;
delay_ms(15); //大于串口組幀時間(10ms)
while((USART2->SR&0X40)==0); //等待發送空
USART2->DR=0X1B;
delay_ms(15); //大于串口組幀時間(10ms)
while((USART2->SR&0X40)==0); //等待發送空
USART2->DR=0X1B;
delay_ms(15); //大于串口組幀時間(10ms)
return atk_rm04_send_cmd("at","at",20);//退出透傳判斷.
#else //使用ES/RST引腳控制,退出透傳,進入AT模式
ES_CTRL=0; //拉低ES/RST
delay_ms(120); //等待120ms
ES_CTRL=1; //ES/RST恢復
return 0;
#endif
}
//獲取ATK-RM04模塊的連接狀態
//返回值: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); //發送at+S2N_Stat=?指令,查詢連接狀態
p=atk_rm04_check_cmd("\r\n");
res=*(p+2); //得到連接狀態
atk_rm04_send_cmd("at+out_trans=0","ok",50);//發送at+out_trans=0,進入透傳模式
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:界面起始坐標(320*240分辨率的時候,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);
}
}
復制代碼
全部資料51hei下載地址:
AT指令集018.zip
(619.52 KB, 下載次數: 15)
2019-7-30 14:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
ATK-RM04 WIFI模塊測試實驗.7z
(716.41 KB, 下載次數: 21)
2019-7-30 20:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1