历史上的今天
返回首页

历史上的今天

今天是:2025年01月25日(星期六)

2021年01月25日 | STM32串口自动识别波特率

2021-01-25 来源:eefocus

1写在前面

关于自动识别UART串口波特率的这个问题,相信有项目经验,或者认真研究过串口的朋友都应该多多少少知道一点自动识别的方法。


可能绝大部分知道的就是通过波特率一一匹配来实现,这种方法也是最常见,而且还比较有效的一种方法。


上面这种方法就是大家熟知的通过软件来检测波特率的方法,其实,还有一种方法就是通过硬件自身完成波特率来检测。


针对STM32,在ST官方其实在应用笔记和参考手册文档中都有提到。下面,我结合文档简单讲下硬件自动波特率检测的内容。


2STM32硬件自动波特率检测

ABR:Auto Baud Rate,自动波特率检测使接收设备能够接受来自各种以不同速率工作的发送设备的数据,无需事先建立数据速率。


1.ABR应用地方

  • 事先不知道系统的通信速度。

  • 系统正在使用精确度相对较低的时钟源且该机制允许在不测量时钟偏差的情况下获得正确的波特率。


2.支持ABR系列

在STM32中,支持硬件自动波特率检测的只有部门系列才支持,之前出来比较早的系列不支持(如F1 F4),这后面推出来的系列都支持这个功能,包含最新才出来的STM32H7、G0系列都支持。


当然,对于内置ABR的STM32系列设备而言,并非所有实例化USART接口均支持自动波特率检测。

图片


3.自动波特率检测模式

ABR是指接收设备通过检查第一个字符(通常是预先选择的标志字符)确定传入数据速率的过程。


STM32产品上的自动波特率检测功能内置的各种模式基于不同字符模式:

模式0:以“1”位为开头的任意字符;

模式1:以10xx模式开头的任何字符;

模式2:0x7F;

模式3:0x55;

图片


提示:

A.在所有ABR模式下,都会在同步数据接收期间多次检测波特率,并将每一次的检测值与上一次的检测值进行比较。

B.在7位数据长度模式下,不支持0x7F和0x55帧检测ABR模式。


4.代码配置

相关代码,官方提供有基于(标准外设库、HAL库的)参考例程,比如F0标准外设库参考代码:

static void AutoBauRate_StartBitMethod(void)

  /* USART enable */

  USART_Cmd(EVAL_COM1, ENABLE);


  /* Configure the AutoBaudRate method */

  USART_AutoBaudRateConfig(EVAL_COM1, USART_AutoBaudRate_StartBit);


  /* Enable AutoBaudRate feature */

  USART_AutoBaudRateCmd(EVAL_COM1, ENABLE);


  /* Wait until Receive enable acknowledge flag is set */

  while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_REACK) == RESET)

  {}  


  /* Wait until Transmit enable acknowledge flag is set */  

  while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TEACK) == RESET)

  {}  


  /* Loop until the end of Autobaudrate phase */

  while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_ABRF) == RESET)

  {}  


  /* If AutoBaudBate error occurred */

  if (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_ABRE) != RESET)

  {

    /* Turn on LED3 */

    STM_EVAL_LEDOn(LED3);

  }

  else

  {

    /* Turn on LED2 */

    STM_EVAL_LEDOn(LED2);


    /* Wait until RXNE flag is set */

    while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_RXNE) == RESET)

    {}


    /* Wait until TXE flag is set */    

    while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TXE) == RESET)

    {}


    /* Send received character */

    USART_SendData(EVAL_COM1, USART_ReceiveData(EVAL_COM1)); 


    /* clear the TE bit (if a transmission is on going or a data is in the TDR, it will be sent before

    efectivelly disabling the transmission) */

    USART_DirectionModeCmd(EVAL_COM1, USART_Mode_Tx, DISABLE);


    /* Check the Transfer Complete Flag */

    while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)

    {}

  }


  /* USART Disable */

  USART_Cmd(EVAL_COM1, DISABLE);

}

5.ABR误差计算

由USART时钟源( fCK)决定通信速率范围(尤其是最大通信速率)。接收器采用不同的用户可配置过采样技术,可区分有效输入数据和噪声,从而用于恢复数据。这可以在最大通信速率与抗噪声/时钟不准确性之间实现平衡。


