STM32F10x烧写代码出现invalid rom table

背景描述:

        实验室焊的电路板检测硬件是否能够正常工作,所用的芯片是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汇编语言文件中进行注释。)

扫描二维码关注公众号,回复: 14709884 查看本文章

 或是(使用外部晶振)

在stm32f10x.h中找到HSE_Value 将8000000修改为25000000

 在system_stm32f10x.c中修改SYSCLK_FREQ_HSE(自己这么修改是可以调用了,目前理解还不够透彻,不知是否具有通用性,若有误请批评指正)

 

 但此时还需要做一步就是将板子的编译模式进行改变

 主要的做法就是先断电,在BOOT0上进行置1(在原理图中就是将BOOT0引脚连到3.3v电压上)保持不动,上电,松掉,用stlink进行烧录此时就可以正常烧写了。

注意:不要连错把3.3v和GND相连,这样stlink会无法上电烧写程序。

本篇博客记录自己在实验室所遇到的一些问题以及解决方法,走了不少弯路,仅供参考,若有误请批评指正,在之后随着对于嵌入式相关内容的学习理解深入,希望自己也能够回来继续将每一步都了解透彻,补充完整。

猜你喜欢

转载自blog.csdn.net/weixin_45682319/article/details/128265756
ROM