zoukankan      html  css  js  c++  java
  • STM32启动BOOT0 BOOT1设置方法

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

    BOOT0 BOOT1 启动模式
    0 X User Flash memory(从用户闪存存储器启动)
    1 0 System memory(从系统存储器启动)
    1 1 Embedded SRAM(从内嵌SRAM启动)

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

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

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

    (1) Boot0设置为0后,代码将从主Flash当中启动,就我们目前所编程的地方启动,只要程序正常,上电之后都是可以正常工作。这一般作为ISP 程序下载仿真烧写。一般正常批量生产的时候,我们也是推荐客户默认按照这样的方式去操作,上电之后,机器会自动运行。 

    (2) Boot0设置为1,Boot1设置为0,代码将从ROM区启动,这上电启动都会运行Bootloader,在此过程中可以实现IAP程序更新,这一般是通过USART 进行更新,此时如果USART或者是SPI端口没有接收到数据信号,那么MCU将会一直程序等待下去,不会自动跳到FLash主代码区。所以一般这作为个体产品 

    想实现代码更新的工作。这需要你那边是否要考虑以后产品升级,如若升级,可以在Boot0引脚接入一个拔码开关实现对Boot0电平的控制,从而可以实现 IAP更新功能。 

    (3)Boot0以及Boot1都是为1的时候,那么此时程序将从RAM当中启动,程序会直接下载到RAM当中,这一般作为调试来用,因为有的时候代码不是很大,由于 RAM下载代码速度很快,对于一些调试而言是非常有好处的,断电不会保存数据,这一点需要注意。

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

    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),重新上电,一切正常,问题解决。
  • 相关阅读:
    第二篇:如何在IIS上启用HTTP压缩
    This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its 错误解决办法
    linux字符集查看与设置
    MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
    SELinux状态修改
    zabbix server is not running解决办法
    mysql存储过程之事务篇
    mysql时间相减的问题
    MySql存储过程及MySql常用流程控制语法
    shell 字符串处理汇总(查找,替换等等)
  • 原文地址:https://www.cnblogs.com/zitech/p/4988268.html
Copyright © 2011-2022 走看看