打印
[其他ST产品]

stm32晶振配置不一致导致 Invalid Rom Table

[复制链接]
1322|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
概述

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

原因

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



使用特权

评论回复
评论
家有两宝呀 2022-8-24 14:33 回复TA
———————————————— 版权声明:本文为CSDN博主「暖暖的纠结」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_33559992/article/details/105487168 
沙发
家有两宝呀|  楼主 | 2022-8-24 14:22 | 只看该作者
解决方案

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


断电,将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 所示。

复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。
复位后,用户可以通过设置 BOOT1 和 BOOT0 引脚来选择需要的自举模式。

使用特权

评论回复
5
家有两宝呀|  楼主 | 2022-8-24 14:29 | 只看该作者
启动模式

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

1)主闪存存储器 :

STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

使用特权

评论回复
6
家有两宝呀|  楼主 | 2022-8-24 14:30 | 只看该作者
2)嵌入式SRAM

内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,再将程序下载到Flash中。

使用特权

评论回复
7
家有两宝呀|  楼主 | 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中启动。
可以看到,利用串口下载程序还是比较的麻烦,需要跳帽跳来跳去的,非常的不注重用户体验。
————————————————

使用特权

评论回复
8
家有两宝呀|  楼主 | 2022-8-24 14:32 | 只看该作者
要注意的是,一般不使用内置SRAM 启动(BOOT1=1 BOOT0=1),因为SRAM 掉电后数据就丢失。多数情况下SRAM 只是在调试时使用,也可以做其他一些用途。如做故障的局部诊断,写一段小程序加载到SRAM 中诊断板上的其他电路,或用此方法读写板上的Flash 或EEPROM 等。还可以通过这种方法解除内部Flash 的读写保护,当然解除读写保护的同时Flash 的内容也被自动清除,以防止恶意的软件拷贝。

使用特权

评论回复
9
家有两宝呀|  楼主 | 2022-8-24 16:07 | 只看该作者
一般 BOOT1 和BOOT0 跳线都跳到0(地)。只是在ISP 下载的情况下,BOOT0=1,BOOT1=0 ,下载完成后,把 BOOT0 的跳线接回0,也即BOOT0=0,BOOT1=0 。

使用特权

评论回复
10
Uriah| | 2022-9-30 13:14 | 只看该作者

在实际的项目应用当中,单片机引脚的复用相当厉害

使用特权

评论回复
11
Bblythe| | 2022-9-30 16:13 | 只看该作者

时间片轮的设计思想

使用特权

评论回复
12
Pulitzer| | 2022-9-30 19:12 | 只看该作者

需要在做项目的过程中经历磨难

使用特权

评论回复
13
周半梅| | 2022-12-25 07:16 | 只看该作者

硬件设计和软件设计本来就是鱼和熊掌的关系,两者不可兼得

使用特权

评论回复
14
童雨竹| | 2022-12-25 08:09 | 只看该作者

事实上很多做项目的工程师本身自己也会在用

使用特权

评论回复
15
Wordsworth| | 2022-12-25 09:12 | 只看该作者

结构化模块化的程序设计的思想,使最基本的要求

使用特权

评论回复
16
Clyde011| | 2022-12-25 10:15 | 只看该作者

确定好硬件原理图,硬件布线,最后才是软件的开发

使用特权

评论回复
17
万图| | 2022-12-25 12:11 | 只看该作者

写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的

使用特权

评论回复
18
Uriah| | 2022-12-25 13:14 | 只看该作者

在实际的项目应用当中,单片机引脚的复用相当厉害

使用特权

评论回复
19
帛灿灿| | 2022-12-25 15:10 | 只看该作者

没有发现有哪本是介绍设计思想的

使用特权

评论回复
20
Bblythe| | 2022-12-25 16:13 | 只看该作者

时间片轮的设计思想

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

583

帖子

0

粉丝