0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于在Bootloader模式下的应用程序下载

STM32单片机 来源:STM32单片机 作者:STM32单片机 2022-06-16 16:57 次阅读

1.引言

STM32 MCU 在 bootloader 模式下,可以通过多种可用外设(USART、CANUSBI2C、SPI等)将程序下载到内部存储器中,详细内容可参考应用笔记 AN2606《STM32 microcontroller system memory boot mode》。本文档主要介绍利用 STLINK-V3SET 调试/编程工具的 I2C 接口将程序下载到 SDRAM 中并执行的方法。

6ec055d0-d758-11ec-bce3-dac502259ad0.png

2.问题描述

问题源自客户的实际需求,希望通过 I2C 接口将程序下载到 SRAM 中执行,进行芯片功能性测试。

3.问题分析与定位

关于在 Bootloader 模式下的应用程序下载,有多篇 LAT 可参考。例如《如何使用STM32NUCLEO 板来测试串口 Bootloader》、《一种在 IAR 中实现通过 SRAM 应用程序跳转到bootloader 的方法》等。应用程序下载到 SRAM 中,也有 LAT 可参考,如《一种在 IAR 中实现通过将程序在 SRAM 中调试的方法 》。通过调研,STLINK-V3SET 支持 I2C Bootloader 程序下载,可以实现在 bootloader 模式下的将应用程序下载到 SRAM 中。

4.问题解决

本文档以 NUCLEO-F401RE 开发板为例进行介绍。本文档介绍方法分为 3 个步骤,首先进行硬件配置与接线,使得 STM32F401RE 与 STLINK-V3SET 通过 I2C 相连,同时保证 STM32F401RE 复位后可进入 bootloader 模式;其次进行软件配置与编程,通过 IAR 可以将程序下载到 SRAM 中;最后通过 STM32CubeProgrammer 软件进行程序下载并运行。下边按三个步骤分别介绍。

4.1 硬件配置与接线

查看 AN2606 可知,通过 Boot0,Boot1 的硬件设置(Boot0 = 1,Boot1 = 0),可使 NUCLEO板上电复位后进入 bootloader 模式。STM32F401RE 的 I2C1, I2C2, I2C3 均支持 bootloader,这里选取 I2C1 接口实现在 bootloader 模式下的程序下载功能。

6ed8f716-d758-11ec-bce3-dac502259ad0.png

6f2828d6-d758-11ec-bce3-dac502259ad0.png

关于 STLINK-V3SET 与 SRM32F401RE 之间的 I2C 连接,STLINK-V3SET 模块上已提供 680 欧姆上拉电阻,已通过闭合 JP10 跳线激活。同时还需要通过 NUCLEO 板为 STLINK-V3SET 提供 3.3V 供电。参考 AN2606 中 I2C 接线方式,两者的引脚接线如下表所示:

6f464c30-d758-11ec-bce3-dac502259ad0.png

最后,用一根 USB Type A 转 Micro B 的线连接 STLINK-V3SET 和 PC,同样通过调试线给STM32 NUCLEO-F401RE 供电。

4.2 通过 IAR 将程序下载到 SRAM 中

参考另一篇实战经验:《一种在 IAR 中实现通过将程序在 SRAM 中调试的方法》,主要操作为以下 2 点。

(1)在工程的链接选项中选择 stm32f411xe_sram.icf 。

6f7d6b66-d758-11ec-bce3-dac502259ad0.png

(2)设置一下中断向量表的位置 :

6fabec66-d758-11ec-bce3-dac502259ad0.png

4.3 通过 STM32CubeProgrammer 将程序下载到 SRAM 中并运行

由于 bootloader 使用了一部分 SRAM 程序,需要修改下地址避免冲突。参考另一篇实战经验:《一种在 IAR 中实现从在 SRAM 运行的应用程序跳转到 bootloader 的方法》,对于 SRAM 中 bootloader 区域,我们从关于 bootloader 的应用笔记可以看到以下信息 :

6fc1dfee-d758-11ec-bce3-dac502259ad0.png

从红色部分我们可以看到 bootloader 使用了一部分内部 SRAM,因此我们需要在stm32f411xe_sram.icf 中修改代码运行的起始地址来避免与 Bootloader 运行时的冲突:

700e3952-d758-11ec-bce3-dac502259ad0.png

同时,需要修改下中断向量表的偏移量:

705012fa-d758-11ec-bce3-dac502259ad0.png

在应用中我们写入以下程序 ,每隔 1s 闪烁 LED 灯。

7073ad5a-d758-11ec-bce3-dac502259ad0.png

最后,通过 STM32CubeProgrammer 进行程序下载。打开 STM32CubeProgrammer(版本 2.6),在 Serial number 选择 STLINK-V3SET,相关配置如图所示。端口选择 I2C,波特率设为 400KHz,地址设为 0x39(地址为 7 位,例如 STM32F401RE I2C1 地址为 0b0111001x,则 I2C 设置的地址为 0b0111001,即 0x39,不同系列 MCU 地址可能不同,请查看 AN2606)。

709ead16-d758-11ec-bce3-dac502259ad0.png

点击 Connect 后,如果连接成功,如图所示。

70d97a90-d758-11ec-bce3-dac502259ad0.png

点击 Erasing & Programming,加载 Hex 文件,勾选 Verify programming 和 Run after programming,如下图所示。点击 Start Programming,开始程序下载。程序下载成功后,可以看到 LED2 以 1Hz 频率闪烁,同时 STM32CubeProgrammer 断开连接。若要重新连接,需要按 NUCLEO 板上的复位键,使得 MCU 进入 bootloader 模式。

