中级会员
- 积分
- 249
- 金钱
- 249
- 注册时间
- 2017-10-31
- 在线时间
- 32 小时
|
本帖最后由 duritou 于 2020-8-11 09:51 编辑
最近在学蓝牙模块,发现同样的数据LED1 ON,手机蓝牙发给单片机可以点亮led1,而hc05模块发给单片机LED1 ON却点亮不了。按我的理解是收发数据都是一样的,按理说串口检验也还是一样的,为什么效果区别对待? while(1) {
key=KEY_Scan(0);
if(key==WKUP_PRES) //切换模块主从设置
{
key=HC05_Get_Role();
if(key!=0XFF)
{
key=!key; //状态取反
if(key==0)HC05_Set_Cmd("AT+ROLE=0");
else HC05_Set_Cmd("AT+ROLE=1");
HC05_Role_Show();
HC05_Set_Cmd("AT+RESET"); //复位ATK-HC05模块
delay_ms(200);
}
}else if(key==KEY0_PRES)
{
sendmask=!sendmask; //发送/停止发送
if(sendmask==0)LCD_Fill(30+40,160,240,160+16,WHITE);//清除显示
}else delay_ms(10);
if(t==50)
{
if(sendmask) //定时发送
{
sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt);
LCD_ShowString(30+40,160,200,16,16,sendbuf); //显示发送数据
u3_printf("ALIENTEK HC05 %d\r\n",sendcnt); //发送到蓝牙模块
sendcnt++;
if(sendcnt>99)sendcnt=0;
}
HC05_Sta_Show();
t=0;
LED0=!LED0;
}
if(USART3_RX_STA&0X8000) //接收到一次数据了
{
LCD_Fill(30,200,240,320,WHITE); //清除显示
reclen=USART3_RX_STA&0X7FFF; //得到数据长度
for(i=0;i<reclen;i++)
{
USART1->DR=USART3_RX_BUF;
while((USART1->SR&0X40)==0);//等待发送结束
}
USART3_RX_STA=0;
USART3_RX_BUF[reclen]=0; //加入结束符
if(reclen==8||reclen==7) //控制DS1检测
{
if(strcmp((const char*)USART3_RX_BUF,"LED1 ON")==0)LED1=0; //打开LED1
if(strcmp((const char*)USART3_RX_BUF,"LED1 OFF")==0)LED1=1;//关闭LED1
}
printf("%s\n",USART3_RX_BUF);
delay_ms(20);
LCD_ShowString(30,200,209,119,16,USART3_RX_BUF);//显示接收到的数据
delay_ms(20);
USART3_RX_STA=0;
}
t++;
}
}
|
|