精华内容
下载资源
问答
  • 目录一、什么是 Boot 模式二、实例验证三、总结四、参考资料 ...在 STM32 的板子上,可以看到有 BOOT0 、BOOT1 这两个管脚,刚买的板子,用短路帽将 BOOT0、BOOT1都接地的,也就是 BOOT0 和 BOOT1 的

    说明 STM32 的三种 Boot 模式的差异,并在之前第11-12周“C语言各种变量的存储地址”作业代码基础上,研究至少两种boot模式下,代码下载(烧录)运行后所在的地址位置,与理论对比验证

    一、什么是 Boot 模式

    问题一:STM32 的 BOOT 管脚有啥用?

    • 在 STM32 的板子上,可以看到有 BOOT0 、BOOT1 这两个管脚,刚买的板子,用短路帽将 BOOT0、BOOT1都接地的,也就是 BOOT0 和 BOOT1 的电平都置为 0,用短路帽将 BOOT 连到 3V3 即可置 1。
      在这里插入图片描述
    • BOOT 拥有三种启动模式,如下图所示:
      在这里插入图片描述
    • 所以说,平时呢我们都是默认使用的是主闪存存储器
    • 所以说,将 BOOT 接不通的电平,可以选择不同的启动模式。
    • 这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。

    问题二:这三种启动模式是什么意思?

    • 先来说一说 STM32 启动的过程。
    • 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK(系统时钟)的第 4 个上升沿,BOOT 引脚的值将被锁存,也就是将两个 BOOT 的电平值( 0 或 1)存储起来。
    • 用户可以通过设置 BOOT1 和 BOOT0 引脚的状态,来选择在复位后的启动模式。

    主闪存存储器:

    • 是 STM32 内置的 Flash,一般我们使用 JTAG 或者 SWD 模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

    系统存储器

    • 从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。
    • 系统存储器是芯片内部一块特定的区域,STM32 在出厂时,由 ST 在这个区域内部预置了一段 BootLoader, 也就是我们常说的 ISP 程序, 这是一块ROM,出厂后无法修改。
    • 一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的 BootLoader 中,提供了串口下载程序的固件,可以通过这个 BootLoader 将程序下载到系统的 Flash 中。但是这个下载方式需要以下步骤:
      • Step1:将 BOOT0 设置为 1,BOOT1 设置为 0,然后按下复位键,这样才能从系统存储器启动 BootLoader
      • Step2:最后在 BootLoader 的帮助下,通过串口下载程序到 Flash 中
      • Step3:程序下载完成后,又有需要将 BOOT0 设置为 GND,手动复位,这样,STM32 才可以从 Flash 中启动可以看到。
    • 利用串口下载程序还是比较的麻烦, 需要跳帽跳来跳去的,非常的不注重用户体验。

    内置 SRAM

    • 内置 SRAM,既然是 SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。
    • 假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个 Flash,比较的费时,可以考虑从这个模式启动代码(也就是 STM32 的内存中),用于快速的程序调试,等程序调试完成后,在将程序下载到 SRAM 中。

    问题三:这三种模式的本质区别是什么?

    BOOT1BOOT0描述
    x0从用户闪存启动,这是正常的工作模式
    01从系统存储器启动,这种模式启动的程序功能由厂家设置
    11从内置SRAM 启动,这种模式可以用于调试

    特别注意:
    1、一般不使用内置 SRAM 启动(BOOT1=1 BOOT0=1),因为 SRAM 掉电后数据就丢失。
    2、多数情况下 SRAM 只是在调试时使用,也可以做其他一些用途。如做故障的局部诊断,写一段小程序加载到 SRAM 中诊断板上的其他电路,或用此方法读写板上的 Flash 或 EEPROM 等。
    3、还可以通过这种方法解除内部 Flash 的读写保护,当然解除读写保护的同时 Flash 的内容也被自动清除,以防止恶意的软件拷贝。

    问题四:三种模式的存储地址在哪?

    • 主闪存存储器——访问地址为 0x 0000 0000 或 0x 0800 0000
    • 系统存储器——访问地址为 0x 0000 0000 或 0x 1FF0 0000
    • 内置SRAM——启动时地址为 0x 0000 0000 或 0x 2000 0000

    二、实例验证

    • 这里代码实例使用的是我另一篇博客的代码:探究 STM32 内存分区方式
    • 下面只探究主闪存存储器和系统存储器这两个部分。
    • 首先将串口调试助手一直打开

    主闪存存储器:

    • 首先置 BOOT1、BOOT0 均为 0 ,再烧录程序.
    • 串口调试助手马上有了显示结果,如下:
      在这里插入图片描述
    • 主闪存存储器的访问地址是从 0x 0800 0000 开始的,最小的地址都没有低于 0x 0800 0000

    系统存储器:

    • 首先置 BOOT1 为 0 、BOOT0 为 1,再烧录程序(更改一丢丢程序内容)。
    • 烧录完后,串口调试助手没有反应。
    • 这时再置 BOOT1 为 0、BOOT0 为 0,并按 RESET 复位键.
    • 串口调试助手有了显示结果,如下:
      在这里插入图片描述
    • 显示结果的地址相同。

    问题:为什么烧录程序的过程会有些许不同呢?

    现象——

    • 主闪存存储器——烧录程序后立马就显示数据;
    • 系统存储器——烧录程序后,需置 BOOT0 为 0,然后按复位显示数据;

    原因——

    • 主闪存存储器——hex 文件直接储存到 Flash 上,烧录后,程序直接就运行了,开发板和上位机就直接可以进行通信;
    • 系统存储器——将 BOOT0 设置为 1,BOOT1 设置为 0,然后按下复位键,这样才能从系统存储器启动 BootLoader,在 BootLoader 的帮助下,通过串口下载程序到 Flash 中,程序下载完成后,又有需要将 BOOT0 设置为 GND,手动复位,这样,STM32 才可以从 Flash 中启动可以看到(也就是上面的三个步骤)。

    三、总结

    • STM32 的三种启动模式最常用还是第一个(主闪存存储器),方便用于下载程序并与上位机通讯,不需要自己手动更改 BOOT 的值,而第三种(内存 SRAM)不怎么常用,可以说基本上没用到,这里就没做介绍了。

    四、参考资料

    1、浅谈STM32的三种Boot模式
    2、STM32 BOOT模式配置以及作用
    3、STM32 的三种不同启动模式

    展开全文
  • STM32的三种Boot模式一、三种BOOT模式介绍1、用户闪存存储器(Main Flash memory)2、SRAM存储器(Embedded Memory)3、系统存储器(System memory)二、实例验证(一)用 DAP 仿真器下载程序(二)用串口下载程序(三...

    一、三种BOOT模式介绍

      STM32的启动方式一般以存储器的类型来区分,如内部 FLASH 启动方式、内部SRAM 启动方式以及系统存储器启动方式。

    1、用户闪存存储器(Main Flash memory)

      内部 FLASH 启动方式也叫用户闪存方式,是STM32内置的Flash,一般我们使用JTAG或者SWD模式烧录程序时,就是下载到这个里面,重启后也直接从这启动程序。

      当芯片上电后采样到 BOOT0 引脚为低电平时, 0x00000000 和 0x00000004 地址被映射到内部 FLASH 的首地址 0x08000000 和 0x08000004。因此,内核离开复位状态后,读取内部 FLASH 的 0x08000000 地址空间存储的内容,赋值给栈指针 MSP,作为栈顶地址,再读取内部 FLASH 的 0x08000004 地址空间存储的内容,赋值给程序指PC,作为将要执行的第一条指令所在的地址。具备这两个条件后,内核就可以开始从 PC指向的地址中读取指令执行了。

    2、SRAM存储器(Embedded Memory)

      内置SRAM,没有程序存储的能力,这个模式一般用于程序调试。当修改代码中一个小小的地方,需要重新擦除整个Flash,比较费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,在将程序下载到SRAM中。

      当芯片上电后采样到 BOOT0 和 BOOT1 引脚均为高电平时,0x00000000和 0x00000004 地址被映射到内部 SRAM 的首地址 0x20000000 和 0x20000004,内核从SRAM 空间获取内容进行自举。

      在实际应用中,由启动文件 starttup_stm32f10x.s 决定了 0x00000000 和 0x00000004地址存储什么内容,链接时,由分散加载文件(sct)决定这些内容的绝对地址,即分配到内部 FLASH 还是内部 SRAM。

    3、系统存储器(System memory)

      从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:

    Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader

    Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中

    Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦, 需要跳帽跳来跳去的,非常的不注重用户体验。

    二、实例验证

    (一)用 DAP 仿真器下载程序

    1、使用DAP仿真器与指南者开发板连接好接入电脑

    2、打开博客:C/C++程序内存的各种变量存储区域及验证.使用的工程文件(USART1接发)
    在这里插入图片描述
    3、编译无误后进行配置,打开魔术棒
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    4、配置好后,烧录程序
    在这里插入图片描述
    烧录完成
    在这里插入图片描述
    5、查看程序运行结果
    在这里插入图片描述

    (二)用串口下载程序

    1、安装 USB 转串口驱动
    1)打开指南者资料找到USB转串口驱动CH340,点击安装
    在这里插入图片描述
    2)检查是否安装成功
    在这里插入图片描述
    2、用USB 线连接电脑和开发板的 USB 转串口接口,给开发板上电。(不用连接DAP)
    3、开发板的BOOT0和BOOT1接地,RXD和TXD分别接PA9和PA10,如下图
    在这里插入图片描述
    4、开始下载
    1)打开 mcuisp 软件,配置如下:
    ①搜索串口,设置波特率 115200(尽量不要设置的太高)
    ②选择要下载的 HEX 文件(就是刚刚的工程文件生成的HEX文件)
    ③校验、编程后执行
    ④DTR 低电平复位,RTS 高电平进入 bootloader
    ⑤开始编程。如果出现一直连接的情况,按一下开发板的复位键即可。
    在这里插入图片描述
    在这里插入图片描述
    5、下载成功
    在这里插入图片描述
    6、查看结果
    在这里插入图片描述

    (三)总结

      用 DAP 仿真器下载程序采用了内部 FLASH 启动方式,打开串口之后,开发板和上位机直接就可以直接进行通信。
      用串口下载程序是采用了系统存储器启动方式,打开串口后,需要按一下复位键,才能够通信。

    总结

    以上就是STM32的三种BOOT模式介绍和其中内部 FLASH 启动方式(用户闪存存储器)、系统存储器启动方式的实例演示验证。

    参考:

    1、《零死角玩转STM32——F103指南者》
    2、STM32三种BOOT模式介绍.

    展开全文
  • 通常,我们的程序就放在FLASH,bootROM跳转到0x80000后,这个位置要有个跳转指令,做应用程序和boot ROM退出后的衔接处理。对应的就是F2837xD_CodeStartBranch.asm文件中的跳转函数: code_start: .if WD_DISABLE ...

    TI对应的器件文档说的很清楚,如上文所示:

    对于每一个被选定的boot ROM程序,运行结束跳转的时候,一定是跳转到0x00,或者0x80000这两个位置。

    通常,我们的程序就放在FLASH,bootROM跳转到0x80000后,这个位置要有个跳转指令,做应用程序和boot ROM退出后的衔接处理。对应的就是F2837xD_CodeStartBranch.asm文件中的跳转函数:

    code_start:
        .if WD_DISABLE == 1
            LB wd_disable       ;Branch to watchdog disable code
        .else
            LB _c_int00         ;Branch to start of boot._asm in RTS library
        .endif

    上面这个code-start段,被指定到了BEGIN区

    而   BEGIN            : origin = 0x080000, length = 0x000002

    也就是说,LB _c_int00  被安放在0x080000开始的两个字中了,

    从bootROM退出后,执行这条跳转函数,在_c_int00中,有对main函数的引用。

    至于面函数所在的主程序,存放在上面地方在这里不用关心,在CMD问价那种已经指定好了,这总指定就是对各种段的指定。

     

    展开全文
  • 启动模式,BOOT0和BOOT1详解

    千次阅读 2021-02-04 19:32:59
    在画STM32的电路图的时候,关于STM32的启动方式纠结了一下,现有的参考设计都是在STM32的启动选择引脚BOOT0和BOOT1上使用了跳帽,用以人工选择STM32的启动方式,但是在实际应用中这种设计就显得冗余,所以这里顺带...

    在画STM32的电路图的时候,关于STM32的启动方式纠结了一下,现有的参考设计都是在STM32的启动选择引脚BOOT0和BOOT1上使用了跳帽,用以人工选择STM32的启动方式,但是在实际应用中这种设计就显得冗余,所以这里顺带研究了一下STM32的启动方式。


    原文链接:https://blog.csdn.net/c12345423/article/details/52809527

    STM32一共有三种启动模式,在ST官网上下载的RM0008中,我找到了启动相关的配置说明:

            对应的中文翻译如下:

             所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

    STM32三种启动模式对应的存储介质均是芯片内置的,它们是:
    1)用户闪存 = 芯片内置的Flash。
    2)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。
    3)SRAM = 芯片内置的RAM区,就是内存啦。
     
    在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执
    行程序,见下表:
    BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。
    BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置。
    BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试。
     

     原文链接:STM32启动BOOT0 BOOT1设置方法 - zgc261 - 博客园

    BOOT0BOOT1启动模式
    0XUser Flash memory(从用户闪存存储器启动)
    10System memory(从系统存储器启动)
    11Embedded 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),重新上电,一切正常,问题解决。

    •   Main Flash memory( BOOT0=0 BOOT1=x )

    是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

    •   System memory( BOOT0=1 BOOT1=0 )

    从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。

    系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。

    一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:

    Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader

    Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中

    Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动

          可以看到,利用串口下载程序还是比较的麻烦,需要跳帽跳来跳去的,非常的不注重用户体验。

    •   Embedded Memory( BOOT0=1 BOOT1=1 )

    内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试

    假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,再将程序下载到Flash中。

     原文链接:STM32 BOOT0 & BOOT1启动方式_taita_新浪博客
            要注意的是,一般不使用内置SRAM启动(BOOT1=1 BOOT0=1),因为SRAM掉电后数据就丢失。多数情况下SRAM只是在调试时使用,也可以做其他一些用途。如做故障的局部诊断,写一段小程序加载到SRAM中诊断板上的其他电路,或用此方法读写板上的Flash或EEPROM等。还可以通过这种方法解除内部Flash的读写保护,当然解除读写保护的同时Flash的内容也被自动清除,以防止恶意的软件拷贝。

    一般BOOT0和BOOT1跳线都跳到0(地)。只是在ISP下载的情况下,BOOT0=1,BOOT1=0 ,下载完成后,把BOOT0的跳线接回0,也 即BOOT0=0,BOOT1=0 。

    芯片无法启动运行?

    插曲:笔者曾经做过一个项目,拿到一块别人的板子和程序来修改,后来做了块板子,烧录程序后发现:烧录后通过烧录工具的“烧录后运行”选项可以正常跑起来,但一旦使程序从FLASH开始运行,则跑不了了。后来发现 别人板子上的MCU是烧录过boot的,而自己做的板子是没有烧录boot的,前者程序从0x8003000开始运行,后者程序实际从0x8000000开始运行,把0x8003000处开始运行的程序烧到0x8000000的板子上的结果就是:复位向量地址不正确,导致芯片无法启动 因为0x8003000的程序把中断向量表搬到了0x8003000处。
    这里转载正点原子的分析:

    STM32 <wbr>BOOT0 <wbr>& <wbr>BOOT1启动方式


     

    STM32的内部闪存(FLASH)地址起始于0x08000000,一般情况下,程序文件就从此地

    址开始写入。此外STM32是基于Cortex-M3内核的微控制器,其内部通过一张“中断向量表”

    来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成

    启动,而这张“中断向量表”的起始地址是0x08000004(0x8003000的程序中,中断向量表的地址是0x8003000),当中断来临,STM32的内部硬件机

    制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断

    服务程序。 

     在图53.1.1中,STM32在复位后,先从0X08000004地址取出复位中断向量的地址,并跳

    转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到我们的

    main函数,如图标号②所示;而我们的main函数一般都是一个死循环,在main函数执行过程

    中,如果收到中断请求(发生重中断),此时STM32强制将PC指针指回中断向量表处,如图

    标号③所示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服

    务程序以后,程序再次返回main函数执行,如图标号⑤所示。

    综上所述,在我的设计中,我将BOOT0和BOOT1通过一个100k的下拉电阻,直接接地。10k可以:stm32的 Boot0 Boot1大家都怎么接,悬空可以吗? (amobbs.com 阿莫电子论坛)

    MCU中,Boot启动方式的作用
           从官方的Datasheet上可以看到,对Boot模式的描述,如下图


           从Datasheet上可以看出,该MCU支持三种Boot Mode:


    注:一般来说,只用前两种模式,而SRAM模式几乎不同;所以在设计Boot电路时,只需要注意BOOT0的逻辑即可。

    1. 从主闪存存储器启动
           使用JTAG或者SWD烧录程序时的正常模式,程序直接下载到内部 FLASH 中;程序必须在该模式下才能正常工作!!!
    2.从系统存储器启动
           从此ROM启动,即通过usb下载程序;在此ROM里面,一般厂家出厂芯片的时候会在里面烧录一个Bootloader跳转代码(其作用是,将通过USB下载的程序,跳转到Main Flash里面执行),有些开发板就集成了USB一键下载电路。
                  a.正点原子的usb一键下载电路

    在这里插入图片描述

    逻辑分析:
           由上图可知,要下载程序,需控制的一个引脚是BOOT0。再观一键下载电路的原理图,还有一个引脚RESET。 So 如何实现一键下载呢?

                                          划重点啦!!!!
    STM32 串口下载到运行必不可少的 3个步骤:
    1. 把 BOOT0 拉高(保持 BOOT1 接入GND);
    2. 手动复位按键进行复位;
    3. 把 BOOT0 接入GND,然后再一次复位。

           由正点原子提供的一键下载电路的原理图可以看出和stm32这两个引脚最有关联的是CH340的DTR#和RTS# 输出引脚。没错,我们就是用一键下载软件通过控制这两个引脚的高低电平,从而控制BOOT0和RESET,进而改变启动模式。(D8是为了防止三极管集电极的VCC3.3会影响到正常的复位。 其实就是利用二极管的单向导通性,尽可能保留)

           a.一开始,MCUISP先让DTR#输出高电平,RTS#输出低电平,满足NPN管正向导通条件,Q2导通后,RESET变为0;再看Q3,也满足导通条件,故BOOT0输出高电平(即此时BOOT0 BOOT1为1 0) ,则进入启动串口下载模式。
           b.下载完程序之后,软件拉高RTS#,DTR#之后再拉低。此时,Q2不导通,RESET输出高电平,BOOT0输出低电平。启动模式变为Flash启动,即用户闪存。

    第1步只是存储了程序,第2步是让程序加载运行。
     

    展开全文
  • STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的Flash。2)SRAM = 芯片内置的RAM区,就是内存啦。3)系统存储器 =芯片内部一...在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两...
  • springboot中使用工厂模式工厂类接口类接口实现类controller类 工厂类 @Service public class TestFactory { /** * 初始化时可以自动将TestInterface加入到map中, * key为实现TestInterface类@Component(...
  • STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的Flash。2)SRAM = 芯片内置的RAM区,就是内存啦。3)系统存储器 = 芯片内部一块...在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,...
  • 可是这个下载方式须要下面步骤: Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才干从系统存储器启动BootLoader Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中 Step3:程序下载完毕后,又...
  • STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存=芯片内置的Flash。2)SRAM=芯片内置的RAM区,就是内存啦。...在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯...
  • STM32单片机的BOOT0和BOOT1应用原理STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存=芯片内置的Flash。2)SRAM=芯片内置的RAM区,就是内存啦。3)系统存储器=芯片内部一块特定的区域,芯片出厂时...
  • 关于STM32单片机的两引脚BOOT0和BOOT1的详细说明STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存=芯片内置的Flash。2)SRAM=芯片内置的RAM区,就是内存啦。3)系统存储器=芯片内部一块特定的区域...
  • 于美国时间6月24日发布Spring Boot 2.5.2版本,此版本包括53 个错误修复、文档改进和依赖项升级。 二、更新内容 2.1 bug修复 在没有类加载器的情况下调用实例化器#27074 EnvironmentPostProcessors 未使用正确的 ...
  • imx6ull boot 启动

    2021-09-07 15:14:15
    1.启动方式 ...During boot, the core’s behavior is defined by the boot mode pin settings,When waking up from the low-power boot mode, the core skips the clock settings. The boot ROM checks
  • STM32的BOOT概述

    2020-12-30 07:07:29
    STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的Flash。2)SRAM = 芯片内置的RAM区,就是内存啦。3)系统存储器 = 芯片内部一块...在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这...
  • 功能:在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。BOOT1=0 BOOT0=1 ...
  • 1、查看分区表# ls -la dev/block/platform/soc.0/7824900.sdhci/by-nameboot分区如下 2、将需要替换的boot文件拷贝到系统中(如/storage/updateimage中)执行#dd if=boot.img of=/dev/block/mmcblk0p20; sync3、或者...
  • Spring Boot - 构建数据访问层

    千次阅读 2021-05-16 15:48:10
    文章目录基础规范: JDBC 关系型数据库访问规范JDBC 规范中的...我们将进入 Spring Boot 另一个核心技术体系的讨论,即数据访问技术体系。无论是互联网应用还是传统软件,对于任何一个系统而言,数据的存储和访问都是不
  • ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) all: $(ALL) $(obj)u-boot.hex: $(obj)u-boot $(OBJCOPY) ${OBJCFLAGS}-O ihex $<$@ $(obj)u-boot.srec: $(obj)u-boot $(OBJCOPY) ${...
  • 一、创建单个对象 1、在springboot中可以管理单个对象可以直接使用spring框架中注解形式创建。 @Component 通用的对象创建注解 --------> @Controller 用来创建控制器对象 --------> @Service 用来创建业务层...
  • spring boot集成quartz scheduler

    千次阅读 2021-11-27 13:28:43
    spring-boot:2.5.6(事例使用,可根据自己版本调整) maven:3.6.3 依赖jar <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</...
  • Spring Boot Starter Spring Boot 大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot 提供的starter来完成的。 starter介绍 springboot在配置上相比spring要简单许多,其核心在于spring-boot-starter...
  • 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执 行程序,见下表: BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模
  • boot0是什么?

    2021-09-13 10:34:26
    boot0是什么?1. 杂谈 1. 杂谈 最近感觉越来越口吃了,知道自己不会表达,但在熟人面前至少能侃侃而谈,现在在熟人面前也说不出话来,真让我苦恼,我觉得人还是不要给自己负面暗示,否则长此以往自己真的就不行了,...
  • 文章目录演示工具版本项目结构Maven 依赖使用 Lettuce 配置使用 Jedis 配置ListOperationsSetOperationsHashOperationsStringRedisTemplateRedisTemplateSpring Boot Main 类运行应用程序参考文献源码下载 ...
  • 目录一、自举配置二、自举模式各简述1、Main Flash memory(BOOT1=x BOOT0=0)2、System memory(BOOT1=0 BOOT0=1)3、Embedded Memory(BOOT1=1 BOOT0=1)4、总结扩展:ISP、ICP、ICSP、IAP编程方式1、ISP(In-...
  • STM32的三种BOOT模式

    千次阅读 2020-12-30 00:48:16
    文章目录一、三种BOOT模式的对比1、内部 FLASH 启动方式2、内部 SRAM 启动方式3、系统存储器启动方式二、BOOT模式下代码运行后所在地址分析1、从内部 FLASH 启动2、从内部 SRAM 启动2.1 配置中断向量表2.2 修改FLASH...
  • Spring Boot 2.3 版本变化 大家好,我是烤鸭: ​ 最近在把低版本的springboot项目升级,正好翻译了下springboot 2.1-2.3 版本的更新日志。 ​ Github 原文:...
  • spring boot 自动装配

    2021-02-05 11:01:38
    spring boot 自动装配 Spring Boot的很多特性都是基于spring framework来实现的,例如我们熟知的特性,也是它的核心特性:组件自动装配。它能够根据依赖的jar包自动配置Spring Boot的应用,例如: 如果类路径中存在...
  • boot-starter-web org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-maven-plugin 总结: 利用策略模式可以简化复杂的if ...
  • Spring Boot Maven Plugin打包解析一. 简介二. Spring Boot Maven Plugin的引用三. Spring Boot Maven Plugin的使用1. 继承 Starter Parent POM2. 在没有 Starter Parent POM 的情况下使用 Spring Boot3. 在命令行上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,559
精华内容 17,423
关键字:

厂boot