不同的下载方式对应STM32启动方式也不同,如下图是STM32三种启动方式:
● 第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦出10万次,所以不用担心芯片哪天会被擦爆!
● 第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。
● 第三种启动方式是STM32内嵌的SRAM启动。该模式用于调试。
在使用开发板时不小心下载了个有问题的程序,然后就悲剧了。无法往芯片中烧写程序了。每次想下载程序都会弹出如下的两个错误对话框:
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 BOOT0 BOOT1 设置方法
引用地址:
STM32启动BOOT0 BOOT1设置方法
推荐阅读最新更新时间:2024-03-16 15:36
在STM32单片机中使用SPI通信的方法
在本教程中,我们将使用 STM32F103C8 的 Blue Pill 板替换一个 Arduino 板,并将使用 SPI 总线与 Arduino 板进行通信。在这个STM32 SPI 示例中,我们将使用Arduino UNO作为 Slave,STM32F103C8 作为 Master,两个16X2 LCD 显示器分别连接在一起。两个电位器还与STM32(PA0)和Arduino(A0)相连,通过改变电位器来确定主机到从机和从机到主机的发送值(0到255)。 STM32F103C8中的SPI 比较 Arduino 和 STM32F103C8 Blue Pill 板中的 SPI 总线,STM32 有2 条 SPI 总线
[单片机]
STM32自锁如何解锁?(解锁方法)
在芯片锁住的时候,我们首先要查看是那种错误, 正常情况下,你在Keil下载时遇到错误应该是这样的 找不到Cortex™-M内核 Flash下载失败 打开J-Link-Commander 如果是正常,则是可以找到Cortex-M3/M4内核, 如果芯片自锁之后,会发现先是JTAG方式查找,之后SWD方式查找,最后找不到任何内核 以下问题为J-LINK能找到芯片时的异常错误: BOOT脚配置问题:对于STM32往往都有些BOOT配置脚。因为BOOT脚的焊接或接触不良或者BOOT引脚没有配置正确**,导致很多问题。这种情况多表现在芯片功能时好时坏,或者部分芯片正常,部分芯片异常。 启动文件问题:经常因为选错了启动文件,导
[单片机]
STM32同时开启两个定时器,其一个定时器不能设置断点的原因
最近在编写程序的时候发现stm32单片机的定时器不同的类型其配置是不一样的。 在编程的过程中开了两个定时器,结果在调试程序的时候发现TIM6中断程序不能设置断点,就说明这段程序可能没有被运行,后来我又换了TIM1也是一样不行。 查看数据手册如下: 从stm32f030c8t6的数据手册可以看出,定时器有三个类型,分别是高级定时器,通用定时器以及基本定时器,我猜想可能是定时器的类型不一样,因此配置上面也不一样,因此我选用了TIM14作为我第二个定时器,配置和TIM3一样,这一次就成功的可以设置断点了。事实证明我的猜想是对的。
[单片机]
STM32 之四 标准外设版 USB 驱动 + MSC(Host) + Fatfs 移植
写在前面 现在,网上关于STM32的USB的文章数不胜数。写这篇文章仅仅是对于自我学习的一个记录。主要是对实际学习中遇到的一些棘手问题做个备忘录。使用的芯片为STM32F407VG 。 目前,ST的USB驱动有两套,一套是早期的独立版USB驱动,官方培训文档中称为Legacy library,最新版为2.2.0;一套为针对其Cube系列的驱动,根据芯片不同可能有区别,具体见对应芯片的Cube驱动包,官方培训文档中称为Cube library。 本文使用的为Legacy libraryUSB驱动。更详细的请参考博文STM32 之 USB IP(USB模块) 详解。 HAL库 + Legacy library USB库两个混用 目前,
[单片机]
STM32开发板的TIM3开启和关闭
关闭定时器中断要考虑好多情况 1)关闭定时器时,定时器是否在处在工作状态 2)关闭定时器时,定时器是否正好进入中断,造成关闭程序出现断层,进而无法实现完整关闭程序,此时可以使用高一级别的外部中断强制进入外部中断服务函数进行关闭程序 3)关闭定时器时,关闭定时器的程序是否在定时器服务函数里面?还是在总函数里面?还是在外部中断服务函数里面?是需要考量的? 4)关闭定时器时,定时器的中断触发时间是否太紧凑?定时器的中断总次数是否太小?都会影响关闭定时器程序运行的连续性。 以下为关闭程序: 首先打开时钟,然后才能进行关闭操作。 RCC- APB1ENR|=1 1; //TIM3时钟使能 TIM3- ARR=arr; //设定计数器自
[单片机]
stm32实际运用中遇到的问题
1.不要太相信stm32内部的IO上下拉,必要的话,在外部接上下拉电阻。 2.当把JTAG的IO口当成普通IO口来使用时,要先禁止JTAG。 即:要使用到PB3、PB4、PA13、PA14、PA15时,要先禁止JTAG。 在库函数中,调用一下函数: GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关闭jtag,保留swd 在寄存器编程中,用: //JTAG模式设置,用于设置JTAG的模式 //mode:jtag,swd模式设置;00,全使能;01,使能SWD;10,全关闭; //#define JTAG_SWD_DISABLE
[单片机]
STM32系统嘀嗒时基定时器应用
测试条件:STM32F103VET6开发板 #include stm32f10x.h void Delay_Nms(unsigned int n) { SysTick- LOAD=9000*n;//装入初始值,定时时间为1/(72M/8) *9000 s SysTick- CTRL=0x00000001; //设置始终源为系统始终八分频,并打开定时器 while(!(SysTick- CTRL&0x00010000));//等待递减计数器减到0 SysTick- CTRL=0x00000000;//关闭定时器 } int main(void) { SystemInit();//配置系统时钟 RCC
[单片机]
STM32学习笔记之电容触摸1
电容触摸简介 8.1.1 电容触摸概述 随着科技的发展,传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为不存在机械接触,占用空间少,以前的机械按键在设计外壳的时候需要考虑尺寸,现在换成电容按键后这个问题不再需要考虑。 8.1.2 检测原理 常规的检测方式一般是通过计算电容放电时间来判断是否有手指按下,这是因为手指会与线路板的铜箔接触面上产生电容效应,当手指没有放在铜箔上的时候,铜箔与PCB之间存在杂散电容,这两个状态的电容值差别很大,检测原理如下图所示。 在检测之前首先用开关将电容Cs里面的电荷
[单片机]