70feb1b6-d758-11ec-bce3-dac502259ad0.png

小结

利用 STLINK-V3SET,通过 STM32CubeProgrammer 软件的 I2C 接口下载程序生成的 HEX 文件后,我们可以看到程序下载到 SRAM 运行之后,LED 灯每隔 1s 闪烁 1 次,应用程序下载成功。

原文标题:工程师笔记|通过 STLINK-V3SET I2C 接口将程序下载到 SRAM 中并执行的方法

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • sram
    +关注

    关注

    6

    文章

    767

    浏览量

    114693
  • STM32
    +关注

    关注

    2270

    文章

    10900

    浏览量

    356151
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1488

    浏览量

    123806
  • 应用程序
    +关注

    关注

    37

    文章

    3269

    浏览量

    57718
  • bootloader
    +关注

    关注

    2

    文章

    235

    浏览量

    45633

原文标题:工程师笔记|通过 STLINK-V3SET I2C 接口将程序下载到 SRAM 中并执行的方法

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    BootLoader通过串口下载bin文件后为什么应用程序的串口就失效了?

    BootLoader通过串口下载bin文件后为什么应用程序的串口就失效了?1、使用ZStack-CC2530-2.4.0-1.4.0版本;2、现象如下(1)应用程序编译设置项不使用Se
    发表于 03-11 14:34

    请问使用HPI下载模式应用程序镜像下载到DSP中但是应用程序不运行,是什么原因?

    请问一,使用HPI下载模式应用程序镜像下载到DSP中但是应用程序不运行,是什么原因?我已经按
    发表于 07-31 07:32

    怎么创建一个bootloader应用程序项目

    我用串口获取十六进制文件,然后写在外部闪存上。Bootloader包含从外部Flash读取并在内部闪存上进行应用程序更新的软件。Bootloader应用程序和更新工作非常完美。新要求
    发表于 09-27 14:38

    如何使用Bootloader跳转到Bootloadable应用程序

    你好,我正在尝试Bootloader和“USB HID引导加载程序”的BootloadEdvices程序。如果按SWI2,则执行引导加载程序
    发表于 12-21 15:12

    怎么从应用程序更新Bootloader

    嗨,我正在使用PIC32 MZ2048 EFH064,我有一个Bootloader位于BFM中。以及PFM中的应用固件。-第一次上电设备将处于主引导加载模式,并将下载应用固件。
    发表于 04-09 10:22

    SPC5怎么从应用程序调用bootloader

    的微控制器从闪存启动,并能够随时从应用程序调用引导加载程序。我怎样才能做到这一点?我文档中找不到关于此主题的任何信息。在此先感谢您的支持。#boot #spc5 #
    发表于 07-03 06:45

    CAN Bootloader应用程序

    我已经把CAN Bootloader程序下载到MCU中了,从上位机软件(CANTest)发送ID和data没问题(示波器也能检测到正确的数据)。现在用CANTest软件将应用程序(该
    发表于 11-25 08:55

    PIC16F使用中断的Bootloader应用程序

    应用程序中断的明确答案。我的Bootloader被设置为使用ROM中的03FF,而我的应用程序使用代码偏移编译器选项(设置为0x0400)。我可以..lst文件中看到两个ISR都位
    发表于 03-18 10:22

    bootloader程序下载说明

    单片机学习资料,程序下载器——bootloader程序下载说明,感兴趣的小伙伴可以看一看。
    发表于 11-03 15:50 0次下载

    BootLoader引导程序

    BootLoader引导程序下载驱动,完善内容
    发表于 05-02 09:26 16次下载

    vivo高通F模式型号识别应用程序免费下载

    本文档的主要内容详细介绍的是vivo高通F模式型号识别应用程序免费下载 密码12345
    发表于 10-29 08:00 20次下载
    vivo高通F<b class='flag-5'>模式</b>型号识别<b class='flag-5'>应用程序</b>免费<b class='flag-5'>下载</b>

    SAMC21 BootLoader上位机应用程序免费下载

    本文档的主要内容详细介绍的是SAMC21 BootLoader上位机应用程序免费下载可以和Atmel samc21 BOOT.rar里的程序配套使用。
    发表于 06-20 08:00 19次下载
    SAMC21 <b class='flag-5'>BootLoader</b>上位机<b class='flag-5'>应用程序</b>免费<b class='flag-5'>下载</b>

    Atmel Samc21单片机的BootLoader程序和资料合集免费下载

    该单片机程序BootLoader程序,即只需要提供.HEX文件或者.bin文件,利用232串口就可以向单片机进行烧录.而不需要调试器,与本人上传的"SAMC21 BootLoader
    发表于 06-27 08:00 48次下载
    Atmel Samc21单片机的<b class='flag-5'>BootLoader</b><b class='flag-5'>程序</b>和资料合集免费<b class='flag-5'>下载</b>

    华大HC32F460 Bootloader应用程序的实现

    ,正好用这个熟悉一M4的内核和华大的MCU。先说一bootloader的实现的效果:程序由boot loader启动,判断是否需要由bootlo
    发表于 11-23 18:06 95次下载
    华大HC32F460 <b class='flag-5'>Bootloader</b>及<b class='flag-5'>应用程序</b>的实现

    bootloader应用程序之间共享FEE块

    电子发烧友网站提供《bootloader应用程序之间共享FEE块.pdf》资料免费下载
    发表于 10-10 09:18 0次下载
    <b class='flag-5'>在</b><b class='flag-5'>bootloader</b>和<b class='flag-5'>应用程序</b>之间共享FEE块