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;

相关推荐
zhangrelay2 小时前
Arduino-MEGA-ESP单片机理论课笔记02-硬件-2026
笔记·单片机·嵌入式硬件
艾芯微科技3 小时前
钰泰 ETA5055V330DD1E|SOT-223 3.3V LDO,低压差、大电流线性稳压选型分享
网络·单片机·嵌入式硬件·集成测试·51单片机
新晨单片机设计4 小时前
S023A-基于STM32单片机智能插座【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·单片机智能插座
威嵌神州4 小时前
恩智浦 T1022 性能怎么样?QorIQ 架构中端工业嵌入式优势解析
嵌入式硬件
weixin_690654744 小时前
龙迅#LT9611EX 现MIPI转HDMI1.4功能主推型号,分辨率高达4K30HZ,IC内置I2C无需外部12C控制。
嵌入式硬件·音视频·信号处理
EatFans5 小时前
全栈自造 Status Deck(四):硬件终于到了,从点亮屏幕到跑通第一个 Demo
单片机·物联网
qq_401700415 小时前
STM32 GPIO 精讲|推挽 / 开漏 / 上拉浮空,工程选型避坑
stm32·单片机·嵌入式硬件
创界工坊工作室5 小时前
19-基于单片机的宠物喂养控制系统设计
stm32·单片机·嵌入式硬件·proteus·宠物
深圳市恒锐丰科技杨生6 小时前
EG3116D 600V 单路半桥栅极驱动芯片|屹晶 EGmicro
嵌入式硬件·硬件工程