OpenEdv-开源电子网

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

请教一下FLASH储存数据的问题

[复制链接]

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-3-26
在线时间
286 小时
发表于 2021-6-9 14:06:13 | 显示全部楼层 |阅读模式
30金钱
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #include "stmflash.h"

  8. #define FLASH_SAVE_ADDR  0X08001000       
  9. int str;

  10. int main(void)
  11. {               

  12.           u8 len;
  13.     int t;       
  14.                  u8 datatemp[2];
  15.           delay_init();                      
  16.           NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          
  17.           uart_init(115200);            
  18.           LED_Init();                          
  19.           TIM1_PWM_Init(8999, 0);
  20.     TIM2_PWM_Init(8999, 0);
  21.     TIM3_PWM_Init(8999, 0);
  22.     TIM4_PWM_Init(8999, 0);
  23.          
  24.         //  STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)str,SIZE);
  25.    STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,2);
  26.          
  27.                  while(1)
  28.         {
  29.         if(USART_RX_STA&0x8000)
  30.                 {                                          
  31.                         len=USART_RX_STA&0x3fff;
  32.        
  33.                         for(t=0;t<len;t++)
  34.                         {
  35.                                 while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
  36.                         }
  37.                   
  38.                         USART_RX_STA=0;
  39.                         if((0x16==USART_RX_BUF[0])&&(0x09==USART_RX_BUF[1])&&0x01==USART_RX_BUF[2]&&0xB5==USART_RX_BUF[3]&&0xAA==USART_RX_BUF[4]&&0x11==USART_RX_BUF[5])
  40.                         {
  41.                          PWM_control(10);
  42.                         str=10;
  43.                                 STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)str,2);
  44.                         }
  45.                         else if((0x16==USART_RX_BUF[0])&&(0x09==USART_RX_BUF[1])&&0x02==USART_RX_BUF[2]&&0xB5==USART_RX_BUF[3]&&0xAA==USART_RX_BUF[4]&&0x11==USART_RX_BUF[5])
  46.                         {
  47.                          PWM_control(70);
  48.                         str=70;
  49.                         }
  50.                         else if((0x16==USART_RX_BUF[0])&&(0x09==USART_RX_BUF[1])&&0x03==USART_RX_BUF[2]&&0xB5==USART_RX_BUF[3]&&0xAA==USART_RX_BUF[4]&&0x11==USART_RX_BUF[5])
  51.                         {
  52.                          PWM_control(170);
  53.                         str=170;
  54.                         }
  55.                         else if((0x16==USART_RX_BUF[0])&&(0x09==USART_RX_BUF[1])&&0x04==USART_RX_BUF[2]&&0xB5==USART_RX_BUF[3]&&0xAA==USART_RX_BUF[4]&&0x11==USART_RX_BUF[5])
  56.                         {
  57.                          PWM_control(270);
  58.                         str=270;
  59.                         }
  60.                         else if((0x16==USART_RX_BUF[0])&&(0x09==USART_RX_BUF[1])&&0x05==USART_RX_BUF[2]&&0xB5==USART_RX_BUF[3]&&0xAA==USART_RX_BUF[4]&&0x11==USART_RX_BUF[5])
  61.                         {
  62.                          PWM_control(370);
  63.                         str=370;
  64.                         }
  65.                         else if((0x16==USART_RX_BUF[0])&&(0x09==USART_RX_BUF[1])&&0x06==USART_RX_BUF[2]&&0xB5==USART_RX_BUF[3]&&0xAA==USART_RX_BUF[4]&&0x11==USART_RX_BUF[5])
  66.                         {
  67.                          PWM_control(470);
  68.                         str=470;
  69.                         }
  70.                         else if((0x16==USART_RX_BUF[0])&&(0x09==USART_RX_BUF[1])&&0x07==USART_RX_BUF[2]&&0xB5==USART_RX_BUF[3]&&0xAA==USART_RX_BUF[4]&&0x11==USART_RX_BUF[5])
  71.                         {
  72.                          PWM_control(570);
  73.                         str=570;
  74.                         }
  75.                         else if((0x16==USART_RX_BUF[0])&&(0x09==USART_RX_BUF[1])&&0x08==USART_RX_BUF[2]&&0xB5==USART_RX_BUF[3]&&0xAA==USART_RX_BUF[4]&&0x11==USART_RX_BUF[5])
  76.                         {
  77.                          PWM_control(670);
  78.                         str=670;
  79.                         }
  80.                        
  81.                 }

  82.                
  83.                 if(str==10)
  84.                 {
  85.                           PWM_control(str);
  86.                                 LED1=0;
  87.                                 delay_ms(200);
  88.                                 LED1=1;
  89.                                 delay_ms(200);
  90.                         }
  91.                 }
  92.          
  93. }
复制代码
工作是这样的,通过串口通信,PWM控制LED的亮度,这点已经完成。现在的问题是,想掉电保护掉电前的参数 ,使得下一次上电后继续亮起前一次上电的亮度值,这一部分怎么修改?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2019-9-19
在线时间
119 小时
发表于 2021-6-9 15:31:33 | 显示全部楼层
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-3-26
在线时间
286 小时
 楼主| 发表于 2021-6-9 15:32:32 | 显示全部楼层

谢谢老哥
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2021-6-9 23:18:03 | 显示全部楼层
你就得把亮度值存储到FLASH里面,但是你得知道什么时候断电,外界先断电,然后mcu必须可以在断电后继续工作一段时间,用来存储亮度值到flash。 可以考虑用大电容/超级电容给MCU供电
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-3-26
在线时间
286 小时
 楼主| 发表于 2021-6-10 08:33:32 | 显示全部楼层
正点原子 发表于 2021-6-9 23:18
你就得把亮度值存储到FLASH里面,但是你得知道什么时候断电,外界先断电,然后mcu必须可以在断电后继续工作 ...

原子哥,已经储存成功了,但是格式转换不对,如何正确将u16*转换成u16格式呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2021-6-10 23:46:33 | 显示全部楼层
支持者2400 发表于 2021-6-10 08:33
原子哥,已经储存成功了,但是格式转换不对,如何正确将u16*转换成u16格式呢?

这。。。
你存储个数据有这么麻烦么
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2023-3-20
在线时间
9 小时
发表于 2023-3-20 14:42:04 | 显示全部楼层
正点原子 发表于 2021-6-10 23:46
这。。。
你存储个数据有这么麻烦么

麻烦出个例程呗
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-3-20 15:08:28 | 显示全部楼层

有例程的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 15:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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