完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
将wifi模块改到串口1上,一直是未检测到模块。wifi模块上的RTXD和PA10相连,RRXD和PA9相连,有没有错?
程序是根据原子哥的改的。[C] 纯文本查看 复制代码 //ATK-RM04模块初始化void atk_rm04_init(void){ RCC->APB2ENR|=1<<2; //PA时钟使能 GPIOA->CRL&=0XFFF0FFFF; GPIOA->CRL|=3<<4*4;//PA4推挽输出 ES_CTRL=1;//PA4输出高 USART1_Init(115200);//初始化串口1} //ATK-RM04发送命令后,检测接收到的应答//str:期待的应答结果//返回值:0,没有得到期待的应答结果// 其他,期待应答结果的位置(str的位置)u8* atk_rm04_check_cmd(u8 *str){ char *strx=0; if(USART1_RX_STA&0X8000)//接收到一次数据了 { USART1_RX_BUF[USART1_RX_STA&0X7FFF]=0;//添加结束符 strx=strstr((const char*)USART1_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; USART1_RX_STA=0; u1_printf("%sr",cmd);//发送命令 if(ack&&waittime)//需要等待应答 { while(--waittime)//等待倒计时 { delay_ms(10); if(USART1_RX_STA&0X8000)//接收到期待的应答结果 { if(atk_rm04_check_cmd(ack))break;//得到有效数据 USART1_RX_STA=0; } } if(waittime==0)res=1; } return res;} //ATK-RM04退出透传模式//返回值:0,退出成功;// 1,退出失败u8 atk_rm04_quit_trans(void){ ES_CTRL=0;//拉低ES/RST delay_ms(120);//等待120ms ES_CTRL=1;//ES/RST恢复 return 0;}//获取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("rn"); res=*(p+2);//得到连接状态 atk_rm04_send_cmd("at+out_trans=0","ok",50);//发送at+out_trans=0,进入透传模式 return res;}//获取WIFI STA连接状态(检查WIFI STA是否连上路由器)//返回值:0,连接失败;1,连接成功;u8 atk_rm04_get_wifista_state(void){ u8 *p; atk_rm04_send_cmd("at+wifi_ConState=?","?",20);//获取WIFI STA连接状态 p=atk_rm04_check_cmd("rn"); return strstr((const char*)p,"Connected")?1:0;}//IP设置//title:ip设置标题//mode:工作模式//port:端口号//*ip:ip缓存区(返回IP给上层函数)//返回值:0,确认连接;1,取消连接.u8 atk_rm04_ip_set(u8* mode,u8* port,u8* ip) { u8 res=0; u8 key; u8 timex=0; u8 iplen=0;//IP长度 LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str(30,90,200,16,"工作模式:",16,0);//工作模式显示 Show_Str(30,110,200,16,"IP地址:",16,0);//IP地址可以键盘设置 Show_Str(30,130,200,16,"端口:",16,0);//端口号 kbd_fn_tbl[0]="连接"; kbd_fn_tbl[1]="返回"; atk_rm04_load_keyboard(0,180);//显示键盘 POINT_COLOR=BLUE; Show_Str(30+72,90,200,16,mode,16,0);//显示工作模式 Show_Str(30+40,130,200,16,port,16,0);//显示端口 ip[0]=0; while(1) { key=atk_rm04_get_keynum(0,180); if(key) { if(key<12) { if(iplen<15) { ip[iplen++]=kbd_tbl[key-1][0]; } }else { if(key==13)if(iplen)iplen--;//删除 if(key==14&&iplen)break; //确认连接 if(key==15){res=1;break;}//取消连接 } ip[iplen]=0; LCD_Fill(30+56,110,239,110+16,WHITE); Show_Str(30+56,110,200,16,ip,16,0);//显示IP地址 } timex++; if(timex==20) { timex=0; LED0=!LED0; } delay_ms(10); } return res;}//ATK-RM04模块测试主函数void atk_rm04_test(void){ POINT_COLOR=RED; Show_Str_Mid(0,30,"ATK-RM04 WIFI模块测试",16,240); atk_rm04_quit_trans();//退出透传 while(atk_rm04_send_cmd("at","rn",20))//检查WIFI模块是否在线 { Show_Str(40,55,200,16,"未检测到模块!!!",16,0); delay_ms(800); LCD_Fill(40,55,200,55+16,WHITE); Show_Str(40,55,200,16,"尝试连接模块...",16,0); atk_rm04_quit_trans();//退出透传 } delay_ms(10); atk_rm04_wifista_test();//WIFI STA测?} |
|
相关推荐
4个回答
|
|
楼主得学会分析问题。
没法检测到,你怀疑是哪里问题? 做了什么处理? 得到什么结果? 然后有什么疑惑? 这个时候,才是提问的时候。 就说没法检测到,没法检测到问题多了去了,自己要学会分析下先 |
|
|
|
|
|
|
|
不就是串口转发吗,串口一初始化没问题就行了,模块不确定能正常工作就先连pc调试好,定好波特率什么的
|
|
|
|
指令需求啊
|
|
|
|
只有小组成员才能发言,加入小组>>
7360 浏览 9 评论
2444 浏览 2 评论
为什么我用esp8266做TCP服务器网络调试助手一直连接不上去?
9547 浏览 3 评论
为什么我的ESP8266 AT指令一直返回error无法正常使用?
7388 浏览 0 评论
4199 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 21:31 , Processed in 0.754754 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号