读书

STM32:FLASH模拟EEPROM

2023-07-12  本文已影响0人  xEndLess

MCU:STM32F407ZGT6
RTOS: FreeRTOS

1. 选定一块flash

stm32f407_flash.png

stm32的flash是以sector为单位擦除的。所以选择flash的时候需要选择完整的sector。这里我选择了sector3和sector4。为什么选择两个sector呢?因为FLASH模拟EEPROM的库需要用到两个sector。

2. 在Flash中开辟一段空间,供用户使用

在STM32F407VETx_FLASH.ld中增加如下代码:

/* Define output sections */
SECTIONS
{
  /* The startup code goes first into FLASH */
  .isr_vector :
  {
    . = ALIGN(4);
    KEEP(*(.isr_vector)) /* Startup code */
    . = ALIGN(4);
  } >FLASH

  .user_config 0x08008000 :
  {
    . = ALIGN(4);
    . = . + 0x8000;
    . = ALIGN(4);
  } >FLASH

......

}

.user_config 0x08008000 :中0x08008000是sector2的起始地址,. = . + 0x8000;这里的0x8000是32Kbytes。

3. 初始化

uint16_t VirtAddVarTab[NB_OF_VAR];
uint16_t power_down_info_half_word_count = 0;

static void start_task_code(void *arg)
{
    elog_init();
    elog_set_text_color_enabled(true);
    elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE | ELOG_FMT_T_INFO);
    elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_T_INFO);
    elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_T_INFO);
    elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE | ELOG_FMT_T_INFO);
    elog_start();

    /* 初始化变量虚地址表 */
    power_down_info_half_word_count = sizeof(power_down_info_t) / 2;
    log_i("power_down_info_t have %d half word.", sizeof(power_down_info_t) / 2);
    for (uint16_t i = 0; i < power_down_info_half_word_count && i < NB_OF_VAR; i++) {
        VirtAddVarTab[i] = i;
    }
    HAL_FLASH_Unlock();
    EE_Init();
    ......
}

4.读操作

for (uint16_t i = 0; i < power_down_info_half_word_count; i++) {
    EE_ReadVariable(i, ((uint16_t *)(&power_down_info) + i));
}

5.写操作

for (uint16_t i = 0; i < power_down_info_half_word_count; i++) {
    EE_WriteVariable(i, *((uint16_t *)(&power_down_info) + i));
}

6.库地址

地址:https://www.aliyundrive.com/s/fUE5g5VBCqp
提取码:7qx0

上一篇 下一篇

猜你喜欢

热点阅读