【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)); //等待按键松开 
			}
		}
	}
}

Tips:FLASH操作注意事项:

  1. 操作一定要先擦后写。
  2. 每页是1024个地址,起始地址0x08000000 擦除操作以页为单位,写操作则必须以16位宽度为单位,允许跨页写入。
  3. STM32内置FLASH擦或写时,必须打开外部/内部高速振荡器。
  4. FLASH可多次擦写10万次,不可死循环擦写。
  5. 擦写时要避开用户程序存储区的区域,否则会擦掉用户程序导致错误。
  6. 擦除一页要10ms(对于1k大小的一页),比较慢。而且不能单个字节的擦写。

Tips:F103C8T6页对应地址:


拓展:

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

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

发布了88 篇原创文章 · 获赞 39 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43444989/article/details/99999270
今日推荐