boot0是什么?

1. 杂谈

最近感觉越来越口吃了,知道自己不会表达,但在熟人面前至少能侃侃而谈,现在在熟人面前也说不出话来,真让我苦恼,我觉得人还是不要给自己负面暗示,否则长此以往自己真的就不行了,想想阻碍你的门槛是什么,与其退缩,还不如去突破,所以还是多读书,多分享,嗯,要不开个读书专栏吧,推动自己下。

2. BOOT0是什么

前段时间调试STM32F031K6时,发现程序烧进去没有运行,查找原因,原来是BOOT0在硬件设计时被拉高了,拉低就可以正常烧录了。
那么BOOT0到底是什么鬼,为什么它会影响说stm32的烧录?
BOOT英文意思是“启动”。
那么STM32为什么需要启动设置呢?
因为程序是需要从main函数开始的,而stm32在上电复位后,是无法通过硬件找到main函数的入口地址的,都是从地址0x0000 0000 启动,所以设置启动的目的,就是找到main函数的入口地址。
BOOT0以及BOOT1(有的stm32型号有此引脚)决定了不同的启动地址或者说是启动模式,设置错了,stm32找不到正确的程序入口地址,自然就跑不起来。

3. STM32的启动模式

STM32的启动模式有三种:分别从主闪存存储器、内置SRAM和系统存储器启动。对于STM32F0xx,启动模式由BOOT0引脚以及BOOT配置位决定。
在这里插入图片描述
1)主闪存存储器启动
启动从主flash开始,地址为0x0800 0000。
用SWD/JTAG下载程序时,就是下载在主flash里面。烧录成功重启stm32后,程序从此地址启动,所以一般将boot0拉低。

2) 内置SRAM启动
启动从内置SRAM开始,地址为0x2000 0000。
SRAM由于没法保存数据,主要是用来调试的区域。

3) 系统存储器启动
由系统决定启动地址,不同的stm32型号对应的地址不同,STM32F03x对应0x1FFF EC00 。
系统存储区在芯片出厂时,厂家设置了bootloader区,此区域是ROM区无法被修改,启动程序由厂家设置。

在常规应用时,建议在硬件上将boot0直接拉低,方便下载程序。

参考资料
《rm0091-stm32f0x1stm32f0x2stm32f0x8-advanced armbased-32bit-mcus-stmicroelectronics》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值