STM32F103 CAN总线Bootloader开发实战:从设计到实现

1. 为什么我们需要一个CAN总线Bootloader?

如果你做过嵌入式开发,尤其是汽车电子或者工业控制相关的项目,肯定会遇到一个头疼的问题:产品装上车或者装进设备外壳之后,软件怎么升级?总不能每次都把设备拆开,用调试器(ST-Link、J-Link)去重新烧录程序吧?这不仅效率低下,在批量部署的场景下几乎不可能实现,而且反复拆装还可能损坏设备密封性,带来质量风险。

这时候,Bootloader,特别是基于CAN总线的Bootloader,就成了我们的“救命稻草”。简单来说,它就是一个预先烧录在芯片里的小程序,负责在设备上电后,判断是否需要更新主程序(也就是我们常说的APP)。如果需要更新,它就通过CAN总线接收来自上位机的新程序文件,并安全地写入芯片的Flash中;如果不需要,它就跳转到主程序去正常运行。

我选择STM32F103C8T6这颗芯片来做这个实战,原因很实在:它便宜、普及度高、性能足够,而且自带CAN控制器。很多朋友手头可能都有基于它的开发板,像什么“最小系统板”、“BluePill”,成本也就十几二十块钱,非常适合拿来练手和做原型验证。在真实的汽车ECU(比如车窗控制器、车身控制器)或者工业控制器里,基于F103做CAN Bootloader的方案也非常常见,学会了这个,你就能解决很多实际产品中的OTA(空中升级)或线下刷写难题。

所以,这篇文章就是带你从零开始,手把手设计并实现一个跑在STM32F103上的、稳定可靠的CAN总线Bootloader。我会分享我踩过的坑、调试时遇到的诡异问题,以及最终让整个系统跑起来的那些关键细节。目标就是让你看完之后,能拿着自己的板子,跟着步骤一步步做出来。

2. 动手之前:核心概念与硬件准备

在撸起袖子写代码之前,我们得先把几个核心概念和硬件家当搞清楚。磨刀不误砍柴工,这部分理解透了,后面写代码就是水到渠成。

2.1 灵魂三问:Bootloader、IAP与CAN

首先,我们得明确我们做的到底是什么。很多新手容易把几个概念混淆。

Bootloader:你可以把它想象成电脑的BIOS。它是芯片上电后运行的第一段代码。它的核心任务就两个:Boot(引导)和Load(加载)。在我们的场景里,它要决定是跳转到应用程序去执行,还是留在自己这里准备接收新程序。

IAP(在应用编程):这是实现我们需求的技术手段。指的是在用户程序(也就是Bootloader自己)运行期间,对微控制器内部的Flash存储器进行重新编程的能力。注意关键词“在应用运行期间”,这意味着Bootloader在更新APP时,自己本身还在Flash里跑着呢。这跟ICP(在电路编程,用调试器烧录)是两码事。我们做的这个CAN Bootloader,就是一个典型的IAP应用。

CAN总线:这是我们选择的“运输通道”。为什么选CAN?而不是串口(UART)或者以太网?在汽车和工业环境里,CAN总线抗干扰能力强、可靠性高、支持多节点通信,并且布线简单(就两根线)。你的设备可能本来就有CAN接口用于通信,那么直接用这个通道来升级程序,就无需增加额外的硬件成本。我们这里用的就是STM32F103自带的CAN1控制器。

2.2 硬件清单:你的“手术台”和“工具”

要完成这个实验,你需要准备下面几样东西。别担心,都很常见:

  1. 主控芯片:一块基于STM32F103C8T6的开发板或核心板。我强烈建议你用那种最基础的“最小系统板”,引脚都引出来那种,避免板载其他复杂电路带来干扰。
  2. 调试器:一个ST-Link V2(或者兼容的调试器)。用于第一次烧录Bootloader程序,以及后续的调试。
  3. CAN收发器:STM32的CAN控制器是逻辑电平的,需要一颗CAN收发器芯片(如TJA1050或SN65HVD230)转换成标准的差分信号。你的开发板上可能没有,需要自己用模块或者焊接一个。这是硬件连接的关键。
  4. CAN总线分析仪/适配器:这是我们的“上位机”硬件。用来在电脑上模拟发送升级数据。常见的比如周立功的USBCAN系列、广州致远电子的CAN卡,或者淘宝上一些便宜的MCP2515模块搭配USB转接板也行。我实测过,用周立功的卡稳定性很好,但用开源的PCAN-USB或者CANable(基于STM32的开源USB转CAN工具)配合相应的上位机软件也能搞定。
  5. 连线:准备一些杜邦线。连接时务必注意:你的开发板的CAN_TX引脚(可能是PA12)要接到CAN收发器的TXD引脚;CAN_RX引脚(可能是PA11)要接到收发器的RXD引脚。然后收发器的CAN_HCAN_L分别连接到CAN分析仪的CAN_HCAN_L。最后,所有节点的CAN_H和CAN_L之间,务必并联一个120欧姆的终端电阻,通常分析仪上自带一个开关,记得打开。没有终端电阻,通信大概率会失败,这是我踩的第一个坑。

2.3 软件武器库

  • 开发环境:STM32CubeIDE。这是ST官方的免费集成开发环境,集成了CubeMX配置工具和GCC编译链,一站式搞定,非常方便。我们用这个来编写和编译Bootloader以及APP。
  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值