FLASH读写变量操作

1 篇文章 0 订阅
1 篇文章 0 订阅
#include "stm32f0xx_flash.h"
extern uint16_t P1,P2,P3,P4,KG;
void FLASH_D()//读取Flash
{
    // 检查存储在Flash中的变量是否已被初始化
    if (*((uint32_t*)(0x08000000+30*1024 )) == 0xFFFFFFFF) 
		{
        // 如果未初始化,则设置默认值并将其保存到Flash中
			
        uint16_t CS_ARR[5]={160,260,60,90,0};// 设置默认值
			
        FLASH_Unlock(); // 解锁Flash以便写入操作

				
        FLASH_ErasePage(0x08000000+(1024*30)); // 擦除第30页Flash
				FLASH_ErasePage(0x08000002+(1024*30)); // 擦除第30页Flash
				FLASH_ErasePage(0x08000004+(1024*30)); // 擦除第30页Flash
				FLASH_ErasePage(0x08000006+(1024*30)); // 擦除第30页Flash
				FLASH_ErasePage(0x08000008+(1024*30)); // 擦除第30页Flash
				
				
        FLASH_ProgramHalfWord(0x08000000+(1024*30),CS_ARR[0]); // 将默认值写入Flash
				
				FLASH_ProgramHalfWord(0x08000002+(1024*30),CS_ARR[1]); // 将默认值写入Flash
				
				FLASH_ProgramHalfWord(0x08000004+(1024*30),CS_ARR[2]); // 将默认值写入Flash

				FLASH_ProgramHalfWord(0x08000006+(1024*30),CS_ARR[3]); // 将默认值写入Flash
				
				FLASH_ProgramHalfWord(0x08000008+(1024*30),CS_ARR[4]); // 将默认值写入Flash
	
        FLASH_Lock(); // 锁定Flash以保护数据不受非法访问
    }
        // 如果已初始化,则从Flash中加载变量的值
		P1 = *((uint16_t*)(0x08000000 + 30 * 1024 ));
		P2 = *((uint16_t*)(0x08000002 + 30 * 1024 ));
		P3 = *((uint16_t*)(0x08000004 + 30 * 1024 ));
		P4 = *((uint16_t*)(0x08000006 + 30 * 1024 ));
		KG = *((uint16_t*)(0x08000008 + 30 * 1024 ));
}
void FLASH_X()//保存值
{
		uint16_t CS_ARR[5]={P1,P2,P3,P4,KG};
	  FLASH_Unlock(); // 解锁Flash以便写入操作
    FLASH_ErasePage(0x08000000+(1024*30)); // 擦除第30页Flash
		FLASH_ErasePage(0x08000002+(1024*30)); // 擦除第30页Flash
		FLASH_ErasePage(0x08000004+(1024*30)); // 擦除第30页Flash
		FLASH_ErasePage(0x08000006+(1024*30)); // 擦除第30页Flash
		FLASH_ErasePage(0x08000008+(1024*30)); // 擦除第30页Flash
		
		
    FLASH_ProgramHalfWord(0x08000000+(1024*30),CS_ARR[0]); // 将默认值写入Flash
				
		FLASH_ProgramHalfWord(0x08000002+(1024*30),CS_ARR[1]); // 将默认值写入Flash
				
		FLASH_ProgramHalfWord(0x08000004+(1024*30),CS_ARR[2]); // 将默认值写入Flash

		FLASH_ProgramHalfWord(0x08000006+(1024*30),CS_ARR[3]); // 将默认值写入Flash
		
		FLASH_ProgramHalfWord(0x08000008+(1024*30),CS_ARR[4]);
	
    FLASH_Lock(); // 锁定Flash以保护数据不受非法访问
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值