通过jlinksegger烧写stm32程序
J-Link和STM32是通过嵌入式开发圈子里最常见的一对搭档。烧写固件这件事,程序看起来就是通过把hex文件拖进去,但真到现场调试时,程序很多人卡在驱动、通过接线或者芯片锁死的程序问题上,一折腾就是通过半天。这篇文章直接讲怎么用SEGGER的程序J-Flash工具把程序烧进STM32,包括最常见的通过坑和解决办法。 先准备好硬件。程序J-Link的通过SWD接口只需要四根线:SWDIO、SWCLK、程序GND、通过VCC(可选)。程序很多人习惯只接三根,通过但如果你目标板的供电不稳,最好把VCC也接上,J-Link能检测目标电压,避免电平不匹配导致烧写失败。我碰到过最离谱的情况,是有人把SWDIO和SWCLK接反了,J-Link灯亮着,但软件里永远显示“Cannot connect”。接线后先用万用表量一下,确认没有短路,再上电。 打开J-Flash,版本建议6.8以上,老版本对新型号STM32支持不全。新建工程,芯片型号直接搜,比如STM32F103C8,选对封装和Flash大小。这里有个细节:如果选错型号,烧写时可能提示“Flash Download failed”,因为地址范围对不上。选完芯片,把hex或bin文件拖进界面,地址默认0x08000000,这是STM32内部Flash的起始地址,不用改。 连接前,先检查J-Link驱动是否装好。设备管理器里能看到“J-Link”设备,如果带黄色感叹号,去SEGGER官网装最新的驱动。连接时,点“Target”菜单下的“Connect”,正常情况下日志区会打印芯片ID和内核信息。如果卡在“Connecting”界面超过10秒,大概率是接线问题或目标板供电异常。还有一种隐蔽情况:目标板上有其他外设占用SWD引脚,比如PB3和PA15被复用,这时需要把BOOT0拉高,让芯片进入ISP模式,再连接烧写。 烧写前建议先做一次全片擦除。点“Target”里的“Manual Programming”,选“Erase all”,然后“Program”。擦除不干净会导致写入校验失败,尤其是之前烧过带读保护的固件。如果芯片被读保护锁死,J-Link连接时会报“Cannot connect to target”,这时需要按住复位键,在连接瞬间松开,或者用“Unsecure chip”功能强制解除保护。注意,这个操作会清空整个Flash,包括之前烧的程序。 烧写完成后,别急着拔线。点“Target”里的“Verify”,确认Flash内容和hex文件完全一致。校验通过后,复位运行,看程序是否正常跑起来。如果程序没反应,检查一下Boot0和Boot1的跳线设置,确保从Flash启动,而不是从系统存储器或SRAM启动。 最后说个实用技巧。J-Flash支持命令行烧写,格式是JFlash.exe -openprj工程名.jflash -openhex文件.hex -connect -program -verify -exit,适合批量生产或者自动化测试。我平时调试时还喜欢用J-Link的RTT功能替代串口打印,不仅省掉一根USB转TTL线,还能实时看日志,速度比串口快得多。烧写只是第一步,能把调试环境搭顺了,后面开发效率能翻倍。
-
上一篇
-
下一篇
- 随机阅读
- 搜索
-
- 友情链接
-