OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3467|回复: 0

关于蓝牙HC-05的通信问题其中一个是发送汉字显示乱码

[复制链接]

10

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2018-8-2
在线时间
73 小时
发表于 2018-10-14 10:22:00 | 显示全部楼层 |阅读模式
关于蓝牙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;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 21:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表