STM32 YMODEM实现bootloader

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

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic464669.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

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

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

集性能、紧凑、灵活、能效于一身,ST8引脚STM32微控制器问市

意法半导体8引脚STM32微控制器(MCU)现已上市,紧凑、经济的封装让简单的嵌入式开发项目也能利用32位MCU的性能和灵活性。 新推出的四款STM32G0 微控制器是8引脚经济性和32位性能的完美组合,在市场绝无仅有,基于59 DMIPS的 64MHzArm®Cortex®-M0 + CPU,片上高达8KB的RAM和32KB闪存,高性能外设包括2.5Msps ADC、高分辨率定时器和高速SPI接口。灵活的I/O引脚映射和MCU内部功能,让设计人员轻松升级终端产品功能,不会牺牲电路板空间或物料清单成本。高稳定内部振荡器,在宽温度和宽压范围内精度达到±1%,为开发者节省了外部时钟元件。 
发表于 2019-09-20
集性能、紧凑、灵活、能效于一身,ST8引脚STM32微控制器问市

6.STM32外设函数分类

发表于 2019-09-20
6.STM32外设函数分类

小广播

何立民专栏

单片机及嵌入式宝典

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

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