一、HC08重要参数

  • 蓝牙4.0,BLE,主从一体;
  • 模块上电后,启动需要150ms;
  • UART波特率:9600默认;
  • 空中速率:1Mbps;  (与HC05, HC06等不同, 不能直接与之通信);
  • 通信距离:80米; (空旷);
  • 工作电流:主机未连21mA,已连9mA;  从机未连8.5mA, 已连9mA;  睡眠0.4uA;
  • 工作模式:未连接,为AT指令模式, 指示灯闪烁;连接后,串口透传模式,指示灯常亮;
  • 连接关系:两模块必须一主一从,才能连接;连接后,数据传送时不分主从;
  • 连接设置:配置一主一从后,自动秒连;
  • 多方通信:只支持一对一,不支持多方同时连接;

二、AT命令解释

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


三、STM32代码操作

1.操作重点

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

2.头文件配置

/******************************************************************************* 移植配置
****************************************************************************/
#define HC08_UARTx       USART3
#define HC08_ROLE        0             // 主从模式,0=slave, 1=master;与手机APP互连必须配置为从机模式/******************************************************************************* 全局变量
****************************************************************************/
typedef struct
{uint8_t  flag_UARTConnect;         // 标记:与开发板间的通信是否正常; 0=失败, 1=成功uint8_t  flag_TargetConnect;       // 标记:与目标设备通信是否正常;0=失败, 1=成功
}xHC08_TypeDef;
extern xHC08_TypeDef xHC08;            // 声明为全局变量,方便记录信息、状态/******************************************************************************* 声明全局函数
****************************************************************************/
void  HC08_Init(void);                             // 初始化串口及中断优先、AT参数配置级;
void  HC08_SendData(uint8_t* data, uint16_t cnt);  // 发送指定长度的数据;
void  HC08_SendString(char* strTemp);              // 发送字符串;

3.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);

4.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);                                      // 使能串口, 开始工作  

5.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++;}
}

6.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收到的最新一帧数据,可删除  }
}

7.数据处理

    // 本函数为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循环又会重复操作}   }  

四、源代码下载

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

1:CSDN资源:两个开发板用HC08通信.zip-嵌入式文档类资源-CSDN下载

2:Q群文件夹:887199504

互相学习,欢迎指正!~

蓝牙模块 HC08_两个STM32开发板无线通信相关推荐

  1. 基于stm32通过HC_05(ZS-040)蓝牙模块用手机控制stm32开发板上led灯的亮灭

    文章目录 前言 一.HC-05蓝牙是什么? 二.应用实例步骤 1.使用AT指令对蓝牙的初始化 2.打开手机蓝牙助手查看是否搜索到该蓝牙 3.用蓝牙模块代替TTL连接stm开发板 4.创建项目开始配置相 ...

  2. NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)

    为了开发者能够快速入门BC28的开发,加快开发者的项目进度,开发出此款针对BC28的stm32开发板和完善的发送网络数据的示例程序(TCP协议.COAP协议),程序流程逻辑清楚,注释完善,上手就可以玩 ...

  3. 大白NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)

    大白为了开发者能够快速入门BC28的开发,加快开发者的项目进度,大白开发出此款针对BC28的stm32开发板和完善的发送网络数据的示例程序(TCP协议.COAP协议),程序流程逻辑清楚,注释完善,上手 ...

  4. 基于STM32开发板I²C总线通信协议浅析

    基于STM32开发板I²C总线通信协议浅析 一.前言 I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980 ...

  5. 野火stm32开发板给定一个脉冲程序_STM32开发板哪个好,推荐一款高性价比stm32MP157开发板...

    一款能跑Linux的STM32开发板: 一款既可以玩Linux又可以玩单片机的开发板: 一款可同时学习A7和M4的双核异构开发板: 一款支持最新的Linux 5.4.31系统和u-boot 20200 ...

  6. 韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三章 M ...

  7. 判断按键值_「正点原子NANO STM32开发板资料连载」第十六章电容触摸按键实验...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十六章电容 ...

  8. Arduino 下初试 stm32开发板

    Arduino 下初试 stm32开发板 1.实验环境 1.野火STM32指南者(STM32F103VET6) 2.Arduino IDE 1.8.13(下载链接) 3.STM32 Flash loa ...

  9. STM32开发板串口 ISP 方式下载程序

    STM32开发板无下载电路也可以下载程序方法 自己设计的stm32开发板,手上无下载器,也没有板载的一键下载电路的情况下解决下载程序方法? 必须具备的条件:USB-TTL模块一个,板上预留有boot0 ...

最新文章

  1. 网站出现大量死链时该如何进行处理?
  2. jq实现文字个数限制_分布式系统高可用实战之限流器(Go 版本实现)
  3. 谋定政策经信研究扶持-万祥军:对话李玉庭跨界电商重整
  4. Android平台类加载流程源码分析
  5. 机器人学习--室内定位方法综述
  6. boost::graph模块演示 GGCL Edge 接口
  7. HID报表描述符(目前最全的解析,也是USB最复杂的描述符)
  8. jms面试题_最新的20多个JMS面试问答(2020)
  9. 是否可以限制蓝牙传输距离_技术文章—关于蓝牙传输范围的常见误解
  10. mysql innodb表移植_mysql Innodb引擎独立表空间下通过复制.ibd文件快速迁移数据文件...
  11. 学习笔记20 热传导方程
  12. android小米手机拍照功能,小米手机 调用相机拍照后无法返回问题
  13. 同济大学Openwrt路由器 ipv6教程(新手导向)
  14. 安卓手机如何投屏到电视上_如何将手机投屏到电视上?原来这么简单好用
  15. 深度学习整理:detection 学习(2)——detection细节知识入门
  16. [已解决]阿里云安全组开放端口,宝塔面板仍无法访问
  17. 计算机视觉OpenCv学习系列:第十部分、实时人脸检测
  18. Python基础入门之列表生成式
  19. A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记
  20. 安装 libtorrent遇到问题

热门文章

  1. C#技术交流④群正式开建,诚邀各路大佬莅临指导
  2. 【一起去北碚玩吧】->【我们从北碚回来了】
  3. IE 零日漏洞风险评估
  4. 2012年终总结之pcode概述
  5. Linux环境非root用户配置SSH免密登录(配置原理)
  6. 【我的世界原理分析】1.光照原理
  7. 《疯狂Android讲义》第二版目录
  8. Vue3笔记_02setup与常用的Composition API(组合式API)
  9. 商品id- item_id /条形码/skuid
  10. 人员玩手机离岗识别检测系统 yolov5