可通过编程USARTx_CR1寄存器中的OVER8位来选择过采样方法,可以是波特率时钟的16倍或8倍。


USART时钟源频率必须与预期通信速率兼容:

• 16倍过采样时,波特率介于fCK/65535与fCK/16之间。

• 8倍过采样时,波特率介于fCK/65535与fCK/8之间。


波特率误差取决于USART时钟源、过采样方法和ABR模式。

图片

其中:

• 预期波特率取决于发送设备

• 实际波特率是USART接收器使用自动波特率检测操作确定的波特率。


6.误差

下图来自官方测试数据,基于:fCK = 72 MHz时ABR的误差计算,115200 bits/s预期波特率

图片


从上图可以看出:ABR模式2和3的精确度高于模式0和1;它们的波特率误差值更低。


不过,由于预期波特率与实际波特率之间的误差小于1%,因此所有模式的结果均正常。


推荐阅读

史海拾趣

Golledge Electronics公司的发展小趣事

Golledge Electronics公司的发展故事

故事一:石英晶体振荡器的创新起点

Golledge Electronics公司的起源可以追溯到对石英晶体振荡器技术的深入研究和创新。公司最初成立于英国水晶产区的中心,依托当地丰富的水晶资源,Golledge迅速成为石英晶体振荡器领域的佼佼者。公司创始人敏锐地意识到石英晶体的压电特性在电子系统中的重要应用价值,于是投入大量资源进行研发。通过不断优化晶体制造工艺和温度补偿技术,Golledge成功推出了高精度、高稳定性的石英晶体振荡器,为无线电通信、卫星通信等领域提供了关键技术支持。这一创新不仅奠定了Golledge在电子行业的基础,也为其后续发展铺平了道路。

故事二:微机电系统(MEMS)技术的突破

随着电子产品的不断小型化和便携化,Golledge Electronics公司紧跟时代步伐,将研发重点转向微机电系统(MEMS)技术。MEMS谐振器以其紧凑的尺寸和稳健的性能,成为便携式设备和可穿戴设备中的理想选择。Golledge通过自主研发和合作创新,成功将MEMS技术应用于频率控制产品中,推出了多款高性能、低功耗的MEMS谐振器。这些产品不仅满足了市场对小型化、轻量化的需求,还进一步提升了电子系统的整体性能和可靠性。Golledge在MEMS技术领域的突破,为其在电子行业中的领先地位增添了新的动力。

故事三:新材料应用的探索

为了不断提升产品的性能和质量,Golledge Electronics公司始终致力于新材料的研发和应用。公司研发团队通过深入研究石英晶体的物理特性和化学性质,成功开发出了一系列具有独特性能的石英晶体材料。这些新材料不仅具有更高的稳定性和频率精度,还能够在极端环境下保持优异的性能表现。Golledge将这些新材料应用于频率控制产品中,显著提升了产品的竞争力和市场占有率。同时,公司还积极探索其他新型材料的应用潜力,为未来的技术创新储备了丰富的资源。

故事四:机器学习集成的创新实践

随着人工智能技术的快速发展,Golledge Electronics公司敏锐地捕捉到这一趋势,并积极探索机器学习在频率控制领域的应用。公司研发团队通过集成机器学习算法,使频率控制系统能够动态地适应和优化频率设置。这一创新实践不仅确保了频率控制系统的持续准确性,还为其赋予了自我学习和自我优化的能力。Golledge的这一创新成果,不仅提升了产品的智能化水平,也为电子行业的未来发展提供了新的思路和方向。

故事五:超微型SMD晶体的商用化

为了满足市场对更小、更轻、更高效的电子产品的需求,Golledge Electronics公司推出了超微型1610mm封装SMD晶体,并成功实现商用化。这款晶体以其极小的尺寸和优异的性能,迅速赢得了市场的青睐。Golledge通过不断优化生产工艺和质量控制体系,确保了超微型SMD晶体的稳定供应和高质量表现。这款产品的成功商用,不仅进一步巩固了Golledge在电子行业中的地位,也为其在小型化、便携化电子产品领域的发展开辟了新的市场空间。

DFRobot公司的发展小趣事

DFRobot公司于2008年由叶琛创立,当时主要致力于将国外的开源硬件项目引入中国。起初,公司规模较小,团队由几位热爱机器人和开源硬件的工程师组成。他们凭借对技术的热情和不懈的努力,逐渐在电子行业崭露头角。叶琛作为公司的创始人,不仅拥有深厚的工程学背景,还具备前瞻性的商业眼光,为公司的发展奠定了坚实的基础。

