OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5170|回复: 4

怎么实现变量的掉电保存?基于实验34:FLASH模拟EEPROM

[复制链接]

3

主题

12

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-10-29
在线时间
4 小时
发表于 2022-11-19 16:19:05 | 显示全部楼层 |阅读模式
15金钱
基于探索者实验34FLASH模拟EEPROM,请问大佬们,怎么修改程序才能达到以下要求:

按下任意key,变量加加,加到一定量的时候保存,然后断电,再次读取的时候是经过加加之后的量而不是初始值,并在lcd屏上显示。

以下是实验34例程(例程里只演示了常量字符串数组):

//要写入到 STM32 FLASH 的字符串数组
const u8 TEXT_Buffer[]={"STM32 FLASH TEST"};
#define TEXT_LENTH sizeof(TEXT_Buffer) //数组长度
#define SIZE TEXT_LENTH/4+((TEXT_LENTH%4)?1:0) //数组大小

#define FLASH_SAVE_ADDR 0X0800C004
int main(void)
{
u8 key=0, datatemp[SIZE];  


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组 2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为 115200
LED_Init(); //初始化 LED
LCD_Init(); //LCD 初始化
KEY_Init(); //按键初始化
POINT_COLOR=RED;//设置字体为红色


while(1)
{
key=KEY_Scan(0);
if(key==KEY1_PRES) //KEY1 按下
{  
STMFLASH_Write(FLASH_SAVE_ADDR,(u32*)TEXT_Buffer,SIZE); //写入 STM32 FLASH
}
if(key==KEY0_PRES) //KEY0 按下
{  
STMFLASH_Read(FLASH_SAVE_ADDR,(u32*)datatemp,SIZE);  //读取字符串 LCD_ShowString(30,190,200,16,16,datatemp);//显示读到的字符串
}

}

}



最佳答案

查看完整内容[请看2#楼]

#define FLASH_SAVE_ADDR 0X0800C004 int main(void) { u8 key=0; u32 datatemp[8];//一次定义8个数,只用到第一个数做实验 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组 2 delay_init(168); //初始化延时函数 uart_init(115200); //初始化串口波特率为 115200 LED_Init(); //初始化 LED LCD_Init(); //LCD 初始化 KEY_Init(); //按键初始化 POINT_COLOR=RED;//设 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2022-11-19 16:19:06 | 显示全部楼层
#define FLASH_SAVE_ADDR 0X0800C004
int main(void)
{
u8 key=0;
u32 datatemp[8];//一次定义8个数,只用到第一个数做实验  


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组 2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为 115200
LED_Init(); //初始化 LED
LCD_Init(); //LCD 初始化
KEY_Init(); //按键初始化
POINT_COLOR=RED;//设置字体为红色
datatemp[0]=0;

while(1)
{
key=KEY_Scan(0);
if(key==KEY1_PRES) //KEY1 按下
{
datatemp[0]++;
if(datatemp[0]==6)
    STMFLASH_Write(FLASH_SAVE_ADDR,(u32*)datatemp,8); //写入 STM32 FLASH
}
if(key==KEY0_PRES) //KEY0 按下
{  
STMFLASH_Read(FLASH_SAVE_ADDR,(u32*)datatemp,8);  //读取变量数组
LCD_ShowNum(30,190,datatemp[0],4,16);//显示读到datatemp[0],其值应该是上次写入的6
}

}

}
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2022-11-21 10:22:43 | 显示全部楼层
上电先读,载入新值,按键操作时新值加到N时保存
回复

使用道具 举报

25

主题

180

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2015-1-14
在线时间
152 小时
发表于 2022-11-21 10:52:26 | 显示全部楼层
阿侑kevin 发表于 2022-11-21 10:22
上电先读,载入新值,按键操作时新值加到N时保存

正解            
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-11-21 11:33:21 | 显示全部楼层
你把数据弄到TEXT_Buffer不就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 21:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表