STM32 启动步骤和升级方式以及代码跳转的实现

发布者:FreeSpirit123最新更新时间:2024-10-08 来源: elecfans关键字:STM32  启动步骤  升级方式 手机看文章 扫描二维码
随时随地手机看文章

#!/bin/sh


#首先把BOOT0/Boot1 设置为 1 0, 即使用 STM32的ISP升级模式

#按下板子的reset, 硬复位进入 SYS ISP 模式(BOOTLOADER)


#sudo stm32flash -w F407ZG_New.bin -v -g 0x0 /dev/ttyUSB0

sudo stm32flash -w F407ZG_Old.bin -v -g 0x0 /dev/ttyUSB0


#烧写以及验证完毕后, 自动加载 Flash的程序运行。

#把把BOOT0/Boot1 设置为 0 0, 即使用 STM32的flash模式,即用户程序模式。

#reset按键, 硬复位后自动启动新烧入的程序。


#以下为烧写的日志输出。

#sudo stm32flash -w F407ZG_New.bin -v -g 0x0 /dev/ttyUSB0

#stm32flash 0.5

#

#http://stm32flash.sourceforge.net/

#

#Using Parser : Raw BINARY

#Interface serial_posix: 57600 8E1

#Version : 0x31

#Option 1 : 0x00

#Option 2 : 0x00

#Device ID : 0x0413 (STM32F40xxx/41xxx)

#- RAM : 128KiB (12288b reserved by bootloader)

#- Flash : 1024KiB (size first sector: 1x16384)

#- Option RAM : 16b

#- System RAM : 30KiB

#Write to memory

#Erasing memory

#Wrote and verified address 0x080033f4 (100.00%) Done.

#

#Starting execution at address 0x08000000... done.


SRAM中调试代码


在每个STM32 的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时电平状态决定了芯片复位后从哪个区域开始执行程序,


BOOT1=X BOOT0=0  从用户闪存(flash)启动,这时正常模式  较多情况下使用这种模式


BOOT1=1  BOOT0=1 从内置SRAM(内存)启动,这种模式可以用于调试


