随着物联网时代到来,越来越多的智能设备拥有了在线升级的能力,无论是系统更新,产品功能迭代还是漏洞修复都能在第一时间抵达用户手中的智能设备。
在线升级功能需要使用 OTA (Over-the-Air) 技术 ,OTA 技术简单地说就是通过网络来升级手中的智能设备,进而使用设备最新版本的功能。而 OTA 技术中必不可少的一环就是通过 Bootloader 来管理、升级设备固件。
由于 OTA 功能由多种复杂技术组成,因此添加 OTA 功能有一定的技术门槛。很多开发者遇到莫名其妙的问题,进而导致 OTA 升级失败,常见问题如下:
升级过程缺少专业的安全机制
APP 无法正常启动
程序莫名跑飞,出现 hardfault
固件搬运失败
固件解密解压错误
升级不稳定等
为了解决广大开发者在添加 OTA 功能时遇到的种种困难,RT-Thread 开发团队凭借在该领域深厚的技术积累,为开发者提供了 STM32 系列的通用 Bootloader ,开发者通过该 Bootloader 即可直接使用 RT-Thread OTA 功能。
通用 Bootloader 的功能特点
下图展示了 RT-Thread 通用 Bootloader 的软件框架:
RT-Thread 通用 Bootloader 有如下特点:
以 bin 文件的形式提供,无需修改即可使用
资源占用小,ROM 最小只需要 16KB,最大 32KB
适用于多系列 STM32 芯片(目前支持 F1 和 F4 系列 )
支持各种 SPI Flash 存储固件
支持固件加解密功能
支持多种固件压缩方式
支持恢复出厂固件功能
以上功能均可自由配置
获取方式及使用方法
在线生成 Bootloader
Bootloader 可以通过网页端在线生成的方式来获取。开发者根据自己使用的芯片,填写相关参数,然后点击生成按钮,即可在线生成 Bootloader,在线获取地址:http://iot.rt-thread.com。
Bootloader 生成页面如下所示:
填写板卡硬件配置
2. 配置分区表
3. 加密压缩配置
4. 配置 logo 和邮箱
点击生成按钮即可获取定制的 Bootloader。
制作 app 固件
可以通过阅读文档中心提供的 《STM32 通用 Bootloader 应用笔记》(https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/)来详细了解如何制作可以被用作升级的 app 固件。
开始 OTA 升级
准备好适合板卡使用的 BootLoader,然后制作好可以用作升级的 app 固件,就可以开始体验 OTA 升级功能了。下图展示了 HTTP OTA 升级方式的过程:
关键字:STM32 Bootloader OTA
引用地址:
适用 STM32 通用 Bootloader ,让 OTA 更加 Easy
推荐阅读最新更新时间:2024-11-12 20:55
关于stm32中串口重定向问题详解
usart这部分代码我也是从网上copy出来的,一下是作者的解释: 简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式), 标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数. 例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls
[单片机]
STM32的BOOT1与BOOT0设置
OOT1与BOOT0分别由0,1两种值,可以组合成3种启动模式: BOOT1=X,BOOT0=0 启动模式:User Flash Memory 从用户闪存启动 BOOT1=0,BOOT0=0 启动模式:System Memory 从系统存储器启动 BOOT1=1,BOOT0=0 启动模式:Embedded SPAM 从内置SRAM启动 意思为这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序 一般设置为BOOT1=0,BOOT0=0,只是在ISP下载时设置为BOOT1=0,BOOT0=1 第三种模式一般不用
[单片机]
STM32学习笔记(1):GPIO口的使用
摸索了很久之后终于把ARM开发板上的LED灯点亮了,虽然是很简单的一个IO口操作,但是由于以前从来都没有什么经验,所以浪费了很多时间,也查找了很多资料。现在可以操作IO口了,证明迈出了学习ARM的第一步。 实验平台清单如下: 开发板: 奋斗STRIVE V3 核心芯片: STM32F103VET6 开发环境: RealView MDK-ARM Version:3.50 PC操作系统: Windows 7 家庭普通版 仿真器: SEGGER J-Link 其中,STM32F103VET6芯片是基于ARM Cortex-M3内核的,具体技术参数请参考ST公司给出的芯片资料(http:
[单片机]
STM32学习之:事件标志组
为什么要使用事件标志 事件标志组是实现多任务同步的有效机制之一。也许有不理解的初学者会问采用事件标志组多麻烦, 搞个全局变量不是更简单?其实不然,在裸机编程时,使用全局变量的确比较方便,但是在加上 RTOS 后 就是另一种情况了。 使用全局变量相比事件标志组主要有如下三个问题: 使用事件标志组可以让 RTOS 内核有效地管理任务,而全局变量是无法做到的,任务的超时等机制需 要用户自己去实现。 使用了全局变量就要防止多任务的访问冲突,而使用事件标志组则处理好了这个问题,用户无需担心。 使用事件标志组可以有效地解决中断服务程序和任务之间的同步问题。 FreeRTOS 任务间事件标志组的实现 任务间事件标志组的实现是指各个
[单片机]
STM32单片机中的独立看门狗与窗口看门狗有哪些不同之处
1.关于看门狗的解释不再说明,窗口看门狗简而言之即只能看某个窗口期即某段时间内才能够喂狗。32的独立看门狗是没有中断的,而窗口看门狗可根据需要配置中断 2.关于独立看门狗和窗口看门狗的应用,手册p316 即17.1节讲的非常清楚。首先独立看门狗和窗口看门狗都可用来监视软件程序是否正常运行,而具体而言,因为独立看门狗独立于系统时钟单独运行,因此其可用来监视是否发生了硬件错误,比如说系统时钟故障,看门狗仍然能够起到重启的作用,但是独立看门狗的计时精度比较差,更多的应用在独立系统运行之外的对计时要求低的地方。而窗口看门狗是由系统时钟提供的,因此其计时也会很准确,当然其也就只能用来检测软件故障,比如硬件故障系统时钟坏了,自身也就不动了,也
[单片机]
STM32通用定时器TIM实现PWM波配置步骤
//1、开启定时器时钟和需要用到的IO口 void Clock_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);//因为准备把PB5口作为输出端口,所以接下来AFIO使能,如果使用默认的PA7 输 //出则不用使能AFIO,但需要使能GPIOA } //2、IO口并重映射TIM3 void GPIO_Out_Init(void) { GPIO_InitTypeDef GPIO_Init
[单片机]
【STM32】STM32时钟系统和SystemInit函数解读
时钟系统就是CPU的脉搏,像人的心跳一样,重要性不言而喻。由于STM32本身十分复杂,外设非常多,但并不是所有的外设都需要系统时钟那么高的频率,比如看门狗以及RTC只需要几十k的时钟即可。并且,同一个电路,时钟越快功耗越快,同时抗电磁干扰能力也就越弱,所以较为复杂的MCU都是采用多时钟源的方法来解决这些问题。 STM32F1xx官方资料: 《STM32中文参考手册V10》-第六章 复位和时钟控制 RCC STM32的时钟系统 STM32的时钟系统图 上图是STM32的时钟系统图。STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL,在图中有红色方框标记的位置。从时钟频率来分可以分成高速时钟源和低速时钟
[单片机]
STM32 学习九 通过USART实现printf重定向
把printf函数内容通过USART串口输出,可以方便调试STM32内部程序。示例代码如下: /******************************************************************************* * Function Name : fputc * Description : 重定向fput,以实现重定向printf * Return : int *******************************************************************************/ int fputc(int ch,FILE *
[单片机]