【STM32】FLASH擦写+FLASH相关操作+注意事项
发布时间
阅读量:
阅读量
有关FLASH读写的函数:

有关库函数**:**

实现掉电不丢失的主函数(Flash一定要先擦后写):
#define FLASH_START_ADDR 0x0801f000 //写入的起始地址
int main (void){//主程序
u16 a; //定义变量
//初始化程序
RCC_Configuration(); //时钟设置
LED_Init();//LED初始化
KEY_Init();//按键初始化
a = FLASH_R(FLASH_START_ADDR);//从指定页的地址读FLASH
GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)
//主循环
while(1){
//示例4:有锁存
if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
delay_ms(20); //延时20ms去抖动
if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
//在2个LED上显示二进制加法
a++; //变量加1
if(a>3){ //当变量大于3时清0
a=0;
}
GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)
FLASH_W(FLASH_START_ADDR,a); //从指定页的地址写入FLASH
while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开
}
}
}
}
cpp

Tips:FLASH操作注意事项:
操作必须先擦除后进行书写。
每页包含1024个地址块,在起始地址为[bank account]的位置进行擦拭操作时,默认是以页为单位完成的;而书写操作则需以十六位宽度为单位完成,并且允许跨页完成。
当使用STM32内置FLASH存储器进行擦除或重写操作时,默认情况下会开启外部高速振荡器以保证操作的稳定性。
该存储器支持最多[bank account]次的擦拭与重写循环;但需注意避免死循环状态。
在执行擦拭操作时,请务必避免触及用户数据存储区域;否则可能导致系统功能异常。
完成一次页数据的清除需要至少[bank account]$毫秒的时间,并且不能逐字节进行清除。
Tips:F103C8T6页对应地址:

拓展:
1、写保护功能(禁止写入):

2、读保护功能(禁止读出):

全部评论 (0)
还没有任何评论哟~
