将wifi模块改到串口1上,一直是未检测到模块。wifi模块上的RTXD和PA10相连,RRXD和PA9相连,有没有错?
程序是根据原子哥的改的。
[mw_shl_code=c,true]//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("%s\r",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("\r\n");
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("\r\n");
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","\r\n",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测?
}
[/mw_shl_code]
|