HC06蓝牙2.0模块连接不稳定 和 STM32串口不传输数据(串口接收中断)的一些问题

这篇具有很好参考价值的文章主要介绍了HC06蓝牙2.0模块连接不稳定 和 STM32串口不传输数据(串口接收中断)的一些问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HC06蓝牙2.0模块连接不稳定和STM32串口不传输数据(串口接收中断)的一些问题(推荐)

1、蓝牙

最近,在一个项目中使用到蓝牙,但是调试过程出现了很多问题。
刚开始使用的是HC06蓝牙,刚开始使用较为正常,可以实现蓝牙模块和电脑设备直接连接,而且数据接收正常。

在接下来的设计中,考虑到适配问题,就设计了配套的蓝牙接收模块,同样是HC06贴片模块。但问题随之出现。

连接不稳定!!!
模块之间在没有数据传输时,模块连接稳定,且在数据量小的时候也没有问题,这个小数据量是指:一秒传输1个数据或者两个数据。

当传输量大的时候,比如一秒十个数据,这个时候模块之间会出现数据传输阻塞,出现数据传输卡顿,造成数据丢失,并最终造成模块连接因为空中通信阻塞而断开。

在测试中,也测试过是否与蓝牙传输波特率是否有关,但实际测试之后,阻塞问题不会因为波特率改变而出现解决或者改善。

在后来的了解中得知,蓝牙一般选择协议4.0以上,产品的数据实时性才有所保证,而协议2.0,虽然使用广泛,但很难保证实时性,也就是没法做到大量数据同步到另一个模块。所以在后来的设计中也重新更换了别的蓝牙(新蓝牙使用的是蓝牙5.0协议)

2、STM32串口的问题
在使用STM32串口过程中,发现电路只有在复位之后才会有数据传输,只要中途掉电,再次上电,数据传输就会消失,或者在重新编译下载之后传输也是正常的。在排除程序卡死、复位电路错误等问题之后,只能 进一步寻找软件程序上的问题。因此,一步一步进行编译调试发现,STM32串口中断还真的有BUG。

先说在网上找到的一个几乎一模一样的问题的帖子:串口接收中断异常 主要的描述:现在发现一部分板子(另外一些正常工作)掉电之后再次上电串口没有数据输出,输入也没反应,单片机正常工作(设定了DA)。按复位键之后正常工作,串口可发送可接收。 重新下完程序,则正常运行。断电之后出现上述情况~~~
在这个帖子中主要给出的问题源头是STM32串口中断机制有问题。
详细的介绍着这个地方:串口接收中断异常(2)

在我们串口初始化程序中会有串口中断使能:
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

在USART配置中只打开了接收中断!没有数据送过来应该是不可能进入中断的!
但是使能了接收中断,那么ORE中断也同时被开启了。
只要接收中断打开,即RXNEIE设置为1,那么ORE中断也自动打开了。
可是USART_GetITStatus(USART1, USART_IT_ORE )== RESET!!!
找到USART_GetITStatus(USART1, USART_IT_RXNE)函数,发现只有当USART_IT_ERR中断使能时,才能读到ORE中断。
在这里要指出这个BUG:产生ORE中断了,但使用USART_GetITStatus()函数却无法读到这个中断被SET起来!

既然找到了是什么中断,那么把相应的中断标志位清除,就应该可以了吧?
USART_ClearITPendingBit(USART1, USART_IT_ORE);
但是,结果是没有任何效果!清除之后,马上读ORE中断状态,USART_GetITStatus(USART1, USART_IT_ORE)==RESET.程序仍然跑死在接收中断。再使用另一个函数USART_GetFlagStatus(USART1, USART_FLAG_ORE) = SET,原来ORE标志位还没有清除。

他的解决办法:
串口中断程序中使用if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)//注意!不能使用if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)来判断。

在我的实际应用中,虽然改了这个读取状态的函数,但是并没有实际的作用,也就是没有解决串口不工作的问题。
也增加了对不同中断标志位的判断,也仍然没有解决串口不工作的问题。

由于项目中串口传输是单向的,所以也就将串口接收中断使能给关掉了,关掉之后,一切传输正常,不管什么时候只要上电,就能实现数据的正常传输。

这也从侧面说明,这个串口非正常传输的主要问题,根源还是在串口接收中断上。还是需要在调试模式下,一句一句查看问题。

有时间再探索这个项目中具体的原因。

若是有朋友也遇到相关问题,可以按照上述给出的链接中的解决方案,应该可以解决大部分人的疑惑,当然,如果有人和我一样,也可以留言,我尽快补一补这个漏洞。文章来源地址https://www.toymoban.com/news/detail-632378.html

