stm32f407读写内部flash
时间: 2023-04-28 13:03:28 浏览: 152
STM32F407读写内部Flash可以使用STM32CubeMX生成的库函数进行操作。使用HAL_FLASH_Program()可以写入数据到Flash,使用memcpy()或者直接赋值语句读取Flash中的数据。在操作Flash之前,需要设置好相应的寄存器。
相关问题
stm32f407 hal flash读写
在STM32F407上使用HAL库进行flash读写的示例代码如下所示:
```c
#include "stm32f4xx_hal.h"
#include "stdio.h"
#define FLASH_SAVE_ADDR 0x0800F800 // Flash保存地址
void HAL_FLASH_Read(uint32_t address, uint32_t* data, uint32_t size)
{
for (uint32_t i = 0; i < size; i++)
{
data[i = *(uint32_t*)address;
address
#### 引用[.reference_title]
- *1* [stm32f407读写flash的demo,基于正点原子探索者板](https://download.csdn.net/download/qq_31114955/10746705)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [STM32系列(HAL库)——内部FLASH读写实验](https://blog.csdn.net/lwb450921/article/details/124204299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
stm32f407读内部flash的代码怎么写
以下是读取 STM32F407 内部 Flash 的示例代码:
```c
#include "stm32f4xx_hal.h"
#define USER_FLASH_FIRST_PAGE_ADDRESS 0x0801F800
#define USER_FLASH_LAST_PAGE_ADDRESS 0x0801FFFF
#define ADDR_FLASH_PAGE_0 ((uint32_t)0x08000000)
#define ADDR_FLASH_PAGE_1 ((uint32_t)0x08004000)
#define ADDR_FLASH_PAGE_2 ((uint32_t)0x08008000)
#define ADDR_FLASH_PAGE_3 ((uint32_t)0x0800C000)
#define ADDR_FLASH_PAGE_4 ((uint32_t)0x08010000)
#define ADDR_FLASH_PAGE_5 ((uint32_t)0x08020000)
#define ADDR_FLASH_PAGE_6 ((uint32_t)0x08040000)
#define ADDR_FLASH_PAGE_7 ((uint32_t)0x08060000)
#define ADDR_FLASH_PAGE_8 ((uint32_t)0x08080000)
#define ADDR_FLASH_PAGE_9 ((uint32_t)0x080A0000)
#define ADDR_FLASH_PAGE_10 ((uint32_t)0x080C0000)
#define ADDR_FLASH_PAGE_11 ((uint32_t)0x080E0000)
void ReadFlashData(uint32_t FlashStartAddress, uint16_t* pBuf, uint16_t len) {
uint16_t* FlashAddress = (uint16_t*)FlashStartAddress;
while (len--) {
*pBuf++ = *FlashAddress++;
}
}
int main(void) {
HAL_Init();
uint32_t FlashAddress = USER_FLASH_FIRST_PAGE_ADDRESS;
uint16_t ReadBuffer[1024] = {0};
ReadFlashData(FlashAddress, ReadBuffer, 1024);
while (1) {
}
}
```
这里使用了 HAL 库提供的函数进行读写操作,具体可见 HAL 库源代码。
请注意,实际使用时需要特别注意 Flash 地址、读写长度等参数的正确性,否则可能会导致严重的后果。