stm32 boot启动经验

发布者:才富五车330最新更新时间:2017-10-02 来源: eefocus关键字:stm32  boot  启动经验 手机看文章 扫描二维码
随时随地手机看文章

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

1)用户闪存 = 芯片内置的Flash。 

2)SRAM = 芯片内置的RAM区,就是内存啦。

3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。    

在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执 行程序



不同的下载方式对应STM32启动方式也不同,如下图是STM32三种启动方式:

    ● 第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦出10万次,所以不用担心芯片哪天会被擦爆!

    ● 第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。

    ● 第三种启动方式是STM32内嵌的SRAM启动。该模式用于调试。


在系统上电的时候,cpu首先根据这两个脚来确定是哪种模式的启动,然后就是把相应模式的起始地址映射到0地址处,并从0地址处开始执行。在芯片出厂时,ST烧写了一个bootloader到rom中,也就是system memory。这个bootloader的主要任务就是通过uart1下载程序到内置flash中去。工作流程如下:

system memory boot模式,在执行完成它的任务之后是必须要退出的。这个退出方式是通过一次硬件reset来实现的。在reset的时候,必须要配置BOOT[1:0]这两个脚以使cpu在重启之后进入适当的模式。要注意的是,一般不使用内置SRAM启动(BOOT1=1 BOOT0=1),因为SRAM掉电后数据就丢失。多数情况下SRAM只是在调试时使用,也可以做其他一些用途。如做故障的局部诊断,写一段小程序加载到SRAM中诊断板上的其他电路,或用此方法读写板上的Flash或EEPROM等。还可以通过这种方法解除内部Flash的读写保护,当然解除读写保护的同时Flash的内容也被自动清除,以防止恶意的软件拷贝。一般BOOT0和BOOT1跳线都跳到0( 地)1)  Bootloader是在System Memory,这个区域必须通过设置Boot1和Boot0引脚才能启动,正常工作状态下,这部分区域是被隔离开的,自动被绕开,Bootloader绝对不占用任何用户程序的资源。简单地说:当你要使用ISP烧写数据到Flash时,需要设置Boot1和Boot0启动System Memory中的Bootloader;烧写完成后,再重新设置Boot1和Boot0启动Flash中你自己的程序,进入正常操作。2)STM32中的Bootloader使用USART1做为通信端口,它使用8个数据位、1个停止位和偶校验,具有自动波特率检测功能。



在使用开发板时不小心下载了个有问题的程序,然后就悲剧了。无法往芯片中烧写程序了。每次想下载程序都会弹出如下的两个错误对话框:


J-Link和STM32 芯片都不大可能就这么坏掉了。多半是烧写进去的软件有些问题,占用了相应的IO 管腿,导致无法利用J-Link与之通讯。那就想办法不让这个错误的程序运行了。例如下述代码如果烧写进去的话就会造成J-Link下次不能正常连接:


GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);


上述代码表示取消JTAG引脚功能,开始SWD引脚功能。


STM32 中是自带了BootLoader的,切换进BootLoader 中就可以了。具体的方法就是通过BOOT1、BOOT0两个跳线来选择启动模式。修改跳线将启动模式切换为上述的第二种方式:BOOT0=1,BOOT1=0。

断电,改跳线,重新上电,进入第二种方式:BOOT0=1,BOOT1=0,即STM32的BootLoader 模式。此时J-Link可以正常工作了,用J-Link 下载新的程序,下载成功。再断电,把跳线改回来第一种启动方式(BOOT0=0,BOOT1=0),重新上电,一切正常,问题解决。


关键字:stm32  boot  启动经验 引用地址:stm32 boot启动经验

上一篇:STM32的8种GPIO模式理解
下一篇:STM32F103X 通用定时器2~5 的输入捕获边沿选择

推荐阅读最新更新时间:2024-03-16 15:39

