STM32F10xFlash.docx

上传人:b****5 文档编号:7248596 上传时间:2023-01-22 格式:DOCX 页数:49 大小:30.16KB
下载 相关 举报
STM32F10xFlash.docx_第1页
第1页 / 共49页
STM32F10xFlash.docx_第2页
第2页 / 共49页
STM32F10xFlash.docx_第3页
第3页 / 共49页
STM32F10xFlash.docx_第4页
第4页 / 共49页
STM32F10xFlash.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

STM32F10xFlash.docx

《STM32F10xFlash.docx》由会员分享,可在线阅读,更多相关《STM32F10xFlash.docx(49页珍藏版)》请在冰豆网上搜索。

STM32F10xFlash.docx

STM32F10xFlash

9.1FLASH寄存器结构..............................................................104

9.2FLASH库函数..................................................................105

No

函数名

描述

1

FLASH_SetLatency

设置代码延时值

2

FLASH_HalfCycleAccessCmd

使能或者失能FLASH半周期访问

3

FLASH_PrefetchBufferCmd

使能或者失能预取指缓存

4

FLASH_Unlock

解锁FLASH编写擦除控制器

5

FLASH_Lock

锁定FLASH编写擦除控制器

6

FLASH_ErasePage

擦除一个FLASH页面

7

FLASH_EraseAllPages

擦除全部FLASH页面

8

FLASH_EraseOptionBytes

擦除FLASH选择字节

9

FLASH_ProgramWord

在指定地址编写一个字

10

FLASH_ProgramHalfWord

在指定地址编写半字

11

FLASH_ProgramOptionByteData

在指定FLASH选择字节地址编写半字

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;

typedefstruct

{

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*/

...

#ifdef_FLASH

EXTFLASH_TypeDef*FLASH;

EXTOB_TypeDef*OB;

#endif/*_FLASH*/

...

#endif

使用Debug模式时,初始化指针FLASH和OB于文件:

#ifdef_FLASH

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_Latency:

用来设置FLASH存储器延时时钟周期数。

见Table146.查阅该参数可取的值

Table146.FLASH_Latency值

FLASH_Latency

描述/ACR.bit2-0

Value

意义

FLASH_Latency_0

0SYSCLK延时周期

0x00000000

0个等待状态,当0

FLASH_Latency_1

1SYSCLK延时周期

0x00000001

1个等待状态,当24MHz

FLASH_Latency_2

2SYSCLK延时周期

0x00000002

2个等待状态,当48MHz

例:

/*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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1