stm32f103 内部flash的读写和擦除代码
时间: 2024-09-14 07:06:27 浏览: 10
STM32F103是ST公司生产的一款性能较高的ARM Cortex-M3微控制器,具备内部Flash存储器。STM32F103内部Flash的读写和擦除通常通过其内部的Flash接口和控制寄存器来实现。下面是一个简化的示例,展示了如何对STM32F103内部Flash进行基本的读写和擦除操作:
1. 初始化Flash接口
2. 擦除Flash页
3. 编程Flash
首先需要包含相应的头文件,并确保链接了必要的库文件,然后按照STM32的参考手册提供的步骤进行操作。以下代码使用STM32标准库的函数进行操作:
```c
#include "stm32f10x.h"
// 假设要写入的Flash地址为0x0800FC00,这通常是用户Flash的末尾部分
#define FLASH_USER_START_ADDR ADDR_FLASH_PAGE_100 // 需要根据实际情况定义
#define FLASH_USER_END_ADDR (FLASH_USER_START_ADDR + FLASH_PAGE_SIZE) // 页大小根据具体型号确定
void FLASH_If_Write(uint32_t* Address, uint32_t* Data, uint16_t NbWords)
{
uint32_t i = 0;
// 使能Flash写操作
FLASH_Unlock();
// 清除所有Flash标志
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
// 写入数据到Flash
for (i = 0; i < NbWords; i++) {
// 写入一个字
*Address++ = *Data++;
}
// 禁止Flash写操作
FLASH_Lock();
}
void FLASH_If_Erase(uint32_t StartPageAddress, uint32_t EndPageAddress)
{
uint32_t PageError = 0;
// 使能Flash擦除操作
FLASH_Unlock();
// 擦除指定页
FLASH_ErasePage(StartPageAddress);
// 禁止Flash擦除操作
FLASH_Lock();
}
int main(void)
{
uint32_t DataToWrite[10]; // 假设要写入的数据数组
uint32_t Address = FLASH_USER_START_ADDR; // 起始地址
uint32_t NbWordsToWrite = 10; // 要写入的字数
// 填充要写入的数据
for (int i = 0; i < NbWordsToWrite; i++) {
DataToWrite[i] = i;
}
// 擦除Flash页
FLASH_If_Erase(FLASH_USER_START_ADDR, FLASH_USER_END_ADDR);
// 写入数据到Flash
FLASH_If_Write((uint32_t*)Address, DataToWrite, NbWordsToWrite);
while(1)
{
// 主循环
}
}
```
请注意,上述代码仅作为参考,实际应用时需要根据具体的硬件环境和库函数版本进行调整。在操作Flash之前,务必要确保已经正确配置了Flash的时钟源,并且在Flash的可编程范围内进行操作,以免造成不可逆的硬件损坏。