例:
/*ConfiguretheLatencycycle:
Set2Latencycycles*/
FLASH_SetLatency(FLASH_Latency_2);
函数原型如下:
voidFLASH_SetLatency(u32FLASH_Latency)
{
/*Checktheparameters*/
assert_param(IS_FLASH_LATENCY(FLASH_Latency));
/*SetstheLatencyvalue*/
FLASH->ACR&=ACR_LATENCY_Mask;//0x00000038,高位保留位必须保持为0
FLASH->ACR|=FLASH_Latency;
}
9.2.2函数FLASH_HalfCycleAccessCmd
Table147.函数FLASH_HalfCycleAccessCmd
函数名
FLASH_HalfCycleAccessCmd
函数原形
voidFLASH_HalfCycleAccessCmd(u32FLASH_HalfCycleAccess)
功能描述
使能或者失能FLASH半周期访问
输入参数
FLASH_HalfCycleAccess:
FLASH_HalfCycle访问模式
输出参数
无
返回值
无
先决条件
无
被调用函数
无
FLASH_HalfCycleAccess:
用来选择FLASH半周期访问的模式。
Table148.FLASH_HalfCycleAccess值
FLASH_HalfCycleAccess
描述/ACR.HLFCYA
Value/bit4
FLASH_HalfCycleAccess_Enable
半周期访问使能
0x00000008
FLASH_HalfCycleAccess_Disable
半周期访问失能
0x00000000
例:
/*EnabletheHalfCycleFlashaccess*/
FLASH_HalfCycleAccessCmd(FLASH_HalfCycleAccess_Enable);
函数原型如下:
voidFLASH_HalfCycleAccessCmd(u32FLASH_HalfCycleAccess)
{
/*Checktheparameters*/
assert_param(IS_FLASH_HALFCYCLEACCESS_STATE(FLASH_HalfCycleAccess));
/*EnableordisabletheHalfcycleaccess*/
FLASH->ACR&=ACR_HLFCYA_Mask;//Mask=0xFFFFFFF7
FLASH->ACR|=FLASH_HalfCycleAccess;
}
9.2.3函数FLASH_PrefetchBufferCmd
Table149.函数FLASH_PrefetchBufferCmd
函数名
FLASH_PrefetchBufferCmd
函数原形
voidFLASH_PrefetchBufferCmd(u32FLASH_PrefetchBuffer)
功能描述
使能或失能预取指缓存
输入参数
FLASH_PrefetchBuffer:
预取指缓存状态
输出参数
无
返回值
无
先决条件
无
被调用函数
无
FLASH_PrefetchBuffer:
用来选择FLASH预取指缓存的模式。
Table150.FLASH_PrefetchBuffer值
FLASH_PrefetchBuffer
描述/ACR.PRFTBE
Value/bit5
FLASH_PrefetchBuffer_Enable
预取指缓存使能
0x00000010
FLASH_PrefetchBuffer_Disable
预取指缓存失能
0x00000000
例:
/*EnableThePrefetchBuffer*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
函数原型如下:
voidFLASH_PrefetchBufferCmd(u32FLASH_PrefetchBuffer)
{
/*Checktheparameters*/
assert_param(IS_FLASH_PREFETCHBUFFER_STATE(FLASH_PrefetchBuffer));
/*EnableordisablethePrefetchBuffer*/
FLASH->ACR&=ACR_PRFTBE_Mask;//Mask=0xFFFFFFEF
FLASH->ACR|=FLASH_PrefetchBuffer;
}
9.2.4函数FLASH_Unlock
Table151.函数FLASH_Unlock
函数名
FLASH_Unlock
函数原形
voidFLASH_Unlock(void)
功能描述
解锁FLASH编写擦除控制器
输入参数
无
输出参数
无
返回值
无
先决条件
无
被调用函数
无
例:
/*UnlockstheFlash
FLASH_Unlock();
函数原型如下:
voidFLASH_Unlock(void)
{
/*AuthorizetheFPECAccess*/
FLASH->KEYR=FLASH_KEY1;//0x45670123
FLASH->KEYR=FLASH_KEY2;//0xCDEF89AB
}//写入KEY1和KEY2后,可以解除闪存----不能设置FLASH->CR;FPEC模块不能使用
9.2.5函数FLASH_Lock
Table152.函数FLASH_Lock
函数名
FLASH_Lock
函数原形
voidFLASH_Lock(void)
功能描述
锁定FLASH编写和擦除控制器(FPEC)
输入参数
无
输出参数
无
返回值
无
先决条件
无
被调用函数
无
例:
/*LockstheFlash*/
FLASH_Lock();
函数原型如下:
voidFLASH_Lock(void)
{
/*SettheLockBittolocktheFPECandtheFCR*/
FLASH->CR|=CR_LOCK_Set;//#defineCR_LOCK_Set((u32)0x00000080)
}//锁住FLASH的FPEC模块和FLASH_CR。
9.2.6函数FLASH_ErasePage
Table153.函数FLASH_ErasePage
函数名
FLASH_ErasePage
函数原形
FLASH_StatusFLASH_ErasePage(u32Page_Address)
功能描述
擦除一个FLASH页面
输入参数
无
输出参数
无
返回值
擦除操作状态
先决条件
无
被调用函数
无
例:
/*ErasestheFlashPage0*/
FLASH_Statusstatus=FLASH_COMPLETE;
status=FLASH_ErasePage(0x08000000);//0x0800000是Page0的地址
/*
typedefenum
{
FLASH_BUSY=1,//=1;SR.bit0
FLASH_ERROR_PG,//=2;SR.bit2
FLASH_ERROR_WRP,//=3;SR.bit4
FLASH_COMPLETE,//=4;SR.bit5
FLASH_TIMEOUT//=5;无对应寄存器控制位
}FLASH_Status;
*/
函数原型如下:
FLASH_StatusFLASH_ErasePage(u32Page_Address)
{
FLASH_Statusstatus=FLASH_COMPLETE;//FLASH_COMPLETE=4
/*Checktheparameters*/
assert_param(IS_FLASH_ADDRESS(Page_Address));
//#defineIS_FLASH_ADDRESS(ADDRESS)(((ADDRESS)>=0x08000000)&&((ADDRESS)<0x0807FFFF));
//大容量FLASH:
0x0807FFFF(256页);中等容量FLASH:
0x0801FFFF(128页);小容量FLASH:
0x08007FFF(32页)
//按最大容量判断,方便不同IC的可移植性。
/*Waitforlastoperationtobecompleted*/
status=FLASH_WaitForLastOperation(EraseTimeout);//EraseTimeout=0x00000FFF
//【1】要擦除时,是否Flash内有其他操作正在进行,并返回“Complete”状态(未必一定)。
if(status==FLASH_COMPLETE)
{
/*ifthepreviousoperationiscompleted,proceedtoerasethepage*/
FLASH->CR|=CR_PER_Set;//【2】0x00000002;PageEraseEnable
FLASH->AR=Page_Address;//【3】写入要擦除的页地址
FLASH->CR|=CR_STRT_Set;//【4】0x00000040,(擦除)操作开始!
/*Waitforlastoperationtobecompleted*/
status=FLASH_WaitForLastOperation(EraseTimeout);//【5】判断擦除是否完成!
if(status!
=FLASH_BUSY)
{
/*iftheeraseoperationiscompleted,disablethePERBit*/
FLASH->CR&=CR_PER_Reset;//【6】0x00001FFD,擦除操作完成,要关闭“页擦除使能”
}
}
/*ReturntheEraseStatus*/
returnstatus;//返回擦除完成状况。
}
调用函数如下:
/*
FLASH_StatusFLASH_WaitForLastOperation(u32Timeout)//设置超时时间值Timeout=0x0000000F
{
FLASH_Statusstatus=FLASH_COMPLETE;
/*CheckfortheFlashStatus*/
status=FLASH_GetStatus();
/*WaitforaFlashoperationtocompleteoraTIMEOUTtooccur*/
while((status==FLASH_BUSY)&&(Timeout!
=0x00))
{delay();status=FLASH_GetStatus();Timeout--;}
if(Timeout==0x00){status=FLASH_TIMEOUT;}//=5
/*Returntheoperationstatus*/
returnstatus;
}
*/
-----------------------------------------------------------------------------------------------
/*
staticvoiddelay(void)
{
vu32i=0;
for(i=0xFF;i!
=0;i--){}//256个for()周期
}
*/
--------------------------------------------------------------------
/*
FLASH_StatusFLASH_GetStatus(void)//本函数不判断Timeout(=5):
TimeOut不同操作,所需时间不同
{
FLASH_Statusflashstatus=FLASH_COMPLETE;//4
if((FLASH->SR&FLASH_FLAG_BSY)==FLASH_FLAG_BSY){flashstatus=FLASH_BUSY;}//1
else{
if(FLASH->SR&FLASH_FLAG_PGERR){flashstatus=FLASH_ERROR_PG;}//2
else{
if(FLASH->SR&FLASH_FLAG_WRPRTERR){flashstatus=FLASH_ERROR_WRP;}//3
else{flashstatus=FLASH_COMPLETE;}//4
}
}
/*ReturntheFlashStatus*/
returnflashstatus;
}
*/
9.2.7函数FLASH_EraseAllPages
Table154.函数FLASH_EraseAllPages
函数名
FLASH_EraseAllPages
函数原形
FLASH_StatusFLASH_EraseAllPages(void)
功能描述
擦除全部FLASH页面
输入参数
无
输出参数
无
返回值
擦除操作状态
先决条件
无
被调用函数
无
例:
/*ErasestheFlash*/
FLASH_Statusstatus=FLASH_COMPLETE;
status=FLASH_EraseAllPages();
函数原型如下:
FLASH_StatusFLASH_EraseAllPages(void)
{
FLASH_Statusstatus=FLASH_COMPLETE;
/*Waitforlastoperationtobecompleted*/
status=FLASH_WaitForLastOperat