STM32 CAN总线原理与应用开发指南(中上) | 零基础入门STM32第六十二步

主题内容教学目的/扩展视频
CAN总线重点课程电路原理,跳线设置。协议分析。驱动程序。自检模式,其他CAN总线通信。会设置CAN模式,会收发数据。

师从洋桃电子,杜洋老师



回顾上期🔍STM32 CAN总线原理与应用开发指南(上) | 零基础入门STM32第六十一步


(图1:开发板与CAN总线连接示意图)

一、CAN总线基础概念

1.1 什么是CAN总线?

CAN(Controller Area Network)是ISO标准化的串行通信协议,由博世公司于1986年提出。其高可靠性使其广泛应用于汽车电子、工业自动化等领域。

1.2 CAN核心特性

  • 多主控制:所有节点均可主动发送数据,通过ID仲裁优先级
  • 错误处理:具备错误检测、通知和自动重发机制
  • 故障隔离:可自动隔离持续故障节点
  • 扩展性强:支持动态增减节点,无需修改现有系统

二、物理层标准对比

特性ISO11898(高速)ISO11519-2(低速)
通信速率125Kbps~1Mbps<125Kbps
传输距离<40M(1Mbps时)可达10KM(5Kbps时)
典型应用场景汽车ECU、实时控制车身电子、仪表系统
总线电平差分电压(CANH-CANL)单线传输
显性电平电压2V1.5V

三、CAN协议关键技术

3.1 通信机制

          +------------------+
          |   应用层         |
          +------------------+
          |   数据链路层     |
          +------------------+
          |   物理层         |
          +------------------+

3.2 关键参数

  • 波特率计算
    波特率 = PCLK1 / [(TSJW + TBS1 + TBS2) * BRP]
    示例:36MHz/(1+8+7)*9 = 250Kbps

  • 数据帧结构

    • 最大数据长度:8字节
    • 标准帧(11位ID)/扩展帧(29位ID)

四、STM32 CAN驱动代码解析

4.1 can.h核心配置

#define CAN_INT_ENABLE  0    // 接收中断开关
#define tsjw  CAN_SJW_1tq    // 同步跳转宽度
#define tbs1  CAN_BS1_8tq   // 时间段1
#define tbs2  CAN_BS2_7tq   // 时间段2
#define brp   9             // 波特率分频系数

// 初始化函数
u8 CAN1_Configuration(void);
// 发送函数(数据长度≤8)
u8 CAN_Send_Msg(u8* msg, u8 len);
// 接收函数(查询方式)
u8 CAN_Receive_Msg(u8 *buf);

4.2 初始化流程

时钟配置
GPIO初始化
CAN模式设置
滤波器配置
中断使能

4.3 主程序逻辑

int main(void) {
    CAN1_Configuration();  // 初始化CAN
    while(1) {
        // 按键触发发送
        if(按键按下) {
            CAN_Send_Msg(buff, 1);  // 发送1字节数据
        }
        
        // 查询接收
        if(CAN_Receive_Msg(buff)) {
            OLED显示接收数据;
        }
    }
}

五、开发注意事项

  1. 终端电阻:总线两端需接120Ω电阻消除反射
  2. 波特率匹配:所有节点必须配置相同波特率
  3. 数据分帧:超过8字节数据需分多次发送
  4. 错误处理:建议启用CAN错误中断进行诊断

六、相关资源

[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] CAN通信测试程序
[5] TJA1050 数据手册 + CAN总线协议
[6] CAN总线驱动程序分析.pptx


七、实践建议

  • 通过逻辑分析仪观察CAN波形
  • 尝试修改BRP值体验不同波特率
  • 扩展实现CAN中断接收模式
  • 结合CAN分析仪进行协议解析

通过理论结合实践,可以深入掌握CAN总线的精髓。建议阅读《CAN总线协议》并配合STM32参考手册进行二次开发。

本文全面解析了CAN总线的技术原理与STM32实现方案,包含协议要点、代码解析和实践建议,可作为CAN开发的快速入门指南。关键点总结清晰,扩展性强,便于读者在此基础上进行二次开发。


💬 技术讨论(请在评论区留言~)

📌 下期预告:下一期将探讨CAN总线驱动程序分析2重点课程,欢迎持续关注!

点击查阅🔍往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-03-10)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值