到了这里,关于HC06蓝牙2.0模块连接不稳定 和 STM32串口不传输数据(串口接收中断)的一些问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)

    最近在学STM32,基本的学完了,想学几个模块来巩固一下知识,就想到了蓝牙模块。玩啥好难过有很多博客教怎么连的,但自己看起来还是有点糊涂。模块的原理和知识点我就不讲解了,这里我主要 手把手 记录一下我是如何对蓝牙模块进行学习和使用的。 所使用的资料和工

    2024年02月02日
    浏览(86)
  • 【基于stm32】【附代码】两块蓝牙模块HC-05进行通讯,不占用串口一的代码教程

    目录 前言 一、两块hc-05蓝牙通讯的连接 二、使用步骤 1.hc-05从机,该教程主要是应用于【收数据】 usar.h代码 usart.c代码(只引用stm32的串口2,串口一用于烧程序) main.c 2.hc-05主机,该教程主要是应用于【发数据】 usar.h代码 usart.c代码(只引用stm32的串口2,串口一用于烧程序)

    2024年02月16日
    浏览(55)
  • HC05蓝牙模块(STM32)

    ​ 模块基于蓝牙v2.0带EDR蓝牙协议,采用CSR的BC417芯片,工作于2.4GHzISM频段,GFSK调制方式。模块配对后可当一条有限串口线使用。只要以固定波特率、8位数据位、无奇偶校验的通信格式,模块都可以取代传统的串口线,无需修改程序,省去布线工作,使用非常灵活。可以与带

    2024年02月03日
    浏览(75)
  • STM32最小系统板与HC-06(手机串口APP控制STM32小灯)

    内容:使用STM32最小系统板和蓝牙模块实现  手机串口助手 和 单片机 的通讯。 硬件:STM32F103C8T6,HC-06蓝牙模块 软件:蓝牙串口助手(手机应用商店) 引脚定义: 注意: TX(单片机)-RX(HC-06) RX(单片机)-DX(HC-06) UART.c文件代码:         当USART在接受到数据时,需要

    2024年02月21日
    浏览(54)
  • 基于STM32F103C8T6的HC-06蓝牙通信

    如果朋友们 遇到了如下问题 ,可以仔细借鉴本文章和另一篇专门讲解 蓝牙通信问题 的文章,一定能够解决你在蓝牙通信时遇到的诸多困难 1.在调试蓝牙模块AT指令时无返回值 2.身边 无USB转TTL模块 可以直接调试蓝牙模块(本人就是由于无模块花了了整整一天才调试成功)

    2024年02月03日
    浏览(69)
  • STM32--- 蓝牙HC-08 (两模块间主从通信)

    1.1  开发软硬环境 芯片型号:STM32F103RCT6 开发软件:Keil5  (v5.31+AC5,最常用) 代码用库:标准固件库 蓝牙模块:HC-08 (汇承家的;  缺点:小贵 ,优点:pdf+串口助手+APP+小程序,完美) USB转TTL模块: CH9340C  (Type-C接口,win10可免驱动,比CH340和CP2102爽) 1.2  代码下载链接

    2024年02月03日
    浏览(68)
  • HC05蓝牙模块AT指令与手机蓝牙控制STM32板载LED

    本文讲述了HC-05蓝牙模块的配置和其与STM32F103单片机的连接。 代码使用 HAL库函数 编写。 常见的HC-05模块: 通过使用AT指令,我们对蓝牙模块可以进行查看版本号、波特率、配对密码、设置/查询设备名称等多达30多种配置方式。 硬件连接:使用USB转TTL模块连接电脑和蓝牙模块

    2024年02月11日
    浏览(72)
  • HC-05蓝牙模块与STM32控制led灯亮详解

    HC-05模块是一种基于蓝牙协议的简单无线通信设备,共有6个引脚,其中两个引脚通过stm32的两个含TX和RX的接口与之进行通信,一般用于无线控制,智能家居等。 VCC:用于供电 GND:用于供电 TX(发送):与单片机某一RX口进行通信 RX(接收):与单片机某一TX口进行通信 一句话

    2024年02月08日
    浏览(78)
  • HC-05蓝牙模块--------手机与STM32通信(代码编写)(上位机配置)保姆级教程

    ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩因为之前无论是电赛还是做项目,都用到了蓝牙模块,如:手机和stm32的通信,电赛中的双车通信,还是遥感小车的stm32与stm32的无线通信等等 ⏩本篇文章对HC-05蓝牙模块与手机的通信做一个详

    2024年02月03日
    浏览(75)
  • 解决HC-05/HC06等蓝牙模块的调试问题

    1.检查硬件,USB转串口工具串口线与蓝牙模块是否接好,RXD–TXD / TXD–RXD; 2.使用蓝牙模块厂商提供的串口工具:下载链接; 3.先断开HC-05模块的电源,按住模块上的按键,再通电,然后指示灯慢闪后松开,即可进入AT模式; 4.在串口调试工具中输入AT,然后回车,然后发送,就会

    2024年02月06日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包