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过来。

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...