CAN_基础知识 CAN的介绍低速CAN(ISO11519)通信速率10~125KbpS总线长度可达1000米高速CAN(ISO11898)通信速率125Kbps~1MbpS总线长度≤40米CAN总线由两根线CANL和CANH组成允许挂载多个设备节点低速CAN:2O高速CAN:30)特点: 多主控制物理层使用差分信号,总线电平分为显性电平(逻辑0)和隐性电平(逻辑1)显性电平具有优先权。发送方通过使总线电平发生变化将消息发送给接收方。can 收发器硬件电路can 协议层5种类型的帧:数据帧(Data Frame):用于发送单元向接收单元传输数据的帧遥控帧(RemoteFrame):用于接收单元向具有相同ID的发送单元请求数据错误帧(ErrorFrame):用于当检测出错误时向其他单元通知错误的帧过载帧(OverloadFrame):用于接收单元通知其尚未做好接收准备的帧间隔帧(Inter Frame Space):用于将数据帧 及遥控帧与前面的帧分离开来的帧数据帧介绍帧起始表示数据帧开始的段显性信号仲裁段表示该帧优先级的段优先级控制段表示数据的字节数及保留位的段数据段数据的内容一帧可发送0~8字节数据CRC段检查帧的传输错误的段ACK段表示确认正常接收的段帧结束:表示数据帧结束的段,7个隐性信号,也就是(1111111)CAN位时序CAN总线以“位同步”机制实现对电平的正确采样.位数据都由四段组成同步段(SS)、 传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)每段又由多个位时序Tq组成。bxCAN 主要特点最高波特率1 Mbps发送邮箱3 级接收 FIFO2 个各 3 级深度过滤器组最多 28 个可配置掩码/列表模式16/32 位时间触发通信内置硬件定时器可在帧起始采样点生成时间戳协议支持CAN 2.0A标准帧/ CAN 2.0B扩展帧工作模式正常、静默、回环、回环静默自动完成数据帧的帧起始检测、仲裁、位填充/去填充、CRC 校验、ACK 处理CAN 测试模式总结bxCAN 支持4 种测试模式主要用于自检、调试和总线监听模式工作方式典型用途正常模式正常收发参与总线仲裁常规通信静默模式只收不发不发送 ACK 和错误帧总线监听不影响总线回环模式自发自收不经过总线硬件自检回环静默模式自发自收 不对外发送完全内部自检不干扰总线正常标准工作静默只监听回环自己发自己收回环静默自己发自己收 不外发注测试模式下波特率仍受限制需保证总线负载合理。CAN内核:包含各种控制/状态/配置寄存器可以配置模式、波特率等发送邮箱 :用来缓存待发送的报文最多可以缓存3个报文接收FIFO :缓存接收到的有效报文接收过滤器 :筛选有效报文发送处理接收处理波特率波特率 CAN时钟频率 / (BRP × (BS1 BS2 1))Tq BRP / CAN时钟频率BRP波特率预分频器Baud Rate Prescaler1~1024CAN时钟频率通常来自 APB1 或 APB 总线时钟STM32 常见 36MHz / 42MHz / 54MHzBS1通常范围 1~16BS2通常范围 1~8采样点通常设为 60%~80% 位置采样点 (1 BS1) / (1 BS1 BS2)波特率计算 从 36MHz 到 125kbps 的推导过程核心公式125k 36M / (BRP × (BS1 BS2 1))移项BRP × (BS1 BS2 1) 36M / 125k 288分解 288288 18 × 16赋值BRP 18BS1 BS2 1 16 → 取 BS113, BS22结果36M / (18 × 16) 36M / 288 125k ✅三步走除 → 分解 → 赋值完事。采样点计算 推荐60% ~ 80%采样点 (1 BS1) / (1 BS1 BS2)举例BS113, BS22采样点 (1 13) / (1 13 2) 14 / 16 87.5%分子1 BS1分母1 BS1 BS2即位时间总 Tq 数一句话采样点 相位段1占整个位时间的比例包含同步段。HAL库相关驱动函数关联寄存器功能HAL_RCC_CANx_CLK_ENABLE()RCC使能 CAN 时钟HAL_CAN_Init()MCR, BTR初始化 CAN模式、波特率等HAL_CAN_ConfigFilter()过滤器寄存器配置接收过滤器HAL_CAN_Start()MCR, MSR启动 CAN 设备HAL_CAN_ActivateNotification()IER使能 CAN 中断HAL_CAN_Enable_IT()IER使能特定中断源HAL_CAN_AddTxMessage()TSR, TIxR, TDTxR添加发送消息HAL_CAN_GetTxMailboxesFreeLevel()TSR获取空闲发送邮箱数HAL_CAN_GetRxFifoFillLevel()RF0R, RF1R获取 FIFO 填充数HAL_CAN_GetRxMessage()RF0R, RF1R, RDLxR, RDHxR读取接收消息重要结构体CAN_InitTypeDef初始化参数模式、BRP、BS1、BS2 等CAN_FilterTypeDef过滤器配置ID、掩码、模式、FIFO 分配CAN_TxHeaderTypeDef发送帧头ID、DLC、RTR 等CAN_RxHeaderTypeDef接收帧头CAN基本驱动步骤1. CAN 参数初始化配置工作模式、波特率等函数HAL_CAN_Init()2. 引脚与时钟Msp 层使能 CAN 时钟GPIO 设为复用功能模式函数HAL_CAN_MspInit()3. 设置过滤器配置 ID、掩码、FIFO 分配函数HAL_CAN_ConfigFilter()4. 收发数据发送HAL_CAN_AddTxMessage()接收HAL_CAN_GetRxMessage()5. 中断可选使能中断_HAL_CAN_ENABLE_IT()编写中断服务函数实战编程