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(*