STM32 CAN波特率与采样点计算,基于HAL库

以STM32F767为例:

  1. ‌时间量子 (Tq) ‌ = Prescaler / APB1_Clock
  2. ‌总 Tq 数 ‌ = 1 (Sync_Seg) + BS1 + BS2
  3. ‌波特率 ‌ = APB1_Clock / (Prescaler × 总Tq数)
  4. ‌采样点 ‌ = (1 + BS1) / 总Tq数

其中,APB1_Clock默认为54Mhz,

波特率=1/【(分频数/APB1周期)*(1+BS1+BS2)】

采样点=(1+BS1)/(1+BS1+BS2)

注意,上面的参数不是实际寄存器的参数,对应HAL库宏定义的参数。

例如以下代码:

hcan1.Init.Prescaler = 18;

hcan1.Init.SyncJumpWidth = CAN_SJW_2TQ;

hcan1.Init.TimeSeg1 = CAN_BS1_8TQ;

hcan1.Init.TimeSeg2 = CAN_BS2_3TQ;

波特率=1/【(18/54)*(1+8+3)】 = 0.25Mbps=250Kbps

采样点=(1+8)/(1+8+3)=75%

常用参数组:

//500K

hcan1.Init.Prescaler = 9;

hcan1.Init.SyncJumpWidth = CAN_SJW_2TQ;

hcan1.Init.TimeSeg1 = CAN_BS1_8TQ;

hcan1.Init.TimeSeg2 = CAN_BS2_3TQ;

//1M

hcan1.Init.Prescaler = 3;

hcan1.Init.SyncJumpWidth = CAN_SJW_2TQ;

hcan1.Init.TimeSeg1 = CAN_BS1_13TQ;

hcan1.Init.TimeSeg2 = CAN_BS2_4TQ;

//250K

hcan1.Init.Prescaler = 18;

hcan1.Init.SyncJumpWidth = CAN_SJW_2TQ;

hcan1.Init.TimeSeg1 = CAN_BS1_8TQ;

hcan1.Init.TimeSeg2 = CAN_BS2_3TQ;

相关推荐
硅基造物主20 小时前
STM32 从 0 到 1 做智能家居(十):串口与 printf 重定向
stm32·单片机·智能家居·usart·中断
新晨单片机设计1 天前
S033A-基于STM32单片机拼图游戏机【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件·拼图游戏机
Silicore_Emma1 天前
D2596HV:高压异步DC-DC降压芯片简介
嵌入式硬件·消费电子·dc-dc系列电路·电源管理电路·降压(buck)开关稳压器
2501_922639581 天前
率能半导体 SS6811H双通道H桥驱动芯片:38V/1.6A,覆盖舞台灯光、安防相机、办公自动化、游戏机、机器人五大应用场景
单片机·嵌入式硬件·硬件工程
恒锐丰科技林技术员1 天前
EG2304L 高压半桥驱动芯片:中小功率电力电子方案优选器件
经验分享·嵌入式硬件·硬件工程
comyccccc1 天前
STM32F407VET6核心板的部分电路绘制学习笔记
笔记·stm32·学习
OIDCAT1 天前
CH9433技术解析:一颗芯片搞定CAN总线和9线串口
单片机·嵌入式硬件·工控·调试工具·国产芯片
简单电磁炮1 天前
关于can的调试
c语言·stm32·单片机
2501_922639581 天前
率能半导体 SS6812T双通道H桥驱动芯片:32V/1.0A,覆盖POS打印机、安防相机、办公自动化、游戏机、机器人五大应用场景
单片机·嵌入式硬件·硬件工程
女神下凡1 天前
芯参谋(77):裸机(无 OS)存储驱动开发指南
arm开发·单片机·嵌入式硬件·设计规范·1024程序员节