zoukankan      html  css  js  c++  java
  • STM32F4 串口IAP程序要点

    1. IAP(bootloader)程序

    1.1 内部Flash地址分配

    /* Start of the Flash address */
    #define STM32_FLASH_BASE         0x08000000 
    /* End of the Flash address */
    #define STM32_FLASH_END_ADDRESS  0x081FFFFF    //Flash Size 2MB
    /* Define the IAP application size */
    #define IAP_FLASH_SIZE            0x8000    //bootloader size 32KB
    /* Define the address from where user application will be loaded. */
    #define FLASH_APP_ADDR            (uint32_t)(STM32_FLASH_BASE+IAP_FLASH_SIZE)      
    /* Define the user application size */
    #define FLASH_APP_SIZE           (STM32_FLASH_END_ADDRESS - FLASH_APP_ADDR + 1)

    1)设置内部Flash起始地址(STM32_FLASH_BASE):固定值0x0800 0000

    2)设置内部Flash结束地址(STM32_FLASH_END_ADDRESS):根据实际使用的芯片闪存大小进行设置,因为我使用的是STM32F429ZIT6,其闪存大小为2MB,这里设置为0x081F FFFF

    3)设置IAP程序Size(IAP_FLASH_SIZE):一般为16Kb左右(0x4000)。这里设置为0x8000即32KB(0x0800 0000~0x0800 7FFF),占用扇区0和扇区1。

    4)设置APP程序起始地址(FLASH_APP_ADDR):STM32F4内部Flash起始地址 + IAP程序Size=0x0800 8000

    5)设置APP程序Size(FLASH_APP_SIZE):内部Flash结束地址 - APP程序起始地址 + 1

    1.2 MDK编译器中设置IAP程序下载起始地址与大小

    这里设置将IAP程序下载到STM32_FLASH_BASE = 0x0800 0000,大小IAP_FLASH_SIZE = 0x8000(这里设置和IAP_FLASH_SIZE值一致,可以保证当IAP程序大于32KB时,编译器会报错,这时你需要考虑修改IAP_FLASH_SIZE的值,或者精简代码)

    1.3 设置中断向量表起始地址

       在main()函数开始的位置加入以下代码,设置中断向量表存放在SCB->VTOR + 4 = 0x0800 0004起始的地址:

    SCB->VTOR = FLASH_BASE | 0x00;//设置中断向量表偏移量. 也可以在SystemInit() 里设置VECT_TAB_OFFSET

    2. APP应用程序

    2.1 MDK编译器中设置APP程序下载起始地址与大小

       APP起始地址和上面1.1.4)中FLASH_APP_ADDR的值一致,Size设置为0x0020 0000,即2MB。

    2.2 设置中断向量表起始地址

      在main()函数开始的位置加入以下代码,设置中断向量表存放在SCB->VTOR + 4 = 0x0800 8004起始的地址:

    #define IAP_FLASH_SIZE 0x8000 //bootloader size 32KB
    SCB->VTOR = FLASH_BASE | IAP_FLASH_SIZE;//设置偏移量 FLASH_BASE | 0x8000
    这里请注意:中断向量表存放的位置必须是0x200的倍数,因此,这里IAP_FLASH_SIZE 也必须是0x200的倍数,即0x00, 0x200, 0x400 ...

    3. 在MDK生成.bin文件

    D:keil5ARMARMCCinfromelf.exe --bin --output ../OBJ/PWM.bin ../OBJ/PWM.axf
    说明:
    fromelf: D:keil5ARMARMCCinfromelf.exe
    MDK自带工具路径,笔者的路径如上所示,请修改为自己的路径(或者点击右边的文件夹小图标,找到该工具)。
    [options]: --bin --output ../OBJ/PWM.bin
    生成bin文件命令,想把生成的bin文件放在什么地方(记住路径最前面是 ../(两个点),而不是 ./(一个点),之前就被坑了)。
    input_file: ../OBJ/PWM.axf
    输入文件,这里是用axf格式的文件转换为bin文件,找到你工程里的axf文件所在位置,填上去就可以了。
  • 相关阅读:
    使用Tensorflow和MNIST识别自己手写的数字
    js 判断浏览器是否64位
    Spring动态注册bean实现动态多数据源
    springMVC 静态资源加版本号
    自定义Jquery插件——由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件
    MySQL Community Server 5.5.56 ZIP Archive 绿色解压版 window安装步骤
    【我整理的java开源项目】
    Java使用反射来获取成员变量泛型信息
    Intellij IDEA 各种乱码解决方案 posted @ 2017-06-23 15:31:06
    Django drf:cbv源码、resful规范及接口、drf使用、response源码、序列化
  • 原文地址:https://www.cnblogs.com/Mike2019/p/12055996.html
Copyright © 2011-2022 走看看