STM32学习笔记:FLASH读写之三

因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下3个部分

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位地址)。

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页