利用ST-LINK配合ST-LINK Utility 将bin文件下载到STM32的FLASH中
背景 项目需求,要把字模文件导入到32中FLASH的指定地址,使用了ST-LINK V2 连接单片机和计算机,然后通过ST-LINK Utility 软件的配合将弄好的字模bin文件导入到FLASH指定地址。下面记录一下整个过程: 1.连接ST-LINK V2与单片机 博主的只需要连接4个线即可: VDD GND SWCLK SWDIO 2.配置工程 然后打开工程,进行配置,选择ST-Link Debugger 然后查看是否检测到ST-Link(选择SW) 如果你的可以显示如图内容,那么就成功连接了。 3.配置ST-LINK Utility 打开软件后的界面如示: 点击蓝色的球,打开设置界面,设置Por
[单片机]
利用ST-LINK配合ST-LINK Utility 将bin文件下载到<font color='red'>STM32</font>的FLASH中
STM32基础知识:中断系统
中断系统 1 数据传输方式 无条件传输 :处理器不必了解外部设备状态,直接进行数据传输,用于指示灯和按键等简单设备.。 查询方式 :传输前,一方先查询另一方的状态,若已经准备好就传输,否则就继续查询。 中断方式 :一方通过申请中断的方式与另一方进行数据传输,收发双方可以并行工作。 直接存储器访问 :处理器内部建立片内外设和内存之间的数据传输通道,传输过程不需要处理器参与。 2 中断系统的基本概念 2.1 中断全过程 中断发生: 当CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理。 中断处理: CPU暂停当前的工作,转去处理事件B。 中断返回: 当CPU将事件B处理完毕后,再回到事件A中被暂停的地方继
[单片机]
<font color='red'>STM32</font>基础知识:中断系统
一文解析STM32内存管理和堆栈的认知与理解
  本文主要介绍了STM32内存管理和堆栈的认知与理解,首先介绍的是内存管理的实现原理及分配、释放原理,其次介绍了stm32的存储器结构,最后阐述了堆栈的认知与理解,具体的跟随小编一起来了解一下吧。   STM32内存管理详解   内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,他们其实最终都是要实现 2 个函数: malloc 和 free; malloc 函数用于内存申请, free 函数用于内存释放。   内存管理的实现原理      从上图可以看出,分块式内存管理由内存池和内存管理表两部分组成。内存
[单片机]
一文解析<font color='red'>STM32</font>内存管理和堆栈的认知与理解
stm32外设初始化和设置过程
1.主应用文件中声明PPP_InitTypeDef结构体变量。 例:GPIO_InitTypeDef GPIO_InitStructure; 2.为定义的结构体变量设置需要的值。 设置变量中所有的值:PPP_InitStructure.member1 = value1;PPP_InitStructure.member2 = value2;... OR: 定义时直接赋值:PPP_InitTypeDef PPP_InitStructure = {value1,value2,value3....}; 设置变量中部分值:PPP_StructInit(&PPP_InitStructure);//先对结构
[单片机]
STM32的EXTI小实验
stm32并没有使用Cortex-M3的全部256个中断,只用了一部分(16个内核+68个外部中断) 中断线 所有GPIO口的0号引脚对应EXTI0中断线,类似的PA1~PG1对应EXTI1中断线。 中断服务函数 中断服务函数名必须与启动文件startup_stm32F10x_hd.s的中断向量表定义一致 中断线0~4对应EXTI0_IRQHandler();EXTI1_IRQHandler();EXTI2_IRQHandler();EXTI3_IRQHandler(); 中断线5~9共用EXTI9_5_IRQHandler(); 中断线10~15共用EXTI15_10_I
[单片机]
STM32晶振不起振
1.外部晶振虚焊 2.外部晶振的电容不匹配,可能是器件盒里面混入了大容值电容 3.芯片挂了 4.STM32f103有内部晶振。刚刚上电时,所有Clock都是源于内部晶振,所以当片内没有程序或内部程序没有使能外部晶振时,外部晶振是不会起振的。 在RCC_Configuration(void)看相关设置,有没有启动外部晶振HSE. PS:如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法:  2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。  2.2)分别重映射OSC_
[单片机]
STM32 定时器的4通道计数器应用
通用定时器确实比较强悍,功能极多我也比较晕 此为在不牵扯PWM 与 DMA下像C51那样计数点灯。 当然你要配置一些IO口作为点灯用这里就不详细说了。 就如 #defineLED2_ON GPIO_ResetBits(GPIOD,GPIO_Pin_7) #define LED2_OFF GPIO_SetBits(GPIOD,GPIO_Pin_7) 这样的。 然后启用通用定时器2设置它的中断等3.0的库; //Timer2中断*// void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroup
[单片机]
STM32在程序运行过程中关闭定时器重新打开后定时器不工作的
问题:数码管显示程序放在定时TIM2中断函数里面扫描,想要实现在关闭某一功能的时候数码管不显示。 刚开始的想法是开关关闭,关闭定时器时钟;开关打开,打开定时器时钟;(但实验证明再次打开开关时定时器2却不工作:表现为数码管不显示) 解决办法: 开关关闭,关闭定时器更新中断(即TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE);) 开关再次打开,开启定时器更新中断(即TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);) 关闭中断可以达到不进入定时去中断服务函数,同样达到数码管不显示的目的。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved