动手写一个STM8的轻量级bootloader

本文介绍了如何为STM8S003编写一个占用0.5KB Flash的轻量级Bootloader,包括串口收发、Flash写入、中断向量重映射和APP程序设置等关键步骤。通过中断向量重映射解决了APP中断问题,并通过数据校验确保下载的正确性。
摘要由CSDN通过智能技术生成

STM8凭借其低廉的成本、超高的性价比获得了许多公司的青睐。而在产品中由于方便、安全等需求,往往要使用到IAP下载的方式对已经拿到产品客户进行软件升级(如果产品在批量生产后发现你的程序有问题,而不能IAP更新,那售后维护成本就高了)。
而STM8S003等只有8K Flash的型号是不自带Bootloader的,且ST官方的Bootloader足足会占领4KB Flash空间,且还要考虑固件的保密性等因素,所以编写一个自己的轻量级的Bootloader尤为重要。

下面向大家分享一下本人在一个项目中写的一个Bootloader,最少只需占用0.5KB Flash空间!

【串口收发】

对于单片机而言,Bootloader最重要的功能就是把从串口发送过来的程序数据保存到MCU 的Flash上(即IAP下载),并跳转到所下载程序的起始地址并运行。所以串口功能必不可少。下面是我们用到的关于串口收发的函数(头文件添加stm8s.h,直接操作寄存器以节省Flash空间),MCU型号为STM8S003。

void UART1_SendByte(u8 data) //串口发一个字节
{ 
    UART1->DR=data;
    while (!(UART1->SR & 0x80));//等待发送完成
}
void UART_Init(void) //串口初始化函数
{     
    UART1->CR2 = 0;                       
    UART1->CR3 = 0;// b5,b4 = 00,1个停止位
    UART1->BRR2=0x00;
    UART1->BRR1=0x1a;
    //BRR2和BRR1设置串口波特率,这里设置的在2MHz默频下是4800的波特率
    UART1->CR2 = 0x2C; // b3 = 1,允许发送
    UART1->CR1 |= (0<<5);
}
void UART1_SendStr(u8* data)//发送字符串函数
{
    while (*data)
        UART1_SendByte(*
  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值