STM32F10xFlash文档格式.docx
- 文档编号:20354719
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:49
- 大小:30.16KB
STM32F10xFlash文档格式.docx
《STM32F10xFlash文档格式.docx》由会员分享,可在线阅读,更多相关《STM32F10xFlash文档格式.docx(49页珍藏版)》请在冰豆网上搜索。
12
FLASH_EnableWriteProtection
对期望的页面写保护(OB寄存器操作)
13
FLASH_ReadOutProtection
使能或失能读出保护
14
FLASH_UserOptionByteConfig
编写FLASH用户选择字节:
IWDG_SW/RST_STOP/RST_STDBY
15
FLASH_GetUserOptionByte
返回FLASH用户选择字节的值
16
FLASH_GetWriteProtectionOptionByte
返回FLASH写保护选择字节的值
17
FLASH_GetReadOutProtectionStatus
检查FLASH读出保护设置与否
18
FLASH_GetPrefetchBufferStatus
检查FLASH预取指缓存设置与否
19
FLASH_ITConfig
使能或者失能指定FLASH中断
20
FLASH_GetFlagStatus
检查指定的FLASH标志位设置与否
21
FLASH_ClearFlag
清除FLASH待处理标志位
22
FLASH_GetStatus
返回FLASH状态
23
FLASH_WaitForLastOperation
等待某一个Flash操作完成,或发生TIMEOUT
9FLASH存储器(FLASH)
Section9.1FLASH寄存器结构描述了固件函数库所使用的数据结构,Section9.2固件库函数介绍了函数库里的所有函数。
9.1FLASH寄存器结构
FLASH寄存器结构,FLASH_TypeDef和OB_TypeDef,在文件中定义如下:
typedefstruct
{
vu32ACR;
vu32KEYR;
vu32OPTKEYR;
vu32SR;
vu32CR;
vu32AR;
vu32RESERVED;
vu32OBR;
vu32WRPR;
}FLASH_TypeDef;
{
vu16RDP;
vu16USER;
vu16Data0;
vu16Data1;
vu16WRP0;
vu16WRP1;
vu16WRP2;
vu16WRP3;
}OB_TypeDef;
Table142.和Table143.例举了FLASH所有寄存器和选择字节(OptionByteOB)寄存器
Table142.FLASH寄存器
寄存器
ACR
FLASH访问控制寄存器
KEYR
FPEC密钥寄存器
OPTKEYR
选择字节密钥寄存器
SR
FLASH状态寄存器
CR
FLASH控制寄存器
AR
FLASH地址寄存器
OBR
选择字节和状态寄存器
WRPR
选择字节写保护寄存器
Table143.OptionByte(OB)寄存器
RDR
读出选择字节
USER
用户选择字节
Data0
Data0选择字节
Data1
Data1选择字节
WRP0
写保护0选择字节
WRP1
写保护1选择字节
WRP2
写保护2选择字节
WRP3
写保护3选择字节
FLASH也在文件“stm2f10x_map.h”声明如下:
/*Flashregistersbaseaddress*/
#defineFLASH_BASE((u32)0x40022000)
/*FlashOptionBytesbaseaddress*/
#defineOB_BASE((u32)0x1FFFF800)
#ifndefDEBUG
...
#ifdef_FLASH
#defineFLASH((FLASH_TypeDef*)FLASH_BASE)
#defineOB((OB_TypeDef*)OB_BASE)
#endif/*_FLASH*/
#else/*DEBUG*/
EXTFLASH_TypeDef*FLASH;
EXTOB_TypeDef*OB;
#endif
使用Debug模式时,初始化指针FLASH和OB于文件:
FLASH=(FLASH_TypeDef*)FLASH_BASE;
OB=(OB_TypeDef*)OB_BASE;
#endif/*_FLASH*/
为了访问EXTI寄存器,_FLASH必须在文件“sm32f10x_conf.h”中定义如下:
#define_FLASH
在默认情况下,只有执行FLASH设置(延迟,预取指,半周期)的函数式允许执行的。
如果想要执行FLASH编写/擦除/保护函数,必须在文件中定义_FLASH_PROG如下:
#define_FLASH_PROG
9.2FLASH库函数
FLASH的库函数【见首页】
9.2.1函数FLASH_SetLatency
Table145.函数FLASH_SetLatency
FLASH_SetLatency
函数原形
voidFLASH_SetLatency(u32FLASH_Latency)
功能描述
输入参数
FLASH_Latency:
指定FLASH_Latency的值
输出参数
无
返回值
先决条件
被调用函数
用来设置FLASH存储器延时时钟周期数。
见Table146.查阅该参数可取的值
Table146.FLASH_Latency值
FLASH_Latency
描述/ACR.bit2-0
Value
意义
FLASH_Latency_0
0SYSCLK延时周期
0x00000000
0个等待状态,当0<
SYSCLK≤24MHz
FLASH_Latency_1
1SYSCLK延时周期
0x00000001
1个等待状态,当24MHz<
SYSCLK≤48MHz
FLASH_Latency_2
2SYSCLK延时周期
0x00000002
2个等待状态,当48MHz<
SYSCLK≤72MHz
例:
/*ConfiguretheLatencycycle:
Set2Latencycycles*/
FLASH_SetLatency(FLASH_Latency_2);
函数原型如下:
/*Checktheparameters*/
assert_param(IS_FLASH_LATENCY(FLASH_Latency));
/*SetstheLatencyvalue*/
FLASH->
ACR&
=ACR_LATENCY_Mask;
//0x00000038,高位保留位必须保持为0
ACR|=FLASH_Latency;
}
9.2.2函数FLASH_HalfCycleAccessCmd
Table147.函数FLASH_HalfCycleAccessCmd
FLASH_HalfCycleAccessCmd
voidFLASH_HalfCycleAccessCmd(u32FLASH_HalfCycleAccess)
FLASH_HalfCycleAccess:
FLASH_HalfCycle访问模式
FLASH_HalfCycleAccess:
用来选择FLASH半周期访问的模式。
Table148.FLASH_HalfCycleAccess值
FLASH_HalfCycleAccess
描述/ACR.HLFCYA
Value/bit4
FLASH_HalfCycleAccess_Enable
半周期访问使能
0x00000008
FLASH_HalfCycleAccess_Disable
半周期访问失能
/*EnabletheHalfCycleFlashaccess*/
FLASH_HalfCycleAccessCmd(FLASH_HalfCycleAccess_Enable);
assert_param(IS_FLASH_HALFCYCLEACCESS_STATE(FLASH_HalfCycleAccess));
/*EnableordisabletheHalfcycleaccess*/
=ACR_HLFCYA_Mask;
//Mask=0xFFFFFFF7
ACR|=FLASH_HalfCycleAccess;
9.2.3函数FLASH_PrefetchBufferCmd
Table149.函数FLASH_PrefetchBufferCmd
FLASH_PrefetchBufferCmd
voidFLASH_PrefetchBufferCmd(u32FLASH_PrefetchBuffer)
使能或失能预取指缓存
FLASH_PrefetchBuffer:
预取指缓存状态
用来选择FLASH预取指缓存的模式。
Table150.FLASH_PrefetchBuffer值
FLASH_PrefetchBuffer
描述/ACR.PRFTBE
Value/bit5
FLASH_PrefetchBuffer_Enable
预取指缓存使能
0x00000010
FLASH_PrefetchBuffer_Disable
预取指缓存失能
/*EnableThePrefetchBuffer*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
assert_param(IS_FLASH_PREFETCHBUFFER_STATE(FLASH_PrefetchBuffer));
/*EnableordisablethePrefetchBuffer*/
=ACR_PRFTBE_Mask;
//Mask=0xFFFFFFEF
ACR|=FLASH_PrefetchBuffer;
9.2.4函数FLASH_Unlock
Table151.函数FLASH_Unlock
FLASH_Unlock
voidFLASH_Unlock(void)
/*UnlockstheFlash
FLASH_Unlock();
/*AuthorizetheFPECAccess*/
KEYR=FLASH_KEY1;
//0x45670123
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();
/*SettheLockBittolocktheFPECandtheFCR*/
CR|=CR_LOCK_Set;
//#defineCR_LOCK_Set((u32)0x00000080)
}//锁住FLASH的FPEC模块和FLASH_CR。
9.2.6函数FLASH_ErasePage
Table153.函数FLASH_ErasePage
FLASH_StatusFLASH_ErasePage(u32Page_Address)
擦除操作状态
/*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_Statusstatus=FLASH_COMPLETE;
//FLASH_COMPLETE=4
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*/
CR|=CR_PER_Set;
//【2】0x00000002;
PageEraseEnable
AR=Page_Address;
//【3】写入要擦除的页地址
CR|=CR_STRT_Set;
//【4】0x00000040,(擦除)操作开始!
//【5】判断擦除是否完成!
if(status!
=FLASH_BUSY)
{
/*iftheeraseoperationiscompleted,disablethePERBit*/
CR&
=CR_PER_Reset;
//【6】0x00001FFD,擦除操作完成,要关闭“页擦除使能”
}
/*ReturntheEraseStatus*/
returnstatus;
//返回擦除完成状况。
调用函数如下:
FLASH_StatusFLASH_WaitForLastOperation(u32Timeout)//设置超时时间值Timeout=0x0000000F
/*CheckfortheFlashStatus*/
status=FLASH_GetStatus();
/*WaitforaFlashoperationtocompleteoraTIMEOUTtooccur*/
while((status==FLASH_BUSY)&
(Timeout!
=0x00))
{delay();
Timeout--;
if(Timeout==0x00){status=FLASH_TIMEOUT;
}//=5
/*Returntheoperationstatus*/
-----------------------------------------------------------------------------------------------
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->
FLASH_FLAG_PGERR){flashstatus=FLASH_ERROR_PG;
}//2
else{
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)
/*ErasestheFlash*/
status=FLASH_EraseAllPages();
status=FLASH_WaitForLastOperat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32F10xFlash