台湾三礼(3L)公司的发展小趣事

在技术创新方面,三礼公司一直保持着领先地位。2009年,公司成功完成了UPI、DPI压模型电感量产布线及自制粉料能力,并获得了Texas Instrument认证。同时,公司重新发布了愿景并重新定义了3L,将持续改善、精益生产、以客为尊作为公司的三个核心L。随后,公司成立了精实中心,进一步推进精益生产的自动化配置,实现了生产效率的大幅提升和不良品及库存的减少。

C-MEDIA公司的发展小趣事

随着公司业务的不断扩展,C-MEDIA开始实施全球化战略,积极寻求与国际知名企业的合作。通过与全球领先的电子企业、内容提供商和媒体平台建立战略合作关系,C-MEDIA成功地将自己的技术和产品推向了更广阔的市场。这些合作不仅提升了公司的品牌知名度和市场份额,也为公司的长期发展奠定了坚实的基础。

以上只是C-MEDIA公司在电子行业中的一些重要发展节点和故事的概括性描述。实际上,公司的发展过程中还涉及到许多其他的细节和因素,包括市场竞争、技术创新、人才引进等等。这些故事共同构成了C-MEDIA在电子行业中的发展轨迹,展示了其不断进取、追求卓越的精神风貌。

EECO Switch公司的发展小趣事

在人机界面产品领域,开关是不可或缺的重要组件。EECO Switch公司凭借其卓越的研发实力,不断在开关技术上取得突破和创新。公司成功开发出了二进制编码的指轮开关、STRIPSWITCH®和微DIP®印刷电路板上安装的编码开关等多种产品,这些产品不仅具有高度的可靠性和稳定性,而且操作简便、功能丰富,满足了不同客户的需求。

福斯特(FIRST)公司的发展小趣事
通常采用磁感应或霍尔效应原理。

问答坊 | AI 解惑

dac0832与lm324输出问题?帮忙看一下!!

本帖最后由 dontium 于 2015-1-23 11:32 编辑 电路如图!!我用的单电源供电,lm324没用的管脚是悬空的!不知道有没影响。问题是输出最大只有1.6V,而我的程序结果应该是0到5v 就算不能满量程也该在5V附近吧!!大侠们 帮忙看下吧!!谢了!!dac0 ...…

查看全部问答>

zigbee中语音的问题

最近小弟正在做一个利用zigbee协议的无线语音通信的东东,碰到了一些问题,例如在zigbee协议的home_automation_profile已经有了关于light、Closures等的ID,那关于voice的是不是自己定义一个值就行了?    麻烦这一领域里的师兄师姐帮助 ...…

查看全部问答>

关于vxwoks中zbuf的问题

前几天,在跑程序的时候遇到一个zbuf的异常,vxworks打印的调用链如下: data storage Exception current instruction address: 0x0050cb60 Machine Status Register: 0x00029230 Data Exception Address Register: 0x0069bf38 Condition Regi ...…

查看全部问答>

ARM7/9的flash然后实现加密?

据我所知,flash里面的程序可以通过编程器将其读出,这样不是很容易被别人盗取吗? 现在是否有什么好办法呢?…

查看全部问答>

啟動代碼的問題

LM每種型號芯片的啟動代碼一樣嗎?? 如果不同,編寫驅動代碼應該參照什麽? 各種啟動代碼裡面的地址如何確定???????? 各位大俠說說看…

查看全部问答>

Linux的开发软件SldView 谁有啊,能否给我发一下,不胜感激

想做Linux开发,在网上找了下 发现开发包都不是很好找 望大虾有的话能够发一下 先行谢过 qq:175232683…

查看全部问答>

【TI文献】智能能源规范 (Smart Energy Profile) 解决方案

智能能源规范 (Smart Energy Profile) 解决方案,欢迎大家下载!…

查看全部问答>

电源类的题目准备哪些元器件

本帖最后由 paulhyde 于 2014-9-15 03:38 编辑 各位大神,能分享一下你们的经验吗,你觉得今年的带赛题,电源类的应该准备那些元器件,最要有具体的型号,谢谢分享    …

查看全部问答>