手把手教你用Arduino IDE给STM32F103C8T6烧录程序(串口/DFU两种方式保姆级教程)

张开发
2026/4/19 11:09:46 15 分钟阅读

分享文章

手把手教你用Arduino IDE给STM32F103C8T6烧录程序(串口/DFU两种方式保姆级教程)
STM32F103C8T6开发板在Arduino IDE中的双模式烧录实战指南当你第一次拿到那块蓝色或黑色的STM32开发板时最迫切的问题往往是怎么把写好的代码放进去作为Arduino爱好者转向STM32的经典入门型号STM32F103C8T6以其性价比和丰富资源备受青睐。但不同于传统Arduino板的一键烧录这颗Cortex-M3芯片需要理解两种不同的烧录模式——串口和DFU这正是大多数新手遇到的第一个技术分水岭。1. 开发环境搭建与核心配置在开始烧录前需要完成三个关键准备正确的开发环境、硬件连接状态识别、以及开发板定义配置。这就像烹饪前的备菜环节缺一不可。1.1 Arduino IDE的STM32支持包安装最新版Arduino IDE2.x对STM32的支持已经非常完善。打开首选项窗口在附加开发板管理器网址字段添加以下URLhttps://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json进入开发板管理器搜索STM32选择安装STM32 MCU based boards包。安装完成后在开发板菜单中选择Generic STM32F1 series作为基础配置。注意如果遇到下载失败可能是网络连接问题尝试使用工具菜单中的开发板管理器手动下载zip包后本地安装1.2 硬件准备检查清单确保你已准备好以下硬件组件STM32F103C8T6开发板蓝色或黑色USB转TTL串口模块CH340G或CP2102芯片杜邦线若干至少需要4根微型USB数据线用于DFU模式特别要注意开发板上的两个关键跳线BOOT0决定启动模式正常/系统存储器BOOT1通常保持接地状态1.3 开发板参数精确配置在工具菜单中进行如下设置开发板Generic STM32F1 series 板子型号STM32F103C8 Upload methodSerial或DFU根据模式选择 CPU Speed72MHz OptimizeSmallest默认2. 串口烧录模式全解析串口烧录是最传统也最稳定的方式适合所有带UART接口的STM32芯片。这种方式不依赖芯片内置的USB功能只需要一个几块钱的USB转TTL模块。2.1 硬件连接示意图按照下表连接开发板与USB转TTL模块开发板引脚TTL模块引脚备注3.3V3.3V可选可单独供电GNDGND必须连接PA9(TX)RX交叉连接PA10(RX)TX交叉连接关键提示务必确保BOOT0跳线帽接高电平通常标记为1BOOT1保持低电平这是进入串口烧录模式的前提2.2 烧录流程分步指南物理连接检查确认所有杜邦线接触良好无松动开发板模式设置BOOT0跳线置1按下复位键此时芯片进入系统存储器模式IDE配置工具→Upload method→Serial选择正确的串口端口可在设备管理器中确认上传测试程序void setup() { pinMode(PC13, OUTPUT); // 板载LED通常连接PC13 } void loop() { digitalWrite(PC13, !digitalRead(PC13)); delay(500); }恢复运行模式烧录完成后将BOOT0跳回0再次复位即可运行用户程序2.3 常见问题排查表现象可能原因解决方案上传超时波特率不匹配尝试降低上传波特率至115200端口识别失败驱动未安装安装CH340/CP210x驱动程序校验错误电源不稳定单独供电或增加滤波电容无法进入烧录模式BOOT0设置错误确认BOOT01且复位操作正确3. DFU模式烧录深度指南DFUDevice Firmware Upgrade模式利用STM32内置的USB引导程序无需额外硬件只需一根USB线即可完成烧录。这种方式更简洁但对芯片型号和驱动配置有特定要求。3.1 DFU模式激活步骤硬件准备连接开发板USB口到电脑BOOT0跳线置1按下复位键进入DFU模式驱动安装在设备管理器查看是否识别为STM32 BOOTLOADER若显示未知设备需安装libusb-win32驱动软件工具链配置安装dfu-util工具Windows用户推荐使用Zadig工具配置驱动在Arduino IDE中选择Upload method为DFU3.2 完整烧录实例以烧录一个USB串口回显程序为例#include HardwareSerial.h void setup() { Serial.begin(115200); SerialUSB.begin(115200); } void loop() { if(Serial.available()) { SerialUSB.write(Serial.read()); } if(SerialUSB.available()) { Serial.write(SerialUSB.read()); } }烧录参数配置工具→Upload method→DFU选择正确的DFU设备可通过dfu-util -l命令确认勾选Create binary选项生成.dfu文件3.3 DFU模式特有优势与限制优势对比无需额外硬件省去USB转TTL模块烧录速度更快USB全速12Mbps支持更丰富的USB功能开发使用限制部分克隆芯片可能DFU功能异常驱动配置较复杂尤其在Windows系统无法用于没有USB接口的STM32型号4. 两种烧录方式的技术对比与选型建议理解串口和DFU烧录的本质区别能帮助你在不同场景做出最优选择。4.1 技术参数对比表特性串口烧录DFU烧录所需硬件USB转TTL模块仅需USB线连接速度最高1Mbps12Mbps全速USB驱动复杂度简单标准串口驱动中等需libusb支持芯片支持范围所有带UART的STM32需内置USB的型号稳定性极高依赖芯片USB质量额外功能仅烧录可开发USB应用4.2 实际应用场景建议选择串口烧录当使用基础型号STM32F103C8T6需要绝对稳定的生产环境手头已有USB转TTL模块开发不含USB功能的应用优先DFU模式当开发USB相关功能如HID设备需要频繁烧录调试追求最小硬件连接使用正品ST芯片非克隆版本4.3 混合使用技巧资深开发者常采用两种方式组合初期用串口烧录验证硬件基础功能开发USB功能时切换到DFU模式最终量产时回归串口确保稳定性一个实用技巧是在代码中保留串口打印调试信息即使在使用DFU模式时也能通过SerialUSB和Serial同时输出日志#ifdef USE_USB_DEBUG #define DEBUG_OUT SerialUSB #else #define DEBUG_OUT Serial #endif void setup() { DEBUG_OUT.begin(115200); DEBUG_OUT.println(System initialized); }5. 进阶技巧与异常处理掌握了基础烧录方法后这些实战经验能帮你避开大多数坑。5.1 自动复位电路设计专业开发板通常设计有自动复位电路无需手动操作BOOT0。你可以通过添加以下元件自行改造10kΩ电阻连接BOOT0到地默认低电平按钮开关连接BOOT0到3.3V按下时进入烧录模式5.2 电源管理要点不稳定电源是烧录失败的常见原因注意USB转TTL模块的3.3V输出可能功率不足建议开发板单独供电或使用带外部电源的USB Hub在3.3V和GND之间添加100μF电容滤波5.3 固件恢复方案当芯片无法正常响应时可以尝试使用ST-Link工具强制擦除通过串口发送特殊命令唤醒使用Arduino as ISP编程器恢复一个实用的应急方案是准备一个Blink程序hex文件在无法通过IDE烧录时使用STM32CubeProgrammer直接写入stm32flash -w blink.hex -v -g 0x0 /dev/ttyUSB06. 扩展生态与资源推荐STM32在Arduino生态中的支持远不止基础烧录这些资源能提升你的开发效率6.1 必备库列表STM32duino核心库提供硬件抽象层LibMaple兼容Arduino的底层驱动HardwareTimer精确控制定时器STM32USBUSB设备支持库安装方法工具→管理库→搜索库名→安装6.2 调试工具链STM32CubeMonitor实时变量监控OpenOCD开源调试接口PlatformIO专业级开发环境Logic Analyzer信号分析推荐Saleae6.3 社区资源STM32duino官方论坛英文国内电子论坛STM32专区GitHub上的开源项目模板YouTube硬件频道教程开发过程中遇到诡异问题时我的经验法则是首先检查BOOT引脚状态其次确认电源稳定性最后考虑驱动兼容性。这三个方面覆盖了90%的烧录问题。

更多文章