stm32f103c8t6使用内部FLASH存储数据代码
时间: 2023-07-29 17:12:13 浏览: 61
以下是使用STM32F103C8T6内部FLASH存储数据的示例代码:
```c
#include "stm32f10x.h"
#define FLASH_USER_START_ADDR ((uint32_t)0x08008000) // FLASH起始地址
#define FLASH_USER_END_ADDR ((uint32_t)0x0800FFFF) // FLASH结束地址
uint32_t FLASH_WriteData(uint32_t address, uint32_t data)
{
uint32_t flashstatus = 0;
if (address < FLASH_USER_START_ADDR || address > FLASH_USER_END_ADDR)
return 1; // 地址非法
FLASH_Unlock();
flashstatus = FLASH_ErasePage(address); // 擦除页
if (flashstatus == FLASH_COMPLETE)
{
flashstatus = FLASH_ProgramWord(address, data); // 写入数据
if (flashstatus == FLASH_COMPLETE)
return 0; // 写入成功
else
return 2; // 写入失败
}
else
return 3; // 擦除失败
}
uint32_t FLASH_ReadData(uint32_t address)
{
if (address < FLASH_USER_START_ADDR || address > FLASH_USER_END_ADDR)
return 0xFFFFFFFF; // 地址非法
return (*(__IO uint32_t*)address); // 读取数据
}
```
在这个示例代码中,`FLASH_USER_START_ADDR` 和 `FLASH_USER_END_ADDR` 定义了我们可以使用的FLASH地址范围。`FLASH_WriteData` 函数用于向指定地址写入数据,`FLASH_ReadData` 函数用于从指定地址读取数据。需要注意的是,写入操作会先擦除整个写入页,因此写入速度会比较慢。
使用示例:
```c
uint32_t data = 0x12345678;
if (FLASH_WriteData(FLASH_USER_START_ADDR, data) == 0)
printf("Write data to FLASH succeeded!\r\n");
uint32_t read_data = FLASH_ReadData(FLASH_USER_START_ADDR);
if (read_data == data)
printf("Read data from FLASH succeeded!\r\n");
```
这个示例将 `data` 写入到FLASH的起始地址,然后再从这个地址读取数据,如果读取到的数据与写入的数据相同,就说明读写操作成功。