BOOT1=0  BOOT0=1 从系统存储器启动, 即Bootloader. 此为ISP升级方式, The boot loader is located in system memory. It is used to reprogram the Flash memory by using USART1 (PA9/PA10), USART3 (PC10/PC11 or PB10/PB11), CAN2 (PB5/PB13), USB OTG FS in Device mode (PA11/PA12) through DFU (device firmware upgrade).


 (https://blog.csdn.net/nicekwell/article/details/79093780) 包含 ISP的官方代码以及解析.


如果使用升级, 建议使用STM32内部的bootloader方式, 实现bootload 和 UserApplication之间相互自由切换.


其中需要使用 stm32flash, 有源码. 一般运行在 linux 主机上.


在STM32复位后, 根据BOOTx的组合关系, 确定是启动UserApp还是Bootloader.


BOOT1=0  BOOT0=1被设置, 然后引发一个硬复位操作. 然后通过  stm32flash 下载代码到flash.

然后通过 BOOT1=X BOOT0=0 + 硬复位,引导用户程序.


echo 419 > /sys/class/gpio/export    #boot1

echo 428 > /sys/class/gpio/export    #boot0

echo 132 > /sys/class/gpio/export    # 硬复位 

echo 'low' > /sys/class/gpio/gpio419/direction   

echo 'high' > /sys/class/gpio/gpio428/direction  #  boot1=0 boot0=1  bootload启动

echo 'low' > /sys/class/gpio/gpio132/direction

usleep 5000

echo 'high' > /sys/class/gpio/gpio132/direction  #硬复位


/etc/firmware/stm32flash -w /etc/firmware/cocpu6900.hex -v -g 0x0 /dev/ttySAC2  #固件升级


echo 'low' > /sys/class/gpio/gpio428/direction   # boot1=0 boot0=0  flash启动


echo 'low' > /sys/class/gpio/gpio132/direction

usleep 5000

echo 'high' > /sys/class/gpio/gpio132/direction  #硬复位

第二种: 自己编写bootloader 进行升级, 亦可直接用 stm32官方提供的 IAP (in Application Programming)代码.


例如:  

0800,0000 - 0800,8000  这个扇区的8个页的16K 引导区


0800,8000 - 0800,BFFF  作为UserApp区

0800,C000 - 0800,DFFF   作为升级备份区


0800,E000 - 0800,FFFF  作为参数存储区.


升级流程为:

1. UserApp区代码通过串口或者USB口和Host交互(可以为YModem或者其他协议), 把升级的Hex文件存储到 升级备份区. 并在升级备份区的头部做好标记, 说明是已更新标记以及数据页的大小. 然后复位.


2. 复位后, 引导区代码开始执行, 引导区检查升级备份区的头部, 如果有更新标记, 则把升级备份区的内容拷贝写入到UserApp区, 然后跳转到 UserApp区开始执行代码.


3. 引导区也要实现YModem等在UserApp区中实现的升级代码


关于STM32的IAP与APP互相跳转

https://www.cnblogs.com/smulngy/p/5700283.html

实现在Norflash上各个区域代码之间的跳转


STM32 IAP+Ymodem功能实现(参考官方代码)

https://www.cnblogs.com/memorypro/p/8166213.html


建议升级方式,还是使用 BOOT0/1+stm32flash的升级方式, 稳定可靠并节省Flash空间,尤其在代码量比较大的情况下, 或者使用 官方的 IAP代码

关键字:STM32  启动步骤  升级方式 引用地址:STM32 启动步骤和升级方式以及代码跳转的实现

上一篇:使用 sw4stm32 作为IDE 开发 stm32 程序
下一篇:stm32——ucos的中断使用

推荐阅读最新更新时间:2024-11-12 10:57

stm32 定时器 捕获
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测 输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等. 例如:我们用到TIM5_CH1来捕获高电平脉宽,也就是要先设置输入捕获为上升沿检
[单片机]
STM32的推挽(push-pull)和开漏(open-drain)
【Open-Drain与Push-Pull】 GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出。(General Purpose Input Output,简称为GPIO或总线扩展器,利用工业标准I2C、SMBus?或SPI?接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。)但是在配置GPIO管脚的时候,常会见到两种模式:开漏输出(open-drain,漏极开路)和推挽输出(push-pull)。 【Push-Pull推挽输出】 原理: 输出的器件是指输出脚内部集成有一对互补的MOSFET,当Q1导通、Q2截止时输出高
[单片机]
STM32 ST-LINK Utility程序烧录方法
打开软件过后点击Target-》connect 出现以下界面表示STlink链接成功 如果出现没有检测到stlink的话,首先查看是否安装驱动程序,再重新插拔电脑usb口的stlink连接线(或者链接到主机后方的usb口) 再重复以上步骤链接,链接成功过后再次点击Target然后点击AutoMatic Mode 然后选择升级的HEX文件然后点击Start 显示以上信息表示程序烧录完成 软件官网下载比较麻烦这里附上下载链接(内容包含ST-Link驱动) https://cloud.189.cn/web/share?code=VJZre2EzmiIf(访问码:n9rt)
[单片机]
<font color='red'>STM32</font> ST-LINK Utility程序烧录方法
STM32之TIMER基本定时器应用
STM32之TIMER基本定时器应用 定时器溢出时间 Tout= ((arr+1)*(psc+1))/Tclk 相关结构体 typedef struct { uint16_t TIM_Prescaler; /*! 计数分频值 */ uint16_t TIM_CounterMode; /*! 计数模式 */ uint16_t TIM_Period; /*! .周期 */ uint16_t TIM_ClockDivision; /*! 定时器系统分频数*/ uint8_t TIM_RepetitionCounter; /*! . 重复计数*/ } TIM_TimeBaseInitTypeD
[单片机]
STM32 RTC 时钟简介
RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前,先要取消备份区域(BKP)写保护。 RTC正常工作的一般配置步骤如下: 1)使能电源时钟和备份区域时钟。 要访问RTC和备份区域就必须先使能电源时钟和备份区域时钟。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE); 2)取消备份区写保护。 要向备份区域写入数据,就要先取消备份区域写保护(
[单片机]
STM32开发板入门教程 - 串口通讯 UART
通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。 它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的DMA方式,可以实现高速数据通信。 主要特性: 全双工的,异步通信 NR 标准格式 分数波特率发生器系统 -发送和接收共用的可编程波特率,最高到4.5Mbits/s 可编程数据字长度(8位或9位)
[单片机]
STM32速成笔记(6)—定时器
一、什么是定时器 关于什么是定时器,简单来讲,就是是用来定时的。STM32F103ZET6有两个基本定时器TIM6和TIM7,四个通用定时器TIM2~TIM5和两个高级定时器TIM1,TIM8。每一个定时器都是完全独立的,不共享任何资源。 根据中文参考手册介绍,基本定时器最为简单,类似于51单片机的定时器。通用定时器在基本定时器的基础上增加了输入捕获和输出比较功能。高级定时器相比通用定时器,又增加了可编程死区互补输出,重复计数器等功能。 STM32F103ZET6的通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调
[单片机]
<font color='red'>STM32</font>速成笔记(6)—定时器
stm32 Usart 初始化
库文件中给出了初始化stm32 USART 的范例 /** * @brief Fills each USART_InitStruct member with its default value. * @param USART_InitStruct: pointer to a USART_InitTypeDef structure * which will be initialized. * @retval None */ void USART_StructInit(USART_InitTypeDef* USART_InitStruct) { /* USART_InitStruct members
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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