历史上的今天
今天是:2025年01月08日(星期三)
2020年01月08日 | STM32的启动模式
2020-01-08 来源:eefocus
刚开始接触STM32,最先遇到的问题就是下载程序。我按照教程,使用串口下载,感觉很简单。但是,最近需要使用LCD12864,就把以前的MSP430上的程序移植了一下,结果我发现了一个奇怪的现象,每次下载完程序后,断电,再上电后,液晶屏就不再显示了。这让我感到无比的头疼,因为我总以为是我的程序有问题,反反复复修改了好多遍,经过几个小时的调试,我最终找到了问题的缘由:那就是启动模式。
STM32不同于51或者430的地方是,它有两个管脚:BOOT0,BOOT1用来控制单片机上电复位后启动的位置。如下图所示:

● 第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦出10万次,所以不用担心芯片哪天会被擦爆!
● 第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。
● 第三种启动方式是STM32内嵌的SRAM启动。该模式用于调试。
由于我手头上有一个串口转USB模块,索性就拿它来给STM32F103下载程序了。我也没有深入研究启动模式到底是干什么的。这就是造成我后面问题的罪魁祸首。
在系统上电的时候,cpu首先根据这两个脚来确定是哪种模式的启动,然后就是把相应模式的起始地址映射到0地址处,并从0地址处开始执行。
在芯片出厂时,ST烧写了一个bootloader到rom中,也就是system memory。这个bootloader的主要任务就是通过uart1下载程序到内置flash中去。工作流程如下:
1) Bootloader是在System Memory,这个区域必须通过设置Boot1和Boot0引脚才能启动,正常工作状态下,这部分区域是被隔离开的,自动被绕开,Bootloader绝对不占用任何用户程序的资源。
简单地说:当你要使用ISP烧写数据到Flash时,需要设置Boot1和Boot0启动System Memory中的Bootloader;这时候bootleader会帮助你将程序烧写到Flash中去,烧写完成后,再重新设置Boot1和Boot0启动(将boot1和boot0都置0)Flash中你自己的程序,进入正常操作。
2)STM32中的Bootloader使用USART1做为通信端口,它使用8个数据位、1个停止位和偶校验,具有自动波特率检测功能。
由此可见,使用ISP下载还是比较麻烦的。看来以后,还是得多看看原理,再下手,不然埋下的隐患自己都发现不了。
下一篇:STM32添加路径报错
史海拾趣
|
1、需求单来了,发布了,没简历 2、简历来了,能力不合适 3、能力合适的来了,薪资谈判失败 4、薪资谈判成功了——用人部门领导说,恩,先缓缓 5、三催四请之后,用人部门领导说,哎呀,我们这个组织架构变更,现在这个职位划到XXX部门,由XXX ...… 查看全部问答> |
|
请问我在VS2008里生成的WINCE应用程序.EXE在wince里运行无反应,还有我在我在线调试的时候显示连接正常但是VS2008却点击不了,不知道是什么原因!请大家帮忙解决下。谢谢 … 查看全部问答> |
|
最近移植bsp发现wince5.0的DM9000A驱动有问题!现在在这个和大家讨论讨论! 首先dm9000大部分驱动是官方的,下面就是一些细节的研究、我首先讲讲我的平台情况。 1.SD0~SD15 -------- LDATA0~LDATA15 数据线和 ...… 查看全部问答> |
|
各位高人! 我现在遇到这样一个问题!lcd驱动在uboot和kernel中使用了不同的buffer,从而导致了在进入kernel中lcd驱动时出现 lcd屏有个短暂的颜色渐变。为了消除这个bug。就想让uboot和kernel使用同一块内存。 1)下面是我的做法: & ...… 查看全部问答> |
|
【解密08】基于51单片机的无线遥控坦克DIY 之 图片欣赏 前面介绍了很多专业内容,估计大家看的有些不耐烦了,今天换换口味,欣赏一下我们拍摄的照片,之前一直有朋友反映视频看的不是很清楚,很多细节没有看到,今天给大家上几张图,我们也正在翻录新的视频,希望能做的更好 ...… 查看全部问答> |
|
【库房无线温湿度监控方案】 [无线温湿度监控系统] 【无线温湿度传感器】 【医药库房、大型物流存储温湿度远程监控系统】 今现代化建设和国民经济发展迅速。社会对生产环境和生活环境意识的要求也越来越高。人们的日常生活和周围环境的温湿度息 ...… 查看全部问答> |




