FLASH读写变量操作

该代码段展示了如何在STM32F0xx微控制器的Flash内存中进行数据的读取和存储操作。函数FLASH_D()用于读取Flash中的变量,如果未初始化,则设置默认值并写入;FLASH_X()函数则用于保存变量的当前值到Flash中,确保数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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以保护数据不受非法访问
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值