【无标题】STM32 FLASH 读写数据

编程入门 行业动态 更新时间:2024-10-11 09:31:02

【<a href=https://www.elefans.com/category/jswz/34/1768827.html style=无标题】STM32 FLASH 读写数据"/>

【无标题】STM32 FLASH 读写数据

#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);
}
}

更多推荐

【无标题】STM32 FLASH 读写数据

本文发布于:2024-02-05 11:47:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745096.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:无标题   数据   FLASH

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!