背景描述:
实验室焊的电路板检测硬件是否能够正常工作,所用的芯片是STM32F03RCT6。找了一个较为简单的灯闪烁程序直接进行烧入。第一次能够成功烧入,但没有灯闪烁现象。随后无法烧入,并且报错为invalid rom table。
所做的尝试:
1.将Flash Download中选择对应的Programming Algorithm(注意需要与芯片对应型号相符合)
这边STMF03RCT6的flash大小为256Kb,可选择STM32F10x_512.FLM(第四个虽然为256k但并不符合)
在最开始以为是这个问题的时候发现,点击add按键内部所包括的选项极少,所以需要下载一个MDKCM525.EXE(官方链接下载)。
2.确保stlink连线正确,其中最为关键的就是SWDIO和SWCLK引脚,在原理图中需要看清并且正确相连。
3.之前也看到有说法是要修改clock值,但尝试后没能实现,下图为成功解决该问题时的debug配置
最终解决:
这个针对Mini-STM32F4x9BI开发板,使用ULINK2下载的博客 Invalid ROM Table原因及解决办法
给我提供了极大的帮助,提示了导致该问题的原因可能为外部晶振为25M(芯片若使用外部晶振可用示波器进行检测,钳子一端接地,脚一端连接相应引脚,示波器中便会显示频率),而原程序的外部晶振为8M,晶振频率修改错误导致程序超频锁死,而在一般的程序中SystemInit程序中会对此进行配置。若目的与我本次相同:只是检测硬件连接是否有误,那么可以在main函数中将该SystemInit程序注释掉即可(若没有在main中调用该函数,则是在startup_stm32f10x_hd.s汇编语言文件中进行注释。)
或是(使用外部晶振)
在stm32f10x.h中找到HSE_Value 将8000000修改为25000000
在system_stm32f10x.c中修改SYSCLK_FREQ_HSE(自己这么修改是可以调用了,目前理解还不够透彻,不知是否具有通用性,若有误请批评指正)
但此时还需要做一步就是将板子的编译模式进行改变
主要的做法就是先断电,在BOOT0上进行置1(在原理图中就是将BOOT0引脚连到3.3v电压上)保持不动,上电,松掉,用stlink进行烧录此时就可以正常烧写了。
注意:不要连错把3.3v和GND相连,这样stlink会无法上电烧写程序。
本篇博客记录自己在实验室所遇到的一些问题以及解决方法,走了不少弯路,仅供参考,若有误请批评指正,在之后随着对于嵌入式相关内容的学习理解深入,希望自己也能够回来继续将每一步都了解透彻,补充完整。