/**
******************************************************************************
* @文件 stm32f10x_flash.c
* @作者 MCD 应用程序组
* @版本 V3.1.0
* @日期 06/19/2009
* @简述 这个文件 提供所有 FLASH 固件函数.
* @翻译 ANSON/sweet1985 Email:airanson110@126.com
* @日期 23/07/2009
******************************************************************************
* @复件
*
* 这个固件仅仅是提供给客户作为设计产品而编写程序的参考目的使客户节约时间。由于
* 客户使用本固件在开发产品编程上产生的结果意法半导体公司不承担任何直接的和间接
* 的责任,也不承担任何损害而引起的赔偿。
*
* <h2><center>&复制; 版权所有 2009 意法半导体公司</center></h2>
* 翻译版本仅供学习,如与英文原版有出入应以英文原版为准。
*/
/* 包含 ------------------------------------------------------------------*/
#include "stm32f10x_flash.h"
/* 自用类型 --------------------------------------------------------------*/
/* 自用定义 --------------------------------------------------------------*/
/* Flash Access Control Register bits */
#define ACR_LATENCY_Mask ((uint32_t)0x00000038)
#define ACR_HLFCYA_Mask ((uint32_t)0xFFFFFFF7)
#define ACR_PRFTBE_Mask ((uint32_t)0xFFFFFFEF)
/* Flash Access Control Register bits */
#define ACR_PRFTBS_Mask ((uint32_t)0x00000020)
/* Flash Control Register bits */
#define CR_PG_Set ((uint32_t)0x00000001)
#define CR_PG_Reset ((uint32_t)0x00001FFE)
#define CR_PER_Set ((uint32_t)0x00000002)
#define CR_PER_Reset ((uint32_t)0x00001FFD)
#define CR_MER_Set ((uint32_t)0x00000004)
#define CR_MER_Reset ((uint32_t)0x00001FFB)
#define CR_OPTPG_Set ((uint32_t)0x00000010)
#define CR_OPTPG_Reset ((uint32_t)0x00001FEF)
#define CR_OPTER_Set ((uint32_t)0x00000020)
#define CR_OPTER_Reset ((uint32_t)0x00001FDF)
#define CR_STRT_Set ((uint32_t)0x00000040)
#define CR_LOCK_Set ((uint32_t)0x00000080)
/* FLASH Mask */
#define RDPRT_Mask ((uint32_t)0x00000002)
#define WRP0_Mask ((uint32_t)0x000000FF)
#define WRP1_Mask ((uint32_t)0x0000FF00)
#define WRP2_Mask ((uint32_t)0x00FF0000)
#define WRP3_Mask ((uint32_t)0xFF000000)
/* FLASH Keys */
#define RDP_Key ((uint16_t)0x00A5)
#define FLASH_KEY1 ((uint32_t)0x45670123)
#define FLASH_KEY2 ((uint32_t)0xCDEF89AB)
/* Delay definition */
#define EraseTimeout ((uint32_t)0x00000FFF)
#define ProgramTimeout ((uint32_t)0x0000000F)
/* 自用宏 -------------------------------------------------------------*/
/* 自用变量 -----------------------------------------------------------*/
/* 自用函数原型 -------------------------------------------------------*/
/* 自用函数 -----------------------------------------------------------*/
/**
* @简述 设置代码延时值.
* @参数 FLASH_Latency: 指定的 FLASH 延时值.
* 这个参数可以是下面的值之一:
* FLASH_Latency_0: FLASH 0个延时周期
* FLASH_Latency_1: FLASH 1个延时周期
* FLASH_Latency_2: FLASH 2个延时周期
* @返回 没有
*/
void FLASH_SetLatency(uint32_t FLASH_Latency)
{
uint32_t tmpreg = 0;
/* 检查参数 */
assert_param(IS_FLASH_LATENCY(FLASH_Latency));
/* 读 ACR 寄存器 */
tmpreg = FLASH->ACR;
/* 设置延时值 */
tmpreg &= ACR_LATENCY_Mask;
tmpreg |= FLASH_Latency;
/* 写 ACR 寄存器 */
FLASH->ACR = tmpreg;
}
/**
* @简述 使能或者失能 FLASH 半周期访问.
* @参数 FLASH_HalfCycleAccess: 指定的 FLASH 半周期访问模式.
* 这个参数可以是下面的值之一:
* FLASH_HalfCycleAccess_Enable: 半周期访问使能
* FLASH_HalfCycleAccess_Disable: 半周期访问失能
* @返回 没有
*/
void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess)
{
/* 检查参数 */
assert_param(IS_FLASH_HALFCYCLEACCESS_STATE(FLASH_HalfCycleAccess));
/* 使能或者失能半周期访问 */
FLASH->ACR &= ACR_HLFCYA_Mask;
FLASH->ACR |= FLASH_HalfCycleAccess;
}
/**
* @简述 使能或者失能预取缓存.
* @参数 FLASH_PrefetchBuffer: 指定的预取缓存状态.
* 这个参数可以是下面的值之一:
* FLASH_PrefetchBuffer_Enable: 使能预取指缓存
* FLASH_PrefetchBuffer_Disable: 失能预取指缓存
* @返回 没有
*/
void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer)
{
/* 检查参数 */
assert_param(IS_FLASH_PREFETCHBUFFER_STATE(FLASH_PrefetchBuffer));
/* 使能或者失能预取缓存 */
FLASH->ACR &= ACR_PRFTBE_Mask;
FLASH->ACR |= FLASH_PrefetchBuffer;
}
/**
* @简述 解锁 FLASH 编写擦除控制器.
* @参数 没有
* @返回 没有
*/
void