如何在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,然后在电源消失后再次打开设备读取它.
我已经知道为了写东西我首先需要擦除页面然后写. 在手册中它说:
我该如何执行此任务? 扇区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]来读取您的闪存数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |