stm32f103cb的flash读写实例代码(标准库)
时间: 2025-02-16 12:59:19 浏览: 91
### STM32F103CB Flash读写示例代码
对于STM32F103CB微控制器而言,利用标准库进行Flash操作涉及初始化、擦除页、编程字以及验证数据等功能。下面提供一段基于ST官方标准外设库的Flash读写例子。
#### 初始化函数
为了确保Flash能够正常工作,在执行任何读写之前应该调用初始化函数来配置必要的参数:
```c
void FLASH_Init(void){
/* Enable the FLASH interface clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_FLASH, ENABLE);
}
```
#### 擦除指定页面
在向Flash存储器中写入新数据前,通常需要先擦除目标地址所在的整个页面:
```c
uint8_t ErasePage(uint32_t Page_Address){
uint8_t status = 0;
// Unlock the Flash Program Erase Controller
if (FLASH_Unlock() != HAL_OK) {
return ERROR;
}
// Clear all pending flags
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR);
// Fill EraseInit structure
FLASH_EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
FLASH_EraseInitStruct.PageAddress = Page_Address;
FLASH_EraseInitStruct.NbPages = 1;
// Call erase function
if (HAL_FLASHEx_Erase(&FLASH_EraseInitStruct, &erase_status) != HAL_OK) {
status |= ERROR;
}
// Lock the Flash to disable the flash control register access
FLASH_Lock();
return status;
}
```
#### 编程单个字节或半字
完成页面擦除之后就可以逐字地往里面填充新的二进制数值了:
```c
uint8_t WriteHalfWord(uint32_t Address, uint16_t Data){
uint8_t status = 0;
// Unlock the Flash Program Erase Controller
if (FLASH_Unlock() != HAL_OK) {
return ERROR;
}
// Perform half word program operation at address specified by Address with data value specified by Data.
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Address, Data)!= HAL_OK){
status |= ERROR;
}
// Lock the Flash to disable the flash control register access
FLASH_Lock();
return status;
}
```
#### 数据校验功能
最后还需要加入一个简单的检验机制用来确认实际写入的内容是否正确无误:
```c
uint8_t VerifyData(uint32_t StartAddr,uint32_t Length,uint8_t *pData){
while(Length--){
if(*(__IO uint8_t*)StartAddr++!=*pData++){
return ERROR;
}
}
return SUCCESS;
}
```
上述代码片段展示了如何通过ST的标准外设库APIs对内部Flash进行基本的操作[^1]。值得注意的是这里假设读者已经熟悉C语言语法结构并具备一定的硬件基础知识;另外由于不同版本之间可能存在差异因此建议参照具体型号的数据手册获取最准确的信息。
阅读全文
相关推荐













