STM32 CAN总线波特率计算详解与步骤

需积分: 10 2 下载量 166 浏览量 更新于2024-07-31 收藏 931KB DOC 举报
本文档主要探讨了如何在STM32系列微控制器中基于CAN总线计算波特率,特别关注于在硬件配置和时钟管理方面的细节。CAN总线是一种串行通信协议,STM32支持CAN 2.0A和2.0B标准,且集成有FIFO(First-In-First-Out)和中断功能,这使得它在工业控制和嵌入式应用中非常常见。 首先,文章指出CAN控制器bxCAN模块位于APB1总线上,该总线的时钟是通过AHB总线时钟进行分频得到的。AHB时钟又来源于系统的时钟源,如HSI(高速内部振荡器)、HSE(高精度外部时钟)或PLLCLK(锁相环路倍频时钟)。因此,了解并选择正确的系统时钟频率至关重要。 在STM32中,波特率的计算涉及到CAN控制器的一些寄存器设置,如CAN_SJW(起始位和停止位间隔时间)、CAN_BS1(第一个传播位的时间)和CAN_BS2(第二个传播位的时间)。在这个例子中,作者选择了CAN_SJW_1tq(1个时间量子),CAN_BS1_3tq(3个时间量子)和CAN_BS2_5tq(5个时间量子),以及一个预分频系数为4。这些设置共同决定了CAN传输的Nominal Bit Time(正常比特时间),即3 + 5 + 1 = 9个时间量子。 计算出总线时钟频率后,波特率可以通过公式波特率 = 1 / Nominal Bit Time来确定。在本例中,总线时钟为72 MHz,经过两次分频(一次为2,用于APB1和CAN控制器之间的时钟分频,另一次为4,即预分频),结果是9 MHz。因此,波特率为1 / 9 MHz = 1 Mbit/s。 此外,文档还提供了一个具体的函数示例——SetSysClockTo72(),这个函数用于设置系统时钟到72 MHz,并借此展示如何通过系统时钟的调整来影响CAN总线的性能。通过理解这些概念,用户可以根据他们的应用需求来调整波特率和CAN配置,以优化通信效率和数据传输质量。 总结来说,本文详细介绍了STM32中CAN总线波特率的计算方法,强调了时钟配置和寄存器设置的重要性,这对于理解和操作CAN通信系统开发者来说是非常实用的指南。