stm32晶振配置不一致导致 Invalid Rom Table 至芯片锁死解决方案
参考博文
Invalid ROM Table原因及解决办法
STM32芯片锁死问题
概述
在调试STM32时,出现如下的现象:软件写好之后首次下载程序至芯片时成功,但程序未能正常运行,之后再下载程序时便报错:Invalid ROM Table
原因
出现该现象的原因为板子外部晶振为25M,而程序软件上以8M为输入晶振频率,导致芯片超频锁死,无法连接、下载
解决方案
- 断电,将芯片原来通过10k电阻接地的BOOT0引脚直接接3.3V,硬件上置1
- 上电,连接目标板,Keil中点选Flash->Erase,清除芯片原有程序
- 断电,将BOOT0重新通过10k电阻接地后正常下载修改后的程序即可。
结论
所有软件上引起的芯片锁死等现象基本均可尝试下这一方法。
/----------------------------------------------------------------------------------------------------------/
另外附上Boot1 Boot0的应用原理
存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总 线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。Cortex™-M4F CPU 始终通过 ICode 总线获取复位向量,这意味着只有代码区域(通常为 Flash)可以提供 自举空间。STM32F4xx 微控制器实施一种特殊机制,可以从其它存储器(如内部 SRAM) 进行自举。
在 STM32F4xx 中,可通过 BOOT[1:0] 引脚选择三种不同的自举模式,如表 3 所示。
复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。
复位后,用户可以通过设置 BOOT1 和 BOOT0 引脚来选择需要的自举模式。
启动模式
STM32 三种启动模式对应的存储介质均是芯片内置的,它们是:
1)主闪存存储器 :
STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。
2)嵌入式SRAM
内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,再将程序下载到Flash中。
3)系统存储器
这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader。
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动。
可以看到,利用串口下载程序还是比较的麻烦,需要跳帽跳来跳去的,非常的不注重用户体验。
要注意的是,一般不使用内置SRAM 启动(BOOT1=1 BOOT0=1),因为SRAM 掉电后数据就丢失。多数情况下SRAM 只是在调试时使用,也可以做其他一些用途。如做故障的局部诊断,写一段小程序加载到SRAM 中诊断板上的其他电路,或用此方法读写板上的Flash 或EEPROM 等。还可以通过这种方法解除内部Flash 的读写保护,当然解除读写保护的同时Flash 的内容也被自动清除,以防止恶意的软件拷贝。
一般 BOOT1 和BOOT0 跳线都跳到0(地)。只是在ISP 下载的情况下,BOOT0=1,BOOT1=0 ,下载完成后,把 BOOT0 的跳线接回0,也即BOOT0=0,BOOT1=0 。
stm32晶振配置不一致导致 Invalid Rom Table 至芯片锁死解决方案相关推荐
- 记录一下STM32下载报错invalid rom table的解决
今天调试一个stm32板子和往常的习惯一样,会一部分一部分的焊接,今天调试发现下载程序时候报错:invalid rom table. 终于在找到了网友的解决办法. 200KHz下载成功的,马上尝试了, ...
- Invalid ROM Table解决办法
今天下午在调试程序的时候,下载了一个别人写的程序,忘记修改时钟频率配置,导致STM32F407芯片锁死问题.以下是我解决的办法,亲测很有效,分享给有需要的童鞋们. 原因 出现该现象的原因为板子外部晶振 ...
- STM32 USB虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)
目录 1.参考链接: 2.虚拟串口硬件说明 2.1.程序中无需配置硬件的设计:D+直接接了3.3V的上拉电阻. 2.2.需要程序中配置D+上拉电阻使能的设计:可以软件模拟USB插拔,便于固件更新后自动 ...
- .axf文件_干货!STM32晶振的更改,BIN文件的生成
STM32因为硬件设计的不同,要根据实际安装晶振修改程序参数, 一般使用的晶振是8M,如果遇到使用24M晶振的时候程序配置要怎么去修改呢? 一共有两处需要修改,如果是24M就把这个修改为24,同理8M ...
- 麒麟座MINI板串口乱码(HAL库晶振配置)
网上说STM32默认是8MHZ晶振,但是用其他频率的晶振都可以 之前用的ZET6的开发板,没有注意过这个问题,现在MINI板CBT6使用的12MHZ晶振,用和原来一样的串口代码输出的是乱码,变了很多个 ...
- STM32晶振 选型
频率 STM32有5个时钟源,有高速内部时钟(HSI)和低速内部时钟(LSI),还有高速外部时钟(HSE)和低速外部时钟(LSE),而这里的外部高速时钟HSI就是我们图中的Y1,8MHz的晶振,外部低 ...
- MSP430晶振配置详解
MSP430(F5529)相比MSP430(F149)来讲,功能更加强大. UCS简介 MSP430F5XX/MSP430F6XX系列器件的UCS包含有五种时钟源,依次是:XT1CLK.VLOCLK. ...
- stm32晶振工作一段时间停振
停振的相关原因 晶振相关内容 晶振的的匹配电容 根据负载电容来选择匹配电容,一般负载电容 CL=cs+cscs∗csCL=\frac{cs+cs}{cs*cs}CL=cs∗cscs+cs+PCB的自 ...
- 晶振虚焊导致TI 28335 DSP 烧写FLASH后,连接仿真器时正常工作,拔掉仿真器却不能启动运行...
遇到个诡异的问题,28335的DSP,之前程序调试一切正常,但是烧写FLASH后,拔掉仿真器却始终部工作. 解决思路: 1) 检查配置文件貌似没什么问题,复制到其他工程,在开发板上拔掉仿真器启动正常. ...
- Invalid ROM Table原因及解决办法(STM32F429VET6程序移植F429IGT6)
移植程序过程中出现烧写一次以后STLINK无法在连接问题,经过数次测试只有用flymcu擦除全部程序后才能重新烧写程序,移植过程中除了芯片型号变更, 此处因为外置晶振原先为8M现在开发板上为25M 改 ...
最新文章
- Cache Aside Pattern(缓存模式)
- 数据中心行业人士如何进行继续教育
- Python—sqlalchemy
- 实践1-qq邮箱主页
- Laravel使用EasyWechat 进行微信支付
- Laravel用post提交表单常见的两个错误
- rust中使用cargo expand查看被宏隐藏的代码
- python输入成绩求总分和平均分_python脚本如何输入成绩求平均分?
- android:id=@android:id/tabhost 、android:id=@+id/llRoot 、android:id=@id/llRoot 之间的区别...
- LeetCode 537. Complex Number Multiplication
- java四则运算,计算器的实现
- 大学生静态HTML鲜花网页设计作品 DIV布局网上鲜花介绍网页模板代码 DW花店网站制作成品 web网页制作与实现
- J2EE框架搭建大集合
- 有刷电机与无刷电机的接线方法(淘宝一卖家写的很好,厚实的实践经验)
- 使用office tool plus清除office激活状态
- PostgreSQL下载地址
- Python OOP 项目实践:烤地瓜,搬家具
- YYCMS5.0影视系统/源码全开源无授权/影视站全自动采集
- Spring Boot 接口幂等性实现的 4 种方案!
- YoutubeAPI使用