STM8S003这种片内FLASH只有8k的单片机使用bootloader功能貌似没有必要,但如果你的项目只需要6K的程序空间那剩余的2K用作bootloader也是个非常不错的注意:)
一.环境
编译:STVD V4.3.5 + COSMIC V4.3.4
Bootloader上位机软件: CAS-BOOT
二.实现原理
1.FLASH程序存储器应用
STM8S003F3集成8K字节的FLASH程序存储器,其地址范围为0x8000 ~ 0x9fff
其中中断向量占用0x8000到0x8080 用户程序可以存储于0x8080到0x9fff
实现Bootloader时,BOOT代码占用前2K的字节,即0x8000到0x8800
用户程序占用后6K字节,即0x8800到0x9fff
笔者使用两个项目来开发这两个程序,也就是说BOOT程序和APP程序开发于不同的项目,BOOT程序编译后生成的可执行代码存储于
0x8000开始处,而用户APP程序存储于0x8800开始处。这个地址的分配需要在各自的项目中配置,配置方法:
project -> setting... -> Linker -> Category -> Input中设定地址范围,如下图:

BOOT程序链接配置

APP程序的链接配置
2.FLASH编程在RAM内执行问题
BOOT程序实现FLASH编程时,编程执行代码应在RAM内执行,为了实现这个,我们需要一个自定义代码段,将编程代码放入其中,
这里笔者新增加了一个名为FLASH_CODE的代码段,编程代码如下:

本文详细介绍了如何在只有8k FLASH的STM8S003单片机上实现BOOTLOADER。通过配置链接器设置,将BOOT区和APP区分开,BOOT程序占用前2K,用户程序占用后6K。BOOT程序中的编程代码在RAM内执行,中断向量进行了手动重定向,并讨论了BOOT区的保护策略。同时提供了源代码下载链接。
最低0.47元/天 解锁文章
6467





