boot loader制作【STM32】

开发环境

        KEIL5

板载环境

        stm32f103c8

一、bootloader初始化

        1、定时器初始化

                作用:定时自动跳转至应用,一般设置为1~2秒

        2、通讯方式初始化

                CAN、UART等

        3、板载初始化(重要)

                (1)确定应用跳转地址

                        跳转地址即应用储存起始地址,在应用中设置启动偏移地址与该地址一致

                (2)确定应用存储空间大小

                       1)存储空间大小不可以超过芯片FLASH大小

                        2)存储空间大小应设置为整数,该“整数”理解为扇区大小*扇区数量

                               中、小容量单片机一个扇区1KB  (存储空间小于256K)

                                大容量单片机一个扇区2KB        (存储空间大于等于256K)

                        3)存储空间大小应该去除bootloader所占用空间

                #define APP_ADDR                        0x8002000
                #define FLASH_SECTOR_SIZE        1024
                #define APP_FLASH_SECTORS        50
                #define APP_SIZE_MAX     (APP_FLASH_SECTORS*FLASH_SECTOR_SIZE)   

                注:stm32f103c8 FLASH 大小64K,bootloader占用8K,预留8K用于存储软件参数,                            剩余50K用于存放固件

         4、跳转函数

typedef  void (*pFunction)(void);

//Addr 传参即为上述定义的APP_ADDR                        
void iap_load_app(uint32_t Addr)
{
  static pFunction Jump_To_Application;
  __IO uint32_t JumpAddress;     
//    __enable_irq();
  /* Test if user code is programmed starting from address "ApplicationAddress" */
  if (((*(__IO uint32_t*)Addr) & 0x2FFE0000 ) == 0x20000000)
  { 
    /* Jump to user application */
    JumpAddress = *(__IO uint32_t*) (Addr + 4);
    Jump_To_Application = (pFunction) JumpAddress;
    //__set_PRIMASK(1);//关闭所有中断
    /* Initialize user application's Stack Pointer */
    __set_MSP(*(__IO uint32_t*)Addr);
    Jump_To_Application();
  }
}

         bootloader在进入app之前使用__set_PRIMASK(1);函数关闭了中断,在app中需要将中断打开__set_PRIMASK(0);因为我的bootloader中并未使用任何中断,因此将该函数屏蔽。

        bootloader在进入跳转函数之前,应该注销硬件初始化。

        5、定义固件升级协议

                此协议内容根据需要自定义,不再赘述,但应包含如下协议内容:

                (1)握手

                        告知上位机,板载进入bootloader,可以开始应用升级

                (2)FLASH擦除

                        擦除应用存储空间所有内容

                (3)固件升级

                        将应用写入指FLASH地址

                (4)程序校验

                        告知上位机。应用升级失败

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 UART Bootloader是一种用于STM32微控制器的引导加载程序(Bootloader)。通常情况下,微控制器通过串行通信接口(UART)与计算机或其他外部设备进行通信。通过使用UART Bootloader,可以在不使用外部编程器的情况下,通过UART接口将固件更新到STM32芯片中。 STM32 UART Bootloader的工作原理如下:首先,将芯片上电,然后将脚引导到引导模式。通过UART接口将引导加载程序(Bootloader)加载到芯片中,并在计算机上打开串口终端程序。在终端程序中,用户可以通过命令行或图形界面选择要加载到芯片中的固件文件。程序员可以使用特定的协议(例如Ymodem或Xmodem)通过UART接口将固件文件传送到芯片中。然后,Bootloader程序会将固件下载到芯片的内部存储器中,并将其写入相关的存储器区域。固件更新完成后,芯片将从新的固件启动。 使用STM32 UART Bootloader的好处是可以通过简单的串口连接进行固件更新,而不需要额外的编程器或开发板。这使得固件更新过程相对简单且方便。此外,由于UART接口在许多应用中普遍存在,因此UART Bootloader广泛应用于许多嵌入式系统中,提供了更好的灵活性和可扩展性。 总之,STM32 UART Bootloader是一种可通过UART接口更新芯片固件的引导加载程序。它提供了一种简单方便的方法,使用户能够快速、灵活地进行固件更新操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值