2026/4/16 22:24:12
网站建设
项目流程
建网站麻烦吗,多伦多网站建设多少钱,江苏省建设工程造价管理协会网站,网址大全2345 下载这?从零开始#xff1a;手把手教你用 Keil5 给 STM32F103 烧录程序你有没有过这样的经历#xff1f;代码写得飞快#xff0c;编译也没报错#xff0c;信心满满点下“下载”按钮——结果弹窗跳出一行红字#xff1a;“Cannot access target.”然后就是一顿查线、换电源、重装驱…从零开始手把手教你用 Keil5 给 STM32F103 烧录程序你有没有过这样的经历代码写得飞快编译也没报错信心满满点下“下载”按钮——结果弹窗跳出一行红字“Cannot access target.”然后就是一顿查线、换电源、重装驱动……最后发现只是BOOT 模式没设对。别担心这几乎是每个嵌入式新手都会踩的坑。今天我们就来彻底讲清楚如何用 Keil5 成功烧录程序到 STM32F103 上不靠玄学只讲逻辑和实战细节。一、为什么是 Keil5 STM32F103在众多开发组合中Keil MDK即 Keil5搭配 STM32F103是最经典的入门组合之一。STM32F103C8T6俗称“蓝丸”或“最小系统板”价格便宜、资料丰富适合学习Keil5虽然不是免费的但它编译效率高、调试稳定尤其对 Cortex-M3 支持极佳加上官方出品的ST-Link 下载器整个链路清晰可控非常适合打基础。 提示本文适用于所有基于 STM32F103 的开发板无论你是用自制板、Nucleo 板还是某宝买的“黑板”。二、你需要准备什么硬件清单名称说明PC 主机Windows 系统推荐 Win10/Win11STM32F103 开发板如最小系统板、Nucleo-F103RB 等ST-Link/V2 或兼容下载器可购买独立模块或使用板载调试器杜邦线若干建议使用 4 根SWCLK、SWDIO、GND、3.3V软件环境工具安装建议Keil MDK-ARM V5下载官网版本注意注册 License可试用ST-Link 驱动安装 Keil 时自带也可单独安装 ST-Link USBDriver可选STM32CubeProgrammer用于恢复锁死芯片三、先搞明白烧录到底发生了什么很多人以为“烧录”就是把.hex文件复制进单片机其实远不止如此。真正完整的流程是这样的[Keil 编译] → [生成 .hex/.bin] → [通过 ST-Link 发送指令] → [目标芯片进入调试模式] → [运行 Flash Loader 程序] → [擦除旧代码 → 写入新数据 → 校验一致性] → [复位运行]这个过程依赖三个关键组件协同工作调试接口协议SWDFlash 编程算法Algorithm硬件连接可靠性下面我们一个一个拆开来看。四、核心部件详解SWD 接口与 ST-Link1. SWD 是什么为什么不用 JTAGJTAG 需要 TMS、TCK、TDI、TDO 至少 4 根线而SWD 只需要两根线就能完成调试和烧录SWCLK时钟信号输出SWDIO双向数据线输入/输出此外还有-GND共地必须接-3.3V给目标板供电可选视情况而定✅ 正确接法示例ST-Link V2 → STM32F103ST-Link → STM32F103 --------------------------------- SWCLK → PA14 (SWCLK) SWDIO → PA13 (SWDIO) GND → GND 3.3V → VDD / 3.3V如果由 ST-Link 供电⚠️ 注意事项- 不要接错顺序特别是 GND 和 3.3V。- 若目标板已有独立电源请勿再从 ST-Link 接 3.3V避免反灌电。- 引脚有静电保护最好加 100Ω 电阻隔离。2. ST-Link 到底做了什么它不只是个“转接头”而是一个智能桥接设备将 PC 上的 USB 协议转换为 ARM 标准的 SWD 协议在 Keil 中点击“Download”后它会向 STM32 发送一系列调试命令触发目标芯片内部的Debug Access Port (DAP)进而访问内存和外设执行 Flash 擦写操作时实际是在 RAM 中临时运行一段“Loader 程序”。所以即使你的主程序跑飞了只要 DAP 没被禁用依然可以重新烧录。五、Keil5 工程配置实战第一步创建工程并选择芯片打开 Keil uVision5Project → New uVision Project保存路径不要含中文选择芯片型号STMicroelectronics → STM32F103C8根据你的具体型号选 关键提示一定要选对芯片否则 Flash 算法可能不匹配导致下载失败。Keil 会自动加载启动文件startup_stm32f10x_md.s、系统初始化函数等。第二步添加源码以点亮 LED 为例新建main.c输入以下裸机代码#include stm32f10x.h static void delay(volatile uint32_t count) { while (count--); } int main(void) { // 使能 GPIOC 时钟APB2 总线 RCC-APB2ENR | RCC_APB2ENR_IOPCEN; // 配置 PC13 为推挽输出10MHz GPIOC-CRH ~(GPIO_CRH_MODE13_Msk | GPIO_CRH_CNF13_Msk); GPIOC-CRH | GPIO_CRH_MODE13_0; // 10MHz 输出模式 // CNF13 00 表示通用推挽输出 for (;;) { GPIOC-BSRR GPIO_BSRR_BR13; // PC13 输出低 delay(0xFFFFF); GPIOC-BSRR GPIO_BSRR_BS13; // PC13 输出高 delay(0xFFFFF); } } 解释几个关键点- 直接操作寄存器不依赖库函数便于理解底层机制-BSRR寄存器支持原子级置位/清零比直接赋值更安全-RCC-APB2ENR控制外设时钟使能这是 STM32 的基本操作规范。第三步设置下载工具重点这是最容易出错的地方进入Project → Options for Target → Debug1. 选择调试器左侧选择 “ST-Link Debugger”点击右侧 “Settings”2. 在 “Debug” 选项卡中确认 Connection 为 “SWD”Speed 建议设为 “4 MHz” 或更高太低会慢3. 切换到 “Flash Download” 选项卡✅ 勾选 “Download to Flash”✅ 勾选 “Reset and Run” → 烧完自动运行不用手动复位查看下方是否列出正确的 Flash 算法例如STM32F10x High-density: 512 KB Flash如果显示 “No Algorithm Found”说明芯片识别错误或 Flash 大小不匹配。 解决方法- 回到主界面重新选择正确芯片型号- 或手动添加合适的 Flash 算法文件.flm。六、动手烧录一键下载全流程一切就绪后执行以下步骤上电目标板确保 VDD ≈ 3.3V连接 ST-Link 并插到电脑 USB 口Keil 中按下快捷键F8或点击工具栏 “Load” 按钮等待几秒状态栏应出现Programming... Erase Done. Program Done. Verify OK. Application running... 成功LED 应该开始闪烁了。七、常见问题与避坑指南问题现象可能原因解决方案Cannot access target接线松动 / 未共地 / 电压异常检查 GND 是否连通测量 VDD 是否正常No target connectedST-Link 驱动未安装安装最新版 ST-Link USBDriverKeil 自带Flash programming failed芯片被读保护或锁死使用 STM32CubeProgrammer 连接后解除保护下载成功但不运行BOOT 模式错误确保 BOOT0 0BOOT1 x通常接地即可烧录速度极慢SWD 时钟频率太低在 Settings 中将 Clock 提高至 4~10MHz第一次能烧第二次失败复位引脚悬空导致复位不稳定给 NRST 加 10kΩ 上拉电阻高级技巧如何判断芯片是否已被锁死打开 STM32CubeProgrammer- 选择 SWD 接口 → Connect- 如果提示 “No device found” 或 “Protected”说明需要解除保护- 使用 “Remove Protection” 功能即可恢复八、那些没人告诉你的重要细节1. BOOT 引脚怎么设置BOOT0BOOT1启动方式0x主闪存存储器正常运行程序✅10系统存储器串口 ISP 模式11内置 SRAM调试用 日常烧录请保持BOOT0 0烧完想运行也必须切回 02. 是否需要每次烧录都接 3.3V如果你的开发板有自己的稳压电源如 USB 供电就不需要从 ST-Link 取电如果是无源最小系统板只有芯片晶振电容可以用 ST-Link 供电。但要注意ST-Link 最大输出电流约 100mA带不动大负载。3. Reset and Run 有什么用勾选后Keil 会在下载完成后自动发送复位信号并跳转到用户程序入口运行。如果不勾选程序虽然写进去了但 CPU 还停在调试状态必须手动按复位键才能看到效果。九、延伸思考这套流程还能怎么优化一旦你掌握了这套“Keil ST-Link SWD”的基本范式就可以轻松扩展到其他场景换成J-Link只需在 Keil 中切换调试器名称即可改用VS Code Cortex-Debug OpenOCD底层协议完全一致移植到STM32F4/H7除了 Flash 算法不同其余流程几乎一样实现远程固件升级IAP现在你知道了 Flash 如何擦写下一步就是自己写 Bootloader。最后的话学会“用 Keil5 给 STM32F103 烧录程序”看似只是一个小小的操作实则是嵌入式开发的第一道门槛。跨过去之后你会发现- 原来调试器不是魔法盒子- 原来 Flash 写入是有协议的- 原来每一个.hex文件背后都有精密的控制流程。当你下次遇到“无法连接目标”时不会再盲目重启而是冷静地问自己“线接对了吗”“电源正常吗”“BOOT 设置对了吗”“驱动装了吗”“Flash 算法匹配吗”这才是真正的工程师思维。如果你正在学习嵌入式开发不妨现在就打开 Keil亲手烧录一遍这个最简单的 LED 程序。哪怕只成功一次你也已经踏出了成为硬件开发者的关键一步。如有疑问欢迎留言交流。一起进步