加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在STM32F4,Cortex M4上写入/读取FLASH

发布时间:2020-12-15 07:26:06 所属栏目:百科 来源:网络整理
导读:我想写一个变量,例如一个数字为5的整数到FLASH,然后在电源消失后再次打开设备读取它. 我已经知道为了写东西我首先需要擦除页面然后写. 在手册中它说: Write OPTKEY1 = 0x0819 2A3B in the Flash option key register (FLASH_OPTKEYR) Write OPTKEY2 = 0x4C5
我想写一个变量,例如一个数字为5的整数到FLASH,然后在电源消失后再次打开设备读取它.

我已经知道为了写东西我首先需要擦除页面然后写.

在手册中它说:

  1. Write OPTKEY1 = 0x0819 2A3B in the Flash option key register (FLASH_OPTKEYR)
  2. Write OPTKEY2 = 0x4C5D 6E7F in the Flash option key register (FLASH_OPTKEYR)

我该如何执行此任务?

扇区0的块地址从0x0800 0000到0x0800 3FFF,这是我想写的地方.

这里是手册的链接,第71页:STM32 Manual

解决方法

您可以使用以下代码将数据写入使用HAL库进行闪存.

void Write_Flash(uint8_t data)
{
     HAL_FLASH_Unlock();
     __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
     FLASH_Erase_Sector(FLASH_SECTOR_6,VOLTAGE_RANGE_3);
     HAL_FLASH_Program(TYPEPROGRAM_WORD,FlashAddress,data);
     HAL_FLASH_Lock();
}

您应该如下更新链接描述文件.在MEMORY中添加DATA并在SECTIONS中添加.user_data.

MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000,LENGTH = 320K
CCMRAM (rw)      : ORIGIN = 0x10000000,LENGTH = 64K
FLASH (rx)      : ORIGIN = 0x8000000,LENGTH = 2048K
DATA (rwx)      : ORIGIN = 0x08040000,LENGTH = 128k
}

/* Define output sections */
SECTIONS
{
 .user_data :
  {
    . = ALIGN(4);
     KEEP(*(.user_data))
    . = ALIGN(4);
  } > DATA

您应该在主代码上添加以下属性,以便在打开电源后读取数据

__attribute__((__section__(".user_data"))) const char userConfig[64];

完成所有这些后,您可以通过调用userConfig [0]来读取您的闪存数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读