[其他ST产品] stm32晶振配置不一致导致 Invalid Rom Table

[复制链接]
 楼主| 家有两宝呀 发表于 2022-8-24 14:20 | 显示全部楼层 |阅读模式
概述

在调试STM32时,出现如下的现象:软件写好之后首次下载程序至芯片时成功,但程序未能正常运行,之后再下载程序时便报错:Invalid ROM Table

876236305c308d3db8.png

原因

出现该现象的原因为板子外部晶振为25M,而程序软件上以8M为输入晶振频率,导致芯片超频锁死,无法连接、下载



评论

———————————————— 版权声明:本文为CSDN博主「暖暖的纠结」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_33559992/article/details/105487168  发表于 2022-8-24 14:33
 楼主| 家有两宝呀 发表于 2022-8-24 14:22 | 显示全部楼层
解决方案

断电,将芯片原来通过10k电阻接地的BOOT0引脚直接接3.3V,硬件上置1
上电,连接目标板,Keil中点选Flash->Erase,清除芯片原有程序
355506305c3ba3d32b.png

断电,将BOOT0重新通过10k电阻接地后正常下载修改后的程序即可。
结论

所有软件上引起的芯片锁死等现象基本均可尝试下这一方法。
 楼主| 家有两宝呀 发表于 2022-8-24 14:25 | 显示全部楼层
另外附上Boot1 Boot0的应用原理

存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总 线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。Cortex™-M4F CPU 始终通过 ICode 总线获取复位向量,这意味着只有代码区域(通常为 Flash)可以提供 自举空间。STM32F4xx 微控制器实施一种特殊机制,可以从其它存储器(如内部 SRAM) 进行自举。
 楼主| 家有两宝呀 发表于 2022-8-24 14:27 | 显示全部楼层
在 STM32F4xx 中,可通过 BOOT[1:0] 引脚选择三种不同的自举模式,如表 3 所示。
575996305c4b6303af.png
复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。
复位后,用户可以通过设置 BOOT1 和 BOOT0 引脚来选择需要的自举模式。
 楼主| 家有两宝呀 发表于 2022-8-24 14:29 | 显示全部楼层
启动模式

STM32 三种启动模式对应的存储介质均是芯片内置的,它们是:

1)主闪存存储器 :

STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。
 楼主| 家有两宝呀 发表于 2022-8-24 14:30 | 显示全部楼层
2)嵌入式SRAM

内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,再将程序下载到Flash中。
 楼主| 家有两宝呀 发表于 2022-8-24 14:31 | 显示全部楼层
3)系统存储器

这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader。
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动。
可以看到,利用串口下载程序还是比较的麻烦,需要跳帽跳来跳去的,非常的不注重用户体验。
————————————————
 楼主| 家有两宝呀 发表于 2022-8-24 14:32 | 显示全部楼层
要注意的是,一般不使用内置SRAM 启动(BOOT1=1 BOOT0=1),因为SRAM 掉电后数据就丢失。多数情况下SRAM 只是在调试时使用,也可以做其他一些用途。如做故障的局部诊断,写一段小程序加载到SRAM 中诊断板上的其他电路,或用此方法读写板上的Flash 或EEPROM 等。还可以通过这种方法解除内部Flash 的读写保护,当然解除读写保护的同时Flash 的内容也被自动清除,以防止恶意的软件拷贝。
 楼主| 家有两宝呀 发表于 2022-8-24 16:07 | 显示全部楼层
一般 BOOT1 和BOOT0 跳线都跳到0(地)。只是在ISP 下载的情况下,BOOT0=1,BOOT1=0 ,下载完成后,把 BOOT0 的跳线接回0,也即BOOT0=0,BOOT1=0 。
Uriah 发表于 2022-9-30 13:14 | 显示全部楼层

在实际的项目应用当中,单片机引脚的复用相当厉害
Bblythe 发表于 2022-9-30 16:13 | 显示全部楼层

时间片轮的设计思想
Pulitzer 发表于 2022-9-30 19:12 | 显示全部楼层

需要在做项目的过程中经历磨难
周半梅 发表于 2022-12-25 07:16 | 显示全部楼层

硬件设计和软件设计本来就是鱼和熊掌的关系,两者不可兼得
童雨竹 发表于 2022-12-25 08:09 | 显示全部楼层

事实上很多做项目的工程师本身自己也会在用
Wordsworth 发表于 2022-12-25 09:12 | 显示全部楼层

结构化模块化的程序设计的思想,使最基本的要求
Clyde011 发表于 2022-12-25 10:15 | 显示全部楼层

确定好硬件原理图,硬件布线,最后才是软件的开发
万图 发表于 2022-12-25 12:11 | 显示全部楼层

写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的
Uriah 发表于 2022-12-25 13:14 | 显示全部楼层

在实际的项目应用当中,单片机引脚的复用相当厉害
帛灿灿 发表于 2022-12-25 15:10 | 显示全部楼层

没有发现有哪本是介绍设计思想的
Bblythe 发表于 2022-12-25 16:13 | 显示全部楼层

时间片轮的设计思想
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

585

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部