OpenEdv-开源电子网

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

新人求教,stm32驱动hc05问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-1-4
在线时间
2 小时
发表于 2020-1-8 14:58:00 | 显示全部楼层 |阅读模式
1金钱
原本例程里hc05是接usart3的pb10和pb11 ,因为我已经把pb11接了dht11所以我用的usart1的pa9和pa10接的hc05的rx与tx,编译都没有问题,但是蓝牙连接上之后电脑上的串口调试助手一直收到问号或者空白数据,如图上一样,下面是我的主函数和hc05.c的代码 ,程序我也放附件里了,请各位帮我看看是怎么回事
int main(void)
{
        u8 t=0;                           
        u8 temperature;              
        u8 humidity;
        u8 reclen=0;
  int tmp;         
         BEEP_Init();//蜂鸣器初始化
        delay_init();                           //延时初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        DHT11_Init();//dht11初始化
        OLED_Init();                    //初始化OLED
        usmart_dev.init(72);         //初始化USMART        
  initial_olcd();                  //初始化        
        clear_screen();                        //清屏        
        disp_string_8x16_16x16(1,1,"温度:");
        disp_string_8x16_16x16(3,1,"湿度:");
        delay_ms(1000);                        //等待蓝牙模块上电稳定
         HC05_Init();        //初始化ATK-HC05模块  
        USART_RX_STA=0;        
            
         while(1)         
        
        {        
                if(t%10==0)                        //每100ms读取一次
                {                                                                          
                        DHT11_Read_Data(&temperature,&humidity);        //读取温湿度值
                        display_number_16x8(1,46,temperature);
                        display_number_16x8(3,46,humidity);
                        u1_printf("%d %d\r\n",temperature,humidity);                //发送到蓝牙模块
                tmp=(int)temperature;
                                if((tmp<=10) || (tmp>=25))
                {
                        beep = !beep;
      led2 = 1;
                }
                else
                {
                        beep = 0;
      led2 = 0;
                }
    delay_ms(50);                                                               

          }
        delay_ms(10);
                t++;
                if(t==20)
                {
                        t=0;
                }
                if(USART_RX_STA&0X8000)                        //接收到一次数据了
                {
               
                           reclen=USART_RX_STA&0X7FFF;        //得到数据长度
                          USART_RX_BUF[reclen]=0;                 //加入结束符
                        if(reclen==9||reclen==8)                 //控制DS1检测
                        {
                                if(strcmp((const char*)USART_RX_BUF,"关闭报警器")==0);        //关闭蜂鸣器
                  {
                                beep = 0;
                        }
                  }
                         USART_RX_STA=0;         
//                disp_string_8x16_16x16(5,1,USART_RX_BUF);
                }                                                                                                                 
                        
        }
//////////////////////////////////////
u8 HC05_Init(void)
{
        u8 retry=10,t;                           
        u8 temp=1;
       
        GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);        //使能PORTA

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;                                 // 端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                  //上拉输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根据设定参数初始化A15
         

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                 // 端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOA4

        GPIO_SetBits(GPIOA,GPIO_Pin_4);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
        HC05_KEY=1;
        HC05_LED=1;
       
        usart_init(9600);        //初始化串口1为:9600,波特率.
       
        while(retry--)
        {
                HC05_KEY=1;                                        //KEY置高,进入AT模式
                delay_ms(10);
                printf("AT\r\n");                //发送AT测试指令
                HC05_KEY=0;                                        //KEY拉低,退出AT模式
                for(t=0;t<10;t++)                         //最长等待50ms,来接收HC05模块的回应
                {
                        if(USART_RX_STA&0X8000)break;
                        delay_ms(5);
                }               
                if(USART_RX_STA&0X8000)        //接收到一次数据了
                {
                        temp=USART_RX_STA&0X7FFF;        //得到数据长度
                        USART_RX_STA=0;                         
                        if(temp==4&&USART_RX_BUF[0]=='O'&&USART_RX_BUF[1]=='K')
                        {
                                temp=0;//接收到OK响应
                                break;
                        }
                }                                           
        }                    
        if(retry==0)temp=1;        //检测失败
        return temp;          
}         
//////////下面是u1_printf的代码
void u1_printf(char* fmt,...)  
{  
        u16 i,j;
        va_list ap;
        va_start(ap,fmt);
        vsprintf((char*)USART_TX_BUF,fmt,ap);
        va_end(ap);
        i=strlen((const char*)USART_TX_BUF);                //此次发送数据的长度
        for(j=0;j<i;j++)                                                        //循环发送数据
        {
          while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   
                USART_SendData(USART1,USART_TX_BUF[j]);
        }
}

TIM图片20200108145506.png

2.zip

8.39 MB, 下载次数: 3

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

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14407
金钱
14407
注册时间
2018-8-3
在线时间
1156 小时
发表于 2020-1-8 16:12:33 | 显示全部楼层
直接仿真看看 是执行哪句 输出的数据    我看你描述的 好像是蓝牙和串口调试助手 都是连接的同一个串口一吗   检查下这些数据是不是蓝牙那边输出的
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-1-4
在线时间
2 小时
 楼主| 发表于 2020-1-8 20:34:30 | 显示全部楼层
翼行园子 发表于 2020-1-8 16:12
直接仿真看看 是执行哪句 输出的数据    我看你描述的 好像是蓝牙和串口调试助手 都是连接的同一个串口一吗 ...

我是两个蓝牙一个接单片机一个接电脑
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-11 13:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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