13、FLASH读写之三
因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分
1、RAM和ROM的一些基本概念 —— STM32学习笔记:FLASH读写之一
2、STM32的Flash寄存器及介绍 —— STM32学习笔记:FLASH读写之二
3、STM32的Flash读写相关函数 —— STM32学习笔记:FLASH读写之三
4、STM32的Flash自己编辑函数 —— STM32学习笔记:FLASH读写之四
本文将详细介绍STM32的Flash读写相关的官方库函数
目录
0x01、解锁、锁定操作
0x02、写Flash函数
0x03、擦除函数
0x04、获取Flash状态函数
0x05、等待操作完成函数
0x06、读Flash函数
我们先来看一下STM32 的官方固件库操作 FLASH 的几个常用函数。这些函数和定义分布在文件 stm32f10x_flash.c 以及 stm32f10x_flash.h 文件中。
0x01、解锁、锁定操作
void FLASH_Unlock(void)
函数功能:解锁Flash
void FLASH_Lock(void)
函数功能:锁定Flash
0x02、写Flash函数
FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data)
函数功能:向指定的地址写入一个字(32位)。
参数1:uint32_t Address —> 指定要写入的地址
参数2:uint32_t Data —> 指定要写入的数据
返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT.
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)
函数功能:向指定的地址写入一个半字(16位)。
参数1:指定要写入的地址
参数2:指定要写入的数据
返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT.
FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data)
函数功能:向指定的地址写入一个字节(8位)。
参数1:指定要写入的地址
参数2:指定要写入的数据
返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT.
0x03、擦除函数
FLASH_Status FLASH_ErasePage(uint32_t Page_Address)
函数功能:擦除指定页
参数1:uint32_t Address —> 指定要擦除的地址
返回值:FLASH Status —> FLASH_BUSY,FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT.
FLASH_Status FLASH_EraseAllPages(void)
函数功能:擦除所有页
返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT.
FLASH_Status FLASH_EraseOptionBytes(void)
函数功能:擦除闪存选项字节。
返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT.
0x04、获取Flash状态函数
FLASH_Status FLASH_GetStatus(void)
函数功能:获取Flash状态。
返回值:FLASH Status —> FLASH_BUSY,FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE
0x05、等待操作完成函数
FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout)
函数功能:等待闪存操作完成或超时。
返回值:FLASH Status —> FLASH_ERROR_PG,FLASH_ERROR_WRP,FLASH_COMPLETE ,FLASH_TIMEOUT.
0x06、读Flash函数
这个函数在标准库中没有,我们自己来编写一个,函数定义风格与库函数尽量保持一致。
uint16_t STMFLASH_ReadHalfWord(uint32_t faddr)
函数功能:读出指定地址的半字(16位)数据。
参数1:指定要写入的地址
返回值:读出的半字数据(16位)
/**
*@brief 读取指定地址的半字(16位数据)
*@param faddr:读地址(此地址必须为2的倍数!!)
*@return 读取的数据.
*/
uint16_t STMFLASH_ReadHalfWord(uint32_t faddr)
{return *(vu16*)faddr;
} 注:
1、上述函数的返回值类型都是FLASH Status,该值是一个枚举型常量,定义如下
typedef enum
{ FLASH_BUSY = 1, // 忙FLASH_ERROR_PG, // 编程错误FLASH_ERROR_WRP, // 写保护错误FLASH_COMPLETE, // 操作完成FLASH_TIMEOUT // 操作超时
}FLASH_Status; 2、因为写Flash,一次只能写入半字(16位),所以写一个字(32位)是通过写入2次实现的,写入一次后地址加2,再写入。那么写入1个字节数据也需要占用半个字的地址(16位地址)。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
