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

发布者:美好回忆最新更新时间:2024-01-15 来源: elecfans关键字:STM32 手机看文章 扫描二维码
随时随地手机看文章

1.引言

STM32 MCU 在 bootloader 模式下,可以通过多种可用外设(USART、CAN、USB、I2C、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 次,应用程序下载成功。


关键字:STM32 引用地址:关于在Bootloader模式下的应用程序下载

上一篇:STM32F1和F4的区别?STM32的ADC系统的功能特性
下一篇:巧用外设复位修改只读寄存器

推荐阅读最新更新时间:2024-11-17 06:24

STM32串口中断接收数据
数据帧满足下面格式: 帧头部(Head) 类型(Type) 长度(Length) 值(Value) CRC校验 2字节 1字节 1字节 X字节 2字节 0xaa 0x55 X void USART6_Init (void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6,ENABLE); RCC
[单片机]
STM32 AI实验课程—HAR在STM32L4上的实现
课程目的:旨在为AI深度学习解决方案提供关于ST生态系统的实践体验 实验步骤: 下载AI演示项目到ST开发板上 借助智能手机/平板电脑上的应用程序,将传感器数据和标签记录在ST开发板上 给定的Python脚本将处理数据集并训练NN模型 在STM32CubeMX.AI工具的帮助下,将神经网络训练好的模型导入到STM32项目中 相关软硬件简介 软硬件需求列表 IoT开发板—B-L475E-IOT01A FP-AI-SENSING1 AI特定功能:训练用的数据集、数据标注、STM32模型转换对应代码 其他功能:使用RTOS实现低功耗、手机应用软件“ST BLE Sensor” 实验1:STM32固件下载和演示测
[单片机]
<font color='red'>STM32</font> AI实验课程—HAR在STM32L4上的实现
STM32 GPIO 简单操作函数
STM32库函数太多,而且不能识别大小写,经常记错,GPIO简单记忆。 ---第一步--模式配置 void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //对应GPIO所在的总线时钟必须打开 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //哪个GPIO口 GPIO_In
[单片机]
STM32开发板入门教程(十三) - SPI模式读写SD卡
功能介绍 :使用SPI模式 读写SD卡block数据 可通过串口发送到PC机查看 SD卡是Secure Digital Card卡的简称,直译成汉语就是“安全数字卡”,是由日本松下公司、东芝公司和美国SANDISK公司共同开发研制的全新的存储卡产品。SD存储卡是一个完全开放的标准(系统),多用于MP3、数码摄像机、数码相机、电子图书、AV器材等等,尤其是被广泛应用在超薄数码相机上。呵呵 现在偶们做东西也喜欢用sd卡了 为啥? 容量大啊 价格便宜啊 读写次数100000次以上(也有资料说是300000次 呵呵) 这个次数够猛了啊 读写的速度也很快 现在高速的SD卡写速度可以达到20M/S 呵呵 如果你买的SD卡达不到这个速度
[单片机]
<font color='red'>STM32</font>开发板入门教程(十三) - SPI<font color='red'>模式</font>读写SD卡
stm32 浮点数问题
由于我后面的课题需要涉及较多的浮点运算,只熟悉f103,它不带FPU,所以软件浮点算法就显得很重要了。这几天在做些小研究和测试。 今天又仔细研读了谭浩强的C语言书的数据类型章节,上面有说到c编译系统总将float类型转换成double类型来进行浮点运算,然而一般应用中7位有效数字的占32位的float类型已基本满足需求,若转为16位有效数字64位double类型岂不是没什么必要?速度岂不是会降低? 今天将原子哥的内部温度传感器实验的浮点运算的代码作了个小小的改动,却是大大的改善,结果如下: 温度计算公式原代码为: temp=(1.43-temp)/0.0043+25; // 这句产生的代码量为1584字节改为单精度: te
[单片机]
STM32的"异常“、“中断”和“事件”区别和理解
1 异常与中断(Cortex-M3) 1.1 异常与中断 原话: Cortex‐M3 在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。 其中,编号为 1-15 的对应系统异常,大于等于 16 的则全是外部中断。 除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。 所有能打断正常执行流的事件都称为异常。 异常的概念包含中断的概念,即中断是异常的子集。 异常与中断都是硬件支持的。 异常表: 外部中断表: 这里的“外部中断”不是指STM32中的EXTI中断,而是所有中断。 1.2 优先级 原则上,CM3 支持 3 个固定的高优先级和多达 25
[单片机]
<font color='red'>STM32</font>的
解决STM32+FreeRTOS的printf重定向打印凌乱的问题
本内容基于正点原子STM32F103系列开发板开发调试。 由于引入了FreeRTOS后,出现了任务调度,就出现了打印之间互相穿插,杂乱无章的情况。 打印如下所示: LED Running! Task test tTask test wo! Task tethree! st one! Task test tTask test wo! Task tethree! st one! LED Running! Task test tTask test wo! Task tethree! st one! Task test tTask test wo! Task tethree! st one! Task test tTask tes
[单片机]
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭
1、 STM32实验连载之四:读取芯片唯一ID号 ---- http://blog.sina.com.cn/s/blog_b1ed84120101fmlo.html 2、 【STM32F4】读取芯片ID和芯片Flash Size ---- https://www.cnblogs.com/zyqgold/p/3378993.html 3、STM32读芯片ID号---- https://download.csdn.net/download/jonahan001/5342889 4、如何读取STM32的唯一ID---- https://blog.csdn.net/u012388993/article/details/714250
[单片机]
<font color='red'>STM32</font>通过读取芯片唯一ID号来实现程序的保护,防止被抄袭
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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