我是靠谱客的博主 曾经日记本,最近开发中收集的这篇文章主要介绍hal库读写flash—(基于项目需求:断电也能保存设备状态),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

所需功能:
通过4G网络模块下发授权状态,
设"S0"和"S1"分别代表授权和取消授权。
将授权状态存储到flash里确保断电不会丢失授权状态。

//变量
uint16_t empower= 0x1111; //授权标志,存入flash
uint16_t stop_authorize= 0x2222;  //停止授权标志,存入flash
FLASH_EraseInitTypeDef My_Flash;  //创建一个flash结构体
//flash读写函数
void flash_write(uint16_t my_add)//uint16_t my_add
{
    HAL_FLASH_Unlock();               //解锁Flash
    My_Flash.TypeErase = FLASH_TYPEERASE_PAGES;  //表明只做擦除操作
    My_Flash.PageAddress = Robot_Num_Flash_Add;  //声明地址
    My_Flash.NbPages = 1;                        //页数
        
    uint32_t PageError = 0x00001111;                    //??PageError,??????????????????FLASH??
    HAL_FLASHEx_Erase(&My_Flash, &PageError);  //擦除
    
    uint16_t Write_Flash_Data = my_add;
    HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Robot_Num_Flash_Add, Write_Flash_Data); //?Flash????,FLASH_TYPEPROGRAM_HALFWORD ?????Flash???16??,????32??64????,????HAL??????

    HAL_FLASH_Lock(); //??Flash
  }
//读取到的flash数据使用ID_Num暂存
void flash_read()
{
  //uint32_t Robot_Num_Flash_Add = 0x08005000; 
  ID_Num = *(__IO uint16_t*)( Robot_Num_Flash_Add );
}

//主函数,
int main(void)
{
	while(1)
	{
	//4G模块的指令控制
    if(flag_uart2==2)//当收到4G模块的指令
    {
      flag_uart2=0;
      HAL_Delay(50);
      HAL_Delay(100);

      flash_read();
	//RxData2_decode代表收到的4G模块指令
      if(strstr(RxData2_decode,"nextun")!=NULL )//取消授权
      {
        //未授权
        flash_write(stop_authorize);
        flag_power=2;//是否授权的标志位,2代表取消授权
        ID_Num=0x2222;
      }
      else if(strstr(RxData2_decode,"au")!=NULL )//授权
      {
        //授权
        flash_write(empower);
        flag_power=1;//是否授权的标志位,1代表授权
        ID_Num=0x1111;
      }
      HAL_Delay(25);
      //清空数据缓存
      memset(RxData2_decode,0,sizeof(RxData2_decode))
      ID_Num=0x0000;
      i2=0;
    }
    }
}

以上并不是全部代码,直接复制无法使用,只是为了记录整个流程,需要各位结合自己项目略作修改。

遗留问题:读取数据时正确的,但是用串口输出就变了,不知道为啥,数据定义为ID_NUM=0x1111,输出出来变成了0x3291
在这里插入图片描述

在这里插入图片描述

最后

以上就是曾经日记本为你收集整理的hal库读写flash—(基于项目需求:断电也能保存设备状态)的全部内容,希望文章能够帮你解决hal库读写flash—(基于项目需求:断电也能保存设备状态)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部