大虾们stm32 bootloader的源代码在哪
在固件库里面StartUp文件夹里面如图
下面是固件库的下载链接:
STMFx官方固件库STMFx_StdPeriph_Lib_V3.5.0
/forum.php?mod=viewthread&tid=5&fromuid=1
(出处: 嵌入式软硬件学习)
如果你以后还有什么样的疑问可以去 “嵌入式软硬件学习”网站提问咨询
/forum-stm-1.html
STM系统和自定义bootloader的实现和应用
bootloader简介:bootloader是启动程序,负责在设备启动时执行,可进行硬件初始化或固件热更新。通过下载器烧写到芯片,APP可通过UART、IIC、web网站源码cUSB、SPI等总线或WiFi、蓝牙等无线方式更新,取决于bootloader设计。也可合并bin文件一次性烧写。
STM系统bootloader:《AN》详述了不同STM系列MCU在不同bootloader peripherals方式下的引脚使用。系统启动时,存储器映射到系统bootloader,内存分配情况根据具体系列和配置不同。
执行过程:进入系统存储器后,从0x1FFF处获取复位中断向量地址,执行后跳转到系统bootloader main函数。发生中断请求时,从中断向量表获取函数入口地址,执行中断服务函数,然后返回main函数。从主Flash中断向量表获取中断函数地址,android倒计时源码执行后回到APP的main函数。
bootloader地址:Fx和F4xx在0x1FFF地址,H7x3系列在0x1FF地址。
执行流程:F4和H7系列需注意,USB信号线接入会导致优先执行USB DFU方式,影响其他接口。不同系列芯片的启动方式和地址配置不同。
进入bootloader方法:设置boot引脚或直接在应用程序中跳转至系统bootLoader。Fx系列支持多种启动方式,F4xx和H7x3系列支持USB和串口启动。
退出bootloader:通过USB DFU方式更新程序后,芯片需复位以退出DFU模式。基于串口使用bootloader更新程序时,更新完成即自动退出。
bootloader擦写flash问题:USB DFU方式升级固件时,需将系统bootloader映射至0x。跳转bootloader程序设计通过板载按键触发。固件升级操作中,选择USB或串口模式并连接设备后,加载hex文件升级。
实现IAP功能:IAP在线应用编程允许通过bootloader对单片机用户Flash区域进行烧写,更新应用程序。android h5 源码实现IAP需编写bootloader程序和用户程序。总体架构包括Ymodem协议、USART收发、flash操作、bootloader配置与应用程序跳转。
地址划分:Bootloader程序区位于0x ~ 0x,Application程序区位于0x ~ 0x。注意以字节的倍数划分地址。
执行过程:程序启动后从0x获取复位中断向量地址,执行后跳转至IAP程序main函数。发生中断请求时,跳转至中断服务函数执行,返回main函数后执行IAP过程,成功后跳转至APP程序。
中断向量表:中断向量表用于存储中断服务函数的地址,存放在Flash区,根据中断优先级分配。内核和外设中断服务函数地址在启动文件中初始化,根据中断向量表执行中断处理过程。
中断向量表的设置:修改中断向量表地址,M0+、M3、java开源问答系统源码M4和M7内核系列通过修改SCB->VTOR寄存器,M0系列通过复制中断向量表到SRAM,并在SYSCFG配置寄存器1中重新映射。
APP更新文件:生成包含用户程序的.bin文件,通过Ymodem协议或其他方式传输给IAP程序进行更新。
常用文件传输协议:ASCII、Xmodem、Ymodem、Zmodem等,其中Ymodem适用于嵌入式领域,如通过USB、UART、CAN等总线传输固件文件。
SecureCRT升级固件:使用SecureCRT软件,配置串口连接目标板,通过Ymodem协议传输.bin文件完成固件更新。
参考文献:应用笔记、STM Bootloader原理分析、AN、AN、Keil生成bin文件、Ymodem协议等资料。android 仿京东app源码
什么是bootloader?
Bootloader简介
Bootloader是系统启动时最先执行的程序,其主要功能是引导操作系统或应用程序加载到内存中。在产品上电后,它负责将代码从存储设备加载至主存储器,例如Flash中,以便后续程序能顺利运行。其显著优点在于,即使在调试接口未连接或未配置的情况下,用户也能通过诸如串口、蓝牙等途径轻松更新或升级微控制器(MCU)上的代码。此功能尤其适用于产品部署后,需要远程或非侵入式地进行软件更新的场景。通过Bootloader,jlink等调试工具也能实现程序烧写功能,因为jlink自带Bootloader实现这一目的。
Bootloader在代码布局中的角色
在没有Bootloader的情况下,代码通常从Flash的首地址开始运行。例如,STMF1的Flash首地址为0x;加入Bootloader后,整个Flash空间的代码布局发生变化,如图1所示。首先,Bootloader被烧写到Flash的首地址,接着将应用程序(APP)整体移到后面,比如移到0x地址。上电后,代码会从Flash首地址(0x)开始执行Bootloader,随后在Bootloader代码中,程序需要跳转到APP地址(0x)处运行。
Bootloader代码结构(无中断异常情况)
当APP程序中不存在中断等异常向量时,通常不必重新设置中断向量表的地址。中断向量表是程序异常(如中断)发生时,硬件自动查找对应函数的地址并执行异常处理代码的地方。若存在Bootloader,中断向量表地址可能已被使用。因此,若APP存在中断等异常向量,需要重新设置中断向量表的地址。但假设我们讨论的APP不存在此类情况。
Bootloader代码示例
为了将APP代码移动至0x地址,Bootloader代码如图2所示。这里我们定义了一个函数指针app,并将0x地址赋值给它。当执行app();时,程序会跳转到0x地址执行APP代码。图中0x表示地址的最后1bit用于区分Thumb指令集和ARM指令集。
APP代码结构
APP代码相对简单,图3展示了APP启动文件的主要内容。我们注释掉了与向量表相关的一部分,确保Bootloader跳转到0x时直接执行LDR sp操作。图4展示的是main文件,其核心功能是使用串口进行打印操作。
APP代码烧写
通过修改Keil的设置界面,如图5和6所示,可以将APP代码烧写到指定地址。当然,还有其他方法如修改散列文件来改变加载地址,但这不在本讨论范围。
总结
本文简要介绍了Bootloader的概念、作用以及在代码布局和运行流程中的角色。通过Bootloader,实现了在MCU上电后,程序能够从Flash中安全、有效地加载并运行。通过示例代码和配置过程,展示了如何使用Bootloader实现APP代码的移动与加载。后续文章将深入讨论如何将APP代码从Flash搬移到RAM中运行,以及如何进行向量表的重新定位,进一步优化程序运行效率。
详解STM在线IAP升级
本文主要介绍在线升级IAP的基础知识,包括BootLoader原理、程序分区、代码编写与实验验证等过程。旨在帮助读者深入了解在线升级IAP的相关概念与实操。
BootLoader在启动App程序时起着至关重要的作用,它负责加载并运行App程序。正常情况下,我们编写的程序会以二进制文件的形式存储在STM芯片的内部Flash存储器中。通过Keil软件的Debug模式,可在Memory窗口查看程序代码。接下来,我们进入正题。
进行程序分区是在线升级的关键步骤,以FRB-NUCLEO开发板为例,其Flash存储器分为三个区域:BootLoader区、App1区、App2区(备份区)。将程序合理分区,能够确保每次升级过程的安全性和稳定性。
接下来,我们将详细介绍BootLoader的编写。以示例BootLoader为例,我们通过将App2区的最后一个字节(0xFFFC)用于指示是否有升级程序,以及在擦除操作后将该地址存储为0xAAAAAAAA。这一过程确保了BootLoader在启动时能够准确识别是否有新的App程序需要加载。
在编写App程序时,我们将采用Ymodem协议进行串口传输,实现在线升级功能。根据Ymodem协议的原理,通过特定的通信协议将升级代码传输到目标设备。这一过程需确保通信稳定且高效,以保证升级过程的顺利完成。
为了验证BootLoader与App程序的在线升级功能,我们将进行整体测试。通过源代码的测试,可以确保升级过程的正确性与稳定性。源代码及文件可通过原作者的gitee平台获取,包含BootLoader源代码和App1源代码。
在实际应用中,我们可以通过Xshell等工具进行文件传输,实现在线升级功能的部署。此外,除了Ymodem协议,还可以利用蓝牙、Wi-Fi等其他通信协议进行升级操作,只要能够将.bin文件传输至目标设备,升级原理基本相同。
通过本文的学习,读者将掌握在线升级IAP的基本流程与实操技巧。理解原理后,可以灵活应用于不同场景,实现设备的远程升级与维护。
2024-11-14 12:57
2024-11-14 12:57
2024-11-14 11:46
2024-11-14 11:38
2024-11-14 11:09