中级会员
- 积分
- 244
- 金钱
- 244
- 注册时间
- 2018-8-2
- 在线时间
- 73 小时
|
关于蓝牙HC-05的通信问题其中一个是stm32与手机可以通信之后发送汉字显示乱码还有一个就是发送AT命令返回来显示字符串就是零但是一用while( USART3_RX_BUF[0]=='O'&&USART3_RX_BUF[1]=='K')该代码死循环竟然出来了
很奇葩
这是一下代码不知道问题再哪里希望大家帮忙看看
extern u8 USART3_RX_BUF[USART3_MAX_RECV_LEN];
u8 Write_COM( u8 *Command, u8 *Reply )
{
u8 receive=1,i=0,length=0;
// sprintf( (char *)Sendbuff,(char *)Command); //AT命令后面需要换行,然后点发送命令才有效,
//如果没有换行,发送命令,软件只会把它们当作是字符
//所以必须要加 \r\n这个回车的在每一个命令后面
// u3_printf( "AT+RESET\r\n" );
length=strlen((char*)Command);
for(i=0;i<length;i++)
{
while( !(USART3->SR & 0x40) ){}
USART3->DR=*Command;
Command++;
}
while((USART3_RX_STA&0X8000)==0){}
delay_ms(5);
printf("USART3_RX_BUF==%s \n",USART3_RX_BUF); 只显示0不知怎么回事
printf("show the USART3_RX_BUF data \n");
// while(strcmp( (char*)USART3_RX_BUF , (char *)Reply) ){ printf("wwww"); } //上面比较两个字符串失败
while( USART3_RX_BUF[0]=='O'&&USART3_RX_BUF[1]=='K') { printf("wwww"); }下面成功了
receive=0; //比较两个字符串
printf("%d",receive);
if( receive==1 ) return ERROR;
length=strlen((char*)USART3_RX_BUF);
for(i=0;i<length;i++) //清空接收数组
{
printf("%c",USART3_RX_BUF);
// USART3_RX_BUF=0;
}
return receive;
}
u8 MyHC05_Initailizion(void)
{
u8 i=0;
RCC->AHB1ENR|=1<<2;//使能PORTC时钟
GPIO_Set(GPIOC,PIN0,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PC0设置
GPIO_Set(GPIOC,PIN1,GPIO_MODE_IN,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PC0设置
usart3_init(42,115200); //设置波特率的格式是 例如 AT+UART=9600,0,0
EN=1;
i=Write_COM( "AT\r\n", "OK\n" );
if(i) return ERROR;
printf("AT OK\n");
// i=Write_COM( "AT+ROLE?\r\n", "+ROLE" );
// if(i) return ERROR;
// printf("AT+ROLE OK\n");
return Success;
}
u8 Get_deviceName(void)
{
u8 i=1;
i=Write_COM( "AT+NAME?\n", "+NAME" );
if(i) return ERROR;
return Success;
}
u8 Set_Mode(u8 mode) //mode=1 Master mode=0 slave
{
u8 i=1;
if(mode==1) i=Write_COM( "AT+ROLE=1\n", "OK\n" );
else if(mode==0) i=Write_COM( "AT+ROLE=0\n", "OK\n" );
if(i) return ERROR;
printf("aaaa\n");
i=Write_COM( "AT+ROLE?\n", "+ROLE" );
if(i) return ERROR;
printf("bbbb\n");
return Success;
}
u8 Get_devicePassword(void)
{
u8 i=1;
i=Write_COM( "AT+PSWD?\r\n", "+PSWD" );
if(i) return ERROR;
return Success;
}
u8 Device_Reset(void)
{
u8 i=1;
i=Write_COM( "AT+RESET\r", "OK\r\n" );
if(i) return ERROR;
EN=0;
return Success;
}
|
|