【无标题】STM32 FLASH 读写数据

【无标题】STM32 FLASH 读写数据,第1张

#include “falsh.h”
#define FLASF_SAVE_PAGE0 0x0800F000 //要写入FLASH的地址,根据程序大小确定地址
/flash里面没有子机ID就写入子机ID/
void writeflashfirst(void)
{
uint16_t flag = 0; //ID占两个字节,一个字节8位,uint16_t,16位就是两个字节
uint16_t id = 0;
flag = Read_All_RegData_From_Flash();//读取FLASH里面存储的子机ID
if(flag == 0x00)//如果flash里面子机ID为空的就往flash里面写入一个ID
{
flash_test();
id = Read_All_RegData_From_Flash();
printf(“\r flash里面没有ID,设置ID为:0x%02x”,id);
}
else
{
id = Read_All_RegData_From_Flash();
printf(“\r 从flash读取到ID:0x%04x”,id);
}
}
/往FLASH写入数据函数/
void flash_test(void)
{
uint16_t Ret = 0;
FLASH_Unlock(); //解锁FLASH
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGAERR|FLASH_FLAG_WRPERR|FLASH_FLAG_BSY |FLASH_FLAG_OPTVERR|FLASH_FLAG_SIZERR); //清空所有标志位
FLASH_ErasePage(FLASF_SAVE_PAGE0); //擦除的地址
Ret = FLASH_FastProgramWord(FLASF_SAVE_PAGE0, 0x4004); //flash字写入
printf(“\r 设置子机ID为:0x%04x”,Ret);
FLASH_Lock(); //上锁FLASH
}

/读取FLASH寄存器数据函数/
uint32_t Read_All_RegData_From_Flash(void)
{
uint16_t *p;// 定义一个指针
p = (uint16_t *)FLASF_SAVE_PAGE0; //指针地址指向写入数据地址 ,类型转换为指针类型 ,直接从寄存器地址中获得数据
//printf(“\r 读取FLASH子机ID为:0x%02x”,*p);
return *p;
}

/判断FLASH有没有写入子机ID函数/
void ReadID(void)
{
uint16_t ID = 0x166;
uint16_t i = 0x00;
i = Read_All_RegData_From_Flash();//读取FLASH数据
if(i==0x00) //没有设置ID给一个默认ID 0x166
{
ID=0x166;
printf(“\r 子机ID为:0x%02x”,ID);
}
else //设置了ID就打印设置的ID
{
ID = i;
printf(“\r 子机ID为:0x%02x”,ID);
}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/717800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存