stm32L431 内部flash双字写数据
时间: 2023-08-29 14:08:30 浏览: 300
STM32L431内部Flash并不支持双字编程方式,只支持半字编程和字编程方式。因此,如果需要写入双字数据,需要将其拆分成两个字(Word)写入。
具体步骤如下:
1. 确认该Flash单元中原有的数据已被擦除。
2. 将双字数据拆分成两个字(Word)数据。
3. 使用HAL_FLASH_Program()函数,将第一个字(Word)数据写入该Flash单元的第一个地址。
4. 使用HAL_FLASH_Program()函数,将第二个字(Word)数据写入该Flash单元的第二个地址。
代码示例:
```
uint32_t data1 = 0x11223344;
uint32_t data2 = 0x55667788;
uint32_t address = 0x08008000; // 指定要写入的Flash单元地址
// 擦除Flash单元
FLASH_Erase_Sector(FLASH_SECTOR_3, FLASH_VOLTAGE_RANGE_3);
// 将双字数据拆分成两个字
uint32_t word1 = (data1 & 0x0000FFFF);
uint32_t word2 = ((data1 >> 16) & 0x0000FFFF);
uint32_t word3 = (data2 & 0x0000FFFF);
uint32_t word4 = ((data2 >> 16) & 0x0000FFFF);
// 写入第一个字(Word)数据
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, word1);
// 写入第二个字(Word)数据
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address + 4, word2);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address + 8, word3);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address + 12, word4);
```
需要注意的是,每个Flash单元(Word)只能被编程一次,多次编程会导致数据错误。因此,在编程之前,需要确保该Flash单元中原有的数据已被擦除。此外,为了防止写入数据时出现错误,建议在写入Flash数据时关闭全局中断,避免中断干扰。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)