蓝牙模块HC08 和 手机APP数据传输 (STM32代码)


目录

一、HC08重要参数

二、主要AT命令解释

三、STM32端操作

1.操作重点

2.GPIO初始化代码

3.UART初始化代码

4.HC08发送数据代码

5.HC08接收数据代码

6.数据处理

四、手机APP端操作

1.操作重点:

2.APP步骤截图:

五、源代码下载


一、HC08重要参数

  • 蓝牙4.0,BLE,主从一体
  • 模块上电后,启动需要150ms
  • 默认波特率:9600
  • 模块未连接时,为AT指令模式,连接后为串口透传模式;
  • 空中速率:1Mbps;  (与HC05, HC06等不同, 不能直接与之通信)
  • 通信距离:80米; (空旷)
  • 工作电流:主机未连21mA,已连9mA; 从机未连8.5mA, 已连9mA; 睡眠0.4uA; 

二、主要AT命令解释

  • AT指令结尾,无需添加换行符;
  • AT指令修改,立即生效,掉电不丢失;
  • AT指令修改,成功时,统一返回OK,查看信息类指令除外;
  • AT指令修改,不成功,不返回任何信息;


三、STM32端操作

1.操作重点

  1.  开发板,使用UART与HC08通信, 4线:VCC, GND, TX, RX;
  2. UART波特率,使用HC08默认的9600;
  3. 发送AT指令,无需换行符结尾;
  4. 只要一条AT指令,设置HC08为从机模式,就能自动连接手机蓝牙APP;
  5. 模块名称不重要,也不用密码;
  6.  连接前:AT模式,蓝灯闪烁;连接后:数据透传模式,不再接受AT命令,蓝灯常亮;

2.GPIO初始化代码

  GPIO_InitTypeDef  GPIO_InitStructure;    
    // 时钟使能
    RCC->APB1ENR |= RCC_APB1ENR_USART3EN;                           // 使能USART1时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;                             // 使能GPIOA时钟
    // GPIO_TX引脚配置
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;                // TX引脚,配置为复用推挽工作模式
    GPIO_Init (GPIOB, &GPIO_InitStructure);
    // GPIO_RX引脚配置
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING ;         // RX引脚,配置为浮空输入工作模式
    GPIO_Init (GPIOB, &GPIO_InitStructure);

3.UART初始化代码

    NVIC_InitTypeDef  NVIC_InitStructure;
    USART_InitTypeDef USART_InitStructure; 
  // 中断配置
    NVIC_InitStructure .NVIC_IRQChannel = USART3_IRQn;
    NVIC_InitStructure .NVIC_IRQChannelPreemptionPriority=2 ;       // 抢占优先级
    NVIC_InitStructure .NVIC_IRQChannelSubPriority = 2;             // 子优先级
    NVIC_InitStructure .NVIC_IRQChannelCmd = ENABLE;                // IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);                              
    
    //USART 初始化设置
    USART_DeInit(USART3); 
    USART_InitStructure.USART_BaudRate   = baudrate;                // 串口波特率
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;     // 字长为8位数据格式
    USART_InitStructure.USART_StopBits   = USART_StopBits_1;        // 一个停止位
    USART_InitStructure.USART_Parity     = USART_Parity_No;         // 无奇偶校验位
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 使能收、发模式
    USART_Init(USART3, &USART_InitStructure);                       // 初始化串口
    
    USART_ITConfig(USART3, USART_IT_TXE , DISABLE );
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);                  // 使能接受中断
    USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);                  // 使能空闲中断
    
    USART_Cmd(USART3, ENABLE);                                      // 使能串口, 开始工作  
    

4.HC08发送数据代码

// 发送AT指令,或字符串
void  HC08_SendString(char* strTemp)          
{
    HC08_SendData((uint8_t *)strTemp, strlen(strTemp));                  
}


// 发送指定长度的数据
void  HC08_SendData(uint8_t* dataBuf, uint16_t cnt)  
{
    while(cnt--)
    {
        while((HC08_UARTx->SR & 0X40)==0);  // 等待上一次串口数据发送完成 
        HC08_UARTx->DR = *dataBuf;          // 写DR,串口将的发送数据 
        dataBuf++;
    }
}

5.HC08接收数据代码

void USART3_IRQHandler(void)           
{     
    static uint8_t cnt=0;
    static uint8_t RxTemp[256];
    
    // 接收中断
    if(USART3->SR & (1<<5))
    {
        RxTemp[cnt++] = USART3->DR ;                        // 读取数据寄存器值;注意:读取DR时自动清零中断位;
    }
    
    // 空闲中断, 用于配合接收中断,可判断一帧数据接收完成
    if(USART3->SR & (1<<4))                                 // 检查IDLE中断标志
    {         
        memcpy(xUSART.USART3RecivedBuffer , RxTemp , 256);  // 临时数据转存为全局数据, 等待处理,注意:复制的是整个数组,包括0值,以方便字符串数据
        xUSART.USART3RecivedFlag = 1;                       // 标记;外部程序通过检查xUSARTFlag.USART_2_Recived是否等于1, 可判断是否有新一帧数据   
        xUSART.USART3RecivedCNT  = cnt;
        cnt=0;  
        memset(RxTemp ,0, 256);                             // 临时数据空零,准备下一次的接收   
        USART3 ->SR;  USART3 ->DR;                          // 清零IDLE中断标志位!! 序列清零,顺序不能错!! 
        
        /********************************************************************************
         方式1:可在这里调用外部函数,处理接收到数据(不推荐)
         方式2:可在外部判断USARTxRecivedFla==1,然后处理数据区xUSART.USARTxRecivedBuffer  
         禁 止:不可在中断里调用printf等不可重入函数!!!
         示 例: 下面这一行代码, 只作示例, 输出到上位机以观察所收到的最新一帧数据, 可删除
        *********************************************************************************/
        USART1_printf((char*)xUSART.USART3RecivedBuffer);   // 这行代码只作示例,输出USART3收到的最新一帧数据,可删除  
     }  
}  

6.数据处理

    // 本函数为main函数中的while函数
    while(1)                                 // while函数死循环,不能让main函数运行结束,否则会产生硬件错误
    {    
        // Scheduler_Run();                  // 任务轮询器; 如要使用, 清除while中其它函数(移到Scheduler文件中去), 以保证计时的准确
        System_DelayMS(100);                 // 上面已初始化SysTick, 可直接使用delay_ms()、delay_us()
        LED_RED_TOGGLE;                      // 红色LED 每0.5秒闪灭一次,以监察系统正常工作   
                    
        if(xUSART.USART1RecivedFlag==1)                                  // 判断上位机(USART1)是否收到新的数据
        {
            HC08_SendString((char *)xUSART.USART1RecivedBuffer);         // 如果收到新数据,就从蓝牙发送出去
            xUSART.USART1RecivedFlag=0;                                  // 处理完了,标记清0,不然下一个while循环又会重复操作
        }                        
        
        // 处理HC08收到的数据
        if(xUSART.USART3RecivedFlag==1)                                  // 判断蓝牙HC08(USART3)是否收到新的数据
        {
            if(xUSART.USART3RecivedBuffer[0]=='0')   { LED_BLUE_OFF;}    // 判断收到的数据
            if(xUSART.USART3RecivedBuffer[0]=='1')   { LED_BLUE_ON;}   
            if(xUSART.USART3RecivedBuffer[0]=='3')   { LED_BLUE_TOGGLE;}             
            xUSART.USART3RecivedFlag=0;                                  // 处理完了,标记清0,不然下一个while循环又会重复操作
        }   
    }  

四、手机APP端操作

1.操作重点:

  • 手机设置,打开蓝牙功能,无需搜索连(接在APP里搜索);
  • 手机设置,打开位置功能!! 不开位置时搜索不到HC08;
  • 必须使用BLE协议的APP,下图二维码为HC蓝牙助手; 

2.APP步骤截图:


五、源代码下载

需要代码的兄弟,可通过以下方式下载代码:

1:优快云资源HC08与手机蓝牙APP通信.zip_stm32与手机APP通过蓝牙通信-嵌入式文档类资源-优快云下载

2:Q群文件夹:887199504

互相学习,欢迎指正!~


### 回答1: 您好,HC蓝牙助手是一款非常实用的蓝牙设备管理应用程序。您可以在应用商店(如苹果App Store或安卓应用市场)中搜索并下载该应用。 下载HC蓝牙助手后,您可以通过该应用连接蓝牙设备并进行相关设置。它支持连接管理各种类型的蓝牙设备,包括蓝牙耳机、音箱、键盘、鼠标、打印机等等。通过该应用,您可以方便地查找并连接到附近的蓝牙设备。 此外,HC蓝牙助手还提供了更多功能选项。您可以在应用中设置蓝牙设备的名称、配对密码以及其他相关参数。它还可以帮助您管理已连接的设备,如断开连接、删除设备等。如果您需要使用蓝牙发送或接收文件,也可以使用HC蓝牙助手来完成这个任务。 总之,HC蓝牙助手是一款方便实用的应用程序,可以帮助您管理连接蓝牙设备。无论您是想连接无线音箱听音乐,还是连接键盘鼠标进行办公,都可以通过下载HC蓝牙助手来实现这些功能。希望这个回答对您有帮助! ### 回答2: HC蓝牙助手是一款功能强大的蓝牙设备管理应用程序,可以帮助用户连接、配置控制各种蓝牙设备。该应用程序提供了简单易用的界面丰富的功能,适用于各种使用蓝牙设备的场景。 用户可以通过HC蓝牙助手来连接蓝牙耳机、音箱、键盘、鼠标等各种蓝牙设备,并进行配对设置。通过这个应用程序,用户可以方便地管理所有连接的蓝牙设备,实现无线的音频传输、数据传输控制。 除了连接配置蓝牙设备,HC蓝牙助手还提供了一些实用的功能。比如,用户可以通过该应用程序搜索附近的蓝牙设备,查看它们的详细信息,并进行筛选排序。用户还可以通过应用程序中的文件传输功能,在蓝牙设备之间进行文件的传输共享。 HC蓝牙助手还内置了一些蓝牙测试工具,可以帮助用户检测蓝牙设备的连接状态、信号强度传输速率等。这些工具可以帮助用户发现解决蓝牙设备的问题,提供更好的使用体验。 总的来说,HC蓝牙助手是一款功能丰富、易于使用的蓝牙设备管理应用程序,可以帮助用户方便地连接、配置控制各种蓝牙设备。无论是在家庭、办公室还是其他场景中,该应用程序都能提供便捷的蓝牙设备管理解决方案。你可以在应用商店搜索HC蓝牙助手,下载并体验。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值