STM32 YMODEM实现bootloader

发布者:rnm888最新更新时间:2019-06-14 来源: eefocus关键字:STM32  YMODEM  bootloader 手机看文章 扫描二维码
随时随地手机看文章

这几天一直在尝试学STM32 bootloader,在网上查阅了一番,发现实现方法不计其数。于是自己有了想动手实现一番的欲望。


下面请听我细细道来,我选用的芯片是STM32F103ZE系类,该芯片是512k,每页是2k的。


接下来就是你要重点了:


其实bootloader说白了,就是在原有APP程序 再加上另一段程序---bootloader,这个bootloader可以对你flash进行擦写操作。


那么关于STM32具体实现BOOTLOADER步骤是怎么样的呢?


下面我就具体几个细节之处谈谈:


1,如何实现在APP程序跳转到BOOTLOADER程序.


2,既然APP程序可以跳转到bootloader,那么反之也是可以的。

 

//判断用户是否已经下载程序,因为正常情况下此地址是栈地址。

//若没有这一句的话,即使没有下载程序也会进入而导致跑飞。

if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

{

    SerialPutString("Execute user Programrnn");

    //跳转至用户代码

    JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);

    Jump_To_Application = (pFunction) JumpAddress;

 

    //初始化用户程序的堆栈指针

    __set_MSP(*(__IO uint32_t*) ApplicationAddress);

    Jump_To_Application();

}

else

{

    SerialPutString("no user Programrnn");

}


3,设计bootloader程序,采用YMODEM协议,一次数据1024字节、需要在keil进行设置ROM1,下载utilities也设置一下,然后download。


4,设计好bootloader程序并且用仿真器烧录到芯片之后,下面就开始设计APP程序,所需设置也是大同小异,只是将STARTADDRESS 设置成从 0800 0200 size只要不超过你整个flash剩下的区域即可


,还需要设置一点的是,产生bin文件,这里我教大家一个方法  @p.bin就是说项目名来作为bin文件名,axf也一样。假设我项目名是BOOT-Y,那么你生成的bin文件就是这个名字


5.,接下来用SECURECRT软件进行程序app的bin文件烧录,我boot程序里面有设计了一个按键,就是你是进入到boot程序还是app程序,当然你app程序如果没有的话,那么就需要在这里进行校验了。如果按键按住,然后复位,那么程序就进入到刚才的boot区域,这里是一个串口菜单,有一个函数捕获你的按键输入字符。


/*******************************************************************************

  * @函数名称 GetKey

  * @函数说明   通过超级中断回去键码

  * @输入参数   无

  * @输出参数   无

  * @返回参数   按下的键码

*******************************************************************************/

uint8_t GetKey(void)

{

    uint8_t key = 0;

 

 

    //等待按键按下

    while (1)

    {

        if (SerialKeyPressed((uint8_t*)&key)) break;

    }

    return key;

 

 

}



6、下面就是boot的串口菜单,你输入1,加载bin文件,点击transfer的send-ymodem,然后选择你的bin文件,接下来就是1024字节数据开始发送到串口缓存区,如果校验正确的话,那么就会写入到对应的flash当中。




7、看到没?成功了!


(7.1)、

忘记说了,APP程序里面需要在 在system_stm32f10x.c文件的128行处 #define VECT_TAB_OFFSET 0x2000 /*!< Vector Table base offset field.  将中断向量表的偏移量改成你APP程序flash地址偏移量, 这个非常关键,因为你BOOT的中断和APP中断不能是同一个! 否则会出事的!


关键字:STM32  YMODEM  bootloader 引用地址:STM32 YMODEM实现bootloader

上一篇:基于Ymodem协议的STM32F407的串口IAP
下一篇:stm32 Bootloader设计(YModem协议)

推荐阅读最新更新时间:2024-11-17 02:07

