STM32的OTA学习---基于正点原子的教学视频

第一部:STM32启动过程

        启动模式:

1.从地址0X0000 0000 处取出堆栈指针MSP的初始值=栈顶地址

2.从地址0x0000 0004处取出程序计数器指针PC的初始值=复位向量(单片机是32位,每8位就是4个字节,所以地址+4)

以F1/F4系列:(F4第三种模式和F1有区别,但是不常用,需要请自己去看)

        在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被说存(后面该引脚可以被用来做其他的)

基本都是前两者

启动过程: 以内部FLASH启动为例

需要查看启动文件:

只要定义main()函数,编译器会自动定义__main

Reset_Handle函数介绍:
Reset_Handler PROC    //Reset_Handler 函数名
    EXPORT    Reset_Handler  [WEAK]    //表面全局属性,可被外部调用 [WEAK] 如果外部定义,则下面的程序作废,和#ifdenf endif功能差不多
    IMPORT __main // 声明来之外部文件,类extern
    IMPORT Systemlinit
    LDR R0,=Systemlinit //调用Systemlinit ,这是非必须得,如果外部没有使用,可以屏蔽掉
    BLX R0
    LDR R0=__main
    BX R0
    ENDP
     

第二部分:IAP部分:

        STM32三种烧录方式:

ISP 在系统编程:执行厂商的Bootloader程序进入ISP模式后,选择官方提供的烧录通信接口配置ISP编程工具对闪存进行烧录---需要进入启动模式中的模式二-系统寄存器

ICP在线编程:使用IDE并用过JTAG/SWD接口对闪存进行烧录

IAP在应用编程:使用用户的应用程序(Bootloader程序)对闪存进行烧录。将应用程序通过通信接口对闪存进行烧录----常被用做远程升级的手段

ISP和ICP都是程序hex文件,IAP生成bin文件

APP应用程序存放在Bootloader后预留(用作升级程序空间)后的位置

APP程序的生成步骤---以FLASH为例子

       1. 设置APP程序的程序起始地址和存储空间大小

                根据APP的程序设置

前面大小改进了,后面的位置也要更新变小,前面偏移64K,后面也要减小64K??

   ------------------------------插入如何看Bootloader程序大小------------------------------------------

双击工程名就会跳出.map文件

拉到最下面:可以看到  31.21K*1024=8800 设定的值要比这个大  

--------------------------------------------------------------------------------------------------------------------------

APP要在Bootloader后, 内存不能出现重叠,偏移量是0x200的倍数

工程中预留了10000

FLASH_APP的运行内容是可以共享的;

如果是SRAM_APP程序的话,需要修改内存大小-

2:设置中断向量表的偏移量

    

/**
* @brief 设置中断向量表偏移地址
* @param baseaddr
: 基址
* @param offset
: 偏移量
* @retval
在sys.c中提供
*/
void sys_nvic_set_vector_table(uint32_t baseaddr, uint32_t offset)
{
/* 设置 NVIC 的向量表偏移寄存器,VTOR 9 位保留,[8:0]保留 */
SCB->VTOR = baseaddr | (offset & (uint32_t)0xFFFFFE00);
}
/* 设置中断向量表偏移量为 0x10000 */
sys_nvic_set_vector_table(FLASH_BASE, 0x10000);

    

3.设置MDK编译后的运行fromelf.exe,生成.bin文件

指令:fromelf --bin -o ..\..\Output\@L.bin ..\..\Output\%L

4.已经生成.bin文件进行烧录

        1.使用串口接收,因为接收数组的大小需要大于APP的程序大小

        2.通过串口助手发送,点击发送文件,选择全部文件,找到.bin发送过去

        3.将接收后的数据写入FLASH,起始地址需要正确---APP的偏移地址

        4.设置条件运行APP地址---从FLASH中读取

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值