• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32 指定变量存储在Flash的地址上的方法

s7ud 2020-03-24 浏览量:1642
STM32 指定变量存储在Flash的地址上
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 最简单的方法就是使用__attribute__了

    uint8_t   UART_RX_BUF[1024]   __attribute__ ((at(0X20001000)));   //就是将串口接收的数据定位到RAM中起始地址为0X20001000;

    • 发布于 2020-04-10
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 可以用flash库函数里面的FLASH_WriteMoreData函数来写入指定数据

    • 发布于2020-03-24
    • 举报
    • 评论 0
    • 0
    • 0

  • STM32的flash要求先擦除再写入,另外写入的时候要注意大小端字节的问题
    • 发布于2020-03-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先,是可以把数据存储到flash的指定位置的,不过这个过程需要注意区分该地址是否已经符合写入要求,分好几种情况

    1. 符合写入要求,直接写入

    2. 不符合写入要求

        2.1同块数据区无其他数据,直接擦除块后写入

        2.2同块数据区有其他数据,备份同块数据区数据,擦除块,把备份数据和新数据一同写入


    • 发布于2020-03-25
    • 举报
    • 评论 0
    • 0
    • 0

  • STM32 支持AT 指令吧。 可以固定存在一个地址。  在声明的时候应用。  
    • 发布于2020-03-25
    • 举报
    • 评论 0
    • 0
    • 0

  • STM32的默认链接文件配置。

    001.png

    修改Scatter File文件。添加下图中红框内的代码,该代码的含义是定义一个区域RW_IROM2(段属性为UNINIT_FIXED_LOC),该区域的起始地址为0x081F8000,大小为0x00008000。.ANY(UNINIT_FIXED_LOC)表示存储任何段属性为UNINIT_FIXED_LOC的数据。

    001.png

    取消1处的勾选,在2处选择自己修改过后的Scatter File。

    001.png

    如此,在编程时,只需如此定义相应的数据类型。

    uint8_t version2[12] __attribute__((section("UNINIT_FIXED_LOC") zero_init));

    在编译通过后,查看.map文件,可以看到0x081f8000处存储了0x0000000c大小的数据,段属性为UNINIT_FIXED_LOC
    001.png

    • 发布于2020-03-26
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32 指定变量存储在Flash的地址上的方法