STM32F103 内部FLASH 读写数据的代码
时间: 2024-10-10 13:12:05 浏览: 37
STM32F103单片机内部Flash存储器通常用于长期保存程序和配置数据。以下是使用Keil MDK(一种常见的STM32开发工具集)以及HAL库编写的基本示例代码,它展示了如何通过GPIO控制Flash的读取操作:
```c
#include "stm32f1xx_hal.h"
// 假设GPIOA的PA8和PA9用于Flash地址线
__IO uint32_t *flash_address = (uint32_t *)0x08000000; // Flash的起始地址
void WriteFlash(uint32_t addr, const uint8_t* data, uint32_t size) {
HAL_StatusTypeDef status;
// 开启Flash等待状态
__HAL_FLASH_SET_LATENCY(FLASH_LATENCY_4);
// 配置GPIOs作为地址线
GPIO_InitTypeDef gpio_init_struct;
gpio_init_struct.Pin = GPIO_PIN_8 | GPIO_PIN_9;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Pull = GPIO_NOPULL;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
gpio_init_struct.Alternate = GPIO_AF6_FLASH;
HAL_GPIO_Init(GPIOA, &gpio_init_struct);
// 设置地址
for (int i = 0; i < 16; i++) {
flash_address[i] = addr >> (i * 8);
}
// 打开Flash
__HAL_FLASH_ENABLE();
// 写入Flash
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BANK1, addr, (uint32_t*)data, size);
if (status != HAL_OK) {
while (1); // 挂起,处理错误
}
// 关闭Flash并释放GPIO资源
__HAL_FLASH_DISABLE();
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_8 | GPIO_PIN_9);
}
// 示例:向Flash地址0x08000000开始处写入16字节的数据
const uint8_t test_data[] = {0x01, 0x02, ...};
WriteFlash(0x08000000, test_data, sizeof(test_data));
```
阅读全文