STM32系列(HAL库)——串口IAP
创始人
2024-03-17 06:38:13
0

前言

         IAP(In Application Programming)即在应用编程,IAP 是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产 品中的固件程序进行更新升级。 

        设备具备IAP功能的情况下,一般闪存中存在2个程序,第一个程序称之为 Bootloader 程序,其主要作用是判断设备是否需要升级以及接收程序完成升级这两个功能;第二个功能称之为APP程序,就是设备正常运行时的程序。

        对于Bootloader 程序,需要完成串口接收,内部Flash读写等代码的编写;对于APP程序,在编写设备正常运行的代码后,还要设置地址偏移以及生成bin文件。

        本文适合有一定STM32基础的学者参考学习。

一.软硬件准备

        软件:CubeMX、Xcom(串口调试助手)

        硬件:SMT32F103C8T6系统板,2个LED,2个外部按键

        需要注意:C8的容量为:ROM=64KB,RAM=20KB ,实际项目中应用IAP功能这个容量是偏小的,但作为简单了解学习还是够用的。

二.CubeMX配置

        这里需要完成Bootloader和APP两个程序,因此需要创建2个工程,大致实现的是上电运行Bootloader程序,现象为蓝灯闪烁,同时等待串口接收bin文件,接收bin文件后,通过按键1将文件烧录至内部Flash,再通过按键2执行APP程序,此时变为蓝绿灯闪烁。

        CubeMX配置大致如下:

  • 对于Bootloader:配置串口及打开串口接收中断,配置2个LED引脚(上拉输出),配置2个外部按键引脚(上拉输入模式)
  • 对于APP:配置2个LED引脚(上拉输出模式)
     

三、程序配置

1. Bootloader程序

        Bootloader程序较多,在此不方便贴出来,源码下载链接:点击跳转​​​​​​​

        这里主要讲一下要注意的点:

  • 对于串口部分,printf打印配置可参考:使用串口打印的3种方式
  • usart.c中缓存数组的大小设置,即

         这里设置的是10K的大小,就是APP生成的bin文件不能大于10KB,不然接收会溢出。这里的 最大值可以先把缓存数组大小设为1,再通过芯片RAM容量减去RO-data,ZI-data的大小就能大致 判断出来,     ​

比如我现在的变量大概占5K大小,C8的RAM容量20K,所以这个缓冲数组我最大可以设置为1024*15,超了编译会报错。

  • iap.h头文件中需要注意

 这里的偏移地址要和APP的偏移地址一致(后面会讲),因为APP的地址不再是默认的0x08000000

  •  stmflash.h头文件中1需注意

         这里是芯片ROM大小,不同芯片数值大小不同。

2.APP程序

         APP程序主要在Keil中会设置偏移地址和生成bin文件即可。

1.对于地址的偏移,操作如下:

         C8T6的ROM大小为64KB,即10000H,这里我留前面32KB给Bootloader程序,所以APP起始地址变为0X8008000,剩下ROM大小为64-32=32KB,所以Size为0X8000。

2.生成bin文件,可参考:关于KEil5 / MDK5如何设置编译产生bin文件

3.中断向量表偏移,在APP程序初始化时(while循环前)执行如下语句:

    SCB->VTOR=FLASH_BASE|0X8000;

        这里的0x8000指的是APP程序的起始地址,因为前面32KB(=0X8000)给了Bootloader程序,所以这里可以理解为往后移0x8000。

4.编写APP程序,我做的功能就是2个LED灯闪烁。编译后检查APP程序的bin大小,不能超过Bootloader程序可接收的最大值,大小可以在生成的bin文件属性查看。         

四、程序验证

1.板子上单执行Bootloader程序(蓝灯闪烁,绿灯熄灭,转GIF画质拉胯了)

2.串口助手发送bin文件

 3.按下按键1将bin文件烧录至内部Flash区域

 4.按下按键2跳转至APP程序

 5.APP程序执行效果(蓝、绿灯闪烁,转GIF画质拉胯了)

         其它F1芯片移植可直接套用模板,F4系列的需要修改内部flash读写程序,可直接从原子哥的例程Copy过来。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...