用c语言写一个读写stm32f103c8t6内部的flash
时间: 2023-09-06 19:10:17 浏览: 99
对于读写STM32F103C8T6内部的Flash,可以使用STM32CubeMX和Keil MDK-ARM进行开发。以下提供一个基础的读写Flash的代码示例:
```c
#include "stm32f10x.h"
#define FLASH_PAGE_SIZE ((uint16_t)0x400)
#define FLASH_USER_START_ADDR ((uint32_t)0x08004000)
#define FLASH_USER_END_ADDR ((uint32_t)0x08008000)
void WriteFlash(uint32_t addr, uint32_t data)
{
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
if(addr < FLASH_USER_START_ADDR || addr >= FLASH_USER_END_ADDR)
{
return;
}
uint16_t data16 = (uint16_t)data;
FLASH_Status status = FLASH_COMPLETE;
while(status == FLASH_COMPLETE)
{
status = FLASH_ErasePage(addr);
}
status = FLASH_COMPLETE;
while(status == FLASH_COMPLETE)
{
status = FLASH_ProgramHalfWord(addr, data16);
}
FLASH_Lock();
}
uint32_t ReadFlash(uint32_t addr)
{
if(addr < FLASH_USER_START_ADDR || addr >= FLASH_USER_END_ADDR)
{
return 0xFFFFFFFF;
}
return *(uint32_t*)addr;
}
int main(void)
{
uint32_t test_data = 0x12345678;
WriteFlash(FLASH_USER_START_ADDR, test_data);
uint32_t read_data = ReadFlash(FLASH_USER_START_ADDR);
if(read_data == test_data)
{
// Flash读写成功
}
while (1);
}
```
该代码实现了一个简单的Flash读写功能,通过WriteFlash函数可以将数据写入Flash,通过ReadFlash函数可以从Flash中读取数据。使用时需要注意对Flash进行解锁和加锁,以及Flash擦除和编程的状态检查。同时需要注意Flash的起始地址和结束地址,根据自己的实际情况进行修改。
阅读全文