stm32f411 读写内部flash的完整代码
时间: 2024-08-13 17:06:31 浏览: 50
STM32F411的内部Flash读写操作通常涉及HAL库(Hardware Abstraction Layer)提供的API。以下是一个使用HAL库进行STM32F411 Flash读写的简化示例代码:
```c
#include "stm32f4xx_hal.h"
#include "usart.h" // 如果你打算通过串口显示操作结果
// Flash操作结构体
typedef struct {
uint32_t Address; // 操作地址
uint32_t Data; // 数据(写入时)
uint32_t Buffer; // 用于读取的缓冲区
} FlashOperation;
void flash_erase_sector(FlashOperation *op) {
HAL_FLASHEx_Erase(&op->Address, FLASH_BANK_1, op->Address & (FLASH_SIZE - 1));
}
void flash_program_page(FlashOperation *op) {
HAL_FLASHEx_Program(&op->Address, FLASH_BANK_1, op->Buffer, op->Address & ~(FLASH_PAGE_SIZE-1), FLASH_WORD);
}
void flash_read_page(FlashOperation *op) {
HAL_FLASHEx_ReadIDR(&op->Address, op->Buffer, FLASH_BANK_1);
}
int main(void) {
// 初始化硬件和HAL库
HAL_Init();
__HAL_RCC_USARTx_CLK_ENABLE(); // 例如USART3用于串口通信
FlashOperation op = {0};
op.Address = 0x8000000; // 设置要操作的Flash地址,具体地址要根据实际应用
op.Data = 0x12345678; // 写入数据,只在写操作中使用
// 擦除特定扇区
flash_erase_sector(&op);
// 写入数据到指定地址
if (flash_program_page(&op) != HAL_OK) {
// 处理错误
return 1;
}
// 读取同一地址的数据
if (flash_read_page(&op)) {
// 打印读取到的数据
USART3_SendData(op.Buffer);
} else {
// 处理错误
return 1;
}
while (1) {
// 循环等待更多操作
}
}
```
阅读全文