STM32串口的发送和接收
USART是STM32内部集成的硬件外设,可以根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可以自动接收RX引脚的数据帧时序,拼接成一个字节数据,存放在数据寄存器里。 当配置好USART的电路之后,直接读取数据寄存器,就可以自动发送数据和接收数据了。在发送和接收的模块有4个重要的寄存器 发送数据寄存器TDR 发送移位寄存器,把一个字节的数据一位一位的移出去 接收数据寄存器RDR 接收移位寄存器,把一个字节的数据 下方为串口的发送和接收图解: 串口发送 在配置串口的各个参数时,可以选择发送数据帧的数据位的大小,可选8位或9位。 串口发送数据实际上就是对发送数据寄存器TDR进行写操作。 当串口发送
[单片机]
<font color='red'>STM32</font>串口的发送和接收
基于PIC18单片机的新颖Bootloader设计
Bootloader是操作系统在内核运行之前运行的一段小程序,其功能主要是完成软硬件设备初始化,建立内存空间映射,从而将系统的软硬件环境带到一个合适的状态,或者加载操作系统映像文件实现系统软件升级,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。   针对PIC18系列单片机,目前市面上仅存在HI-TECH公司提供的Bootloader程序,并且需要借助串口调试助手。本文基于Microchip公司的MPLAB软件开发环境设计了一种新颖的Bootloader,并配套编写了PC机端上位机界面
[单片机]
基于PIC18单片机的新颖<font color='red'>Bootloader</font>设计
STM32初识I2C
1、通讯协议。 I2C是PHILIPS公司开发的两线式串行总线,属于同步半双工。 数据有效 在传输数据的时候,SDA线必须在时钟的高电平周期保持稳定,SDA的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变 。 起始停止 SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件; SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。 起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态 ,在停止条件的某段时间后总线被认为再次处于空闲状态。 如果产生重复起始条件而不产生停止条件,总线会一直处于忙的状态,此时的起始条件(S)和重复起始条件(Sr) 在功能上是一样的。 数
[单片机]
<font color='red'>STM32</font>初识I2C
为何修改BASEPRI寄存器无效?
有STM32用户发现在操作BASEPRI特殊功能寄存器时,根本不起作用。比方,它目前配置了几个中断,优先级各不相同,按照STM32CubeMx里的配置分别为2、3、4不等,当他在BASEPRI寄存器里写这几个数字中的任意一个时,发现BASEPRI的数字始终是0,没有任何效果。 我们知道,通过配置 BASEPRI寄存器非0值来给系统中的中断响应设置门槛,当中断优先级低于某个级别时将不会得到CPU的响应执行,也就是说只有中断优先级高于某个级别时才能得到响应。下面截图是来自ARM CORTEX M4技术手册中有关BASEPRI寄存器的描述。 从这里可以看到该寄存器的有效配置位有8位,对其写0无意义,或者说放弃设置中断响应门槛功
[单片机]
为何修改BASEPRI寄存器无效?
stm32 中断串口控制LED灯
#include stm32f10x.h #include usart.h #include led.h #include stdio.h /*********************************************************************** ***********************************************************************/ void RCC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); //void d
[单片机]
STM32的USART DMA传输(转)
问题描述: 我有一个需求,AD采得一定数目的数据之后,由串口DMA发出,由于AD使用双缓冲,所以每次开始DMA的时候都需要重新设置开始的内存地址以及传输的数目(这些都是理所当然的),但是在开始调试的时候,遇到了一些问题,问题如下:当第一次DMA传输完毕,关闭DMA以设置内存地址等,再开启DMA,发现不启动了。 开始是参考了《STM32中文参考手册REV10》,里面的发送步骤如下: 1. 在DMA控制寄存器上将USART_DR寄存器地址配置成DMA传输的目的地址。在每个TXE事件后,数据将被传送到这个地址。 2. 在DMA控制寄存器上将存储器地址配置成DMA传输的源地址。在每个TXE事件后,将从此存储器区读出数据并
[单片机]
基于stm32的滤波器的总结
数字滤波器的类型有FIR(有限长冲击与IIR(无限长。 离散数字系统中,滤波器的表述为差分方程。 FIR FIR基本特性: FIR 滤波器永远是稳定的(系统只有零点); FIR 滤波器的冲激响应是有限长序列; FIR 滤波器的系统函数为多项式; FIR 滤波器具有线性相位。 实现同样参数的滤波器,FIR比IIR需要的阶数高,因此计算量大。 目前,FIR 数字滤波器的设计方法主要是建立在对理想滤波器频率特性做某种近似的基础上。设计方法有窗函数法,等波纹设计法(Equiripple)和最小二乘法 (Least-Squares)等。其中窗函数设计法在学校课堂中是重点讲解的,提到FIR滤波器肯定会想到hamming、kaiser窗
[单片机]
IAR环境下STM32+IAP方案的实现
一、什么是IAP,为什么要IAP IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给用户一个代码文件即可。 而IAP却能很好的解决掉这个难题,一片STM32芯片的Code(代码)区内一般只有一个用户程序。而IAP方案则是将代码区划分为两部分,两部分区
[单片机]
IAR环境下STM32+IAP方案的实现
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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