上两期我们讲了GPIO的初始化和使用,今天我们来讲一下STM32中如何保存数据到FLASH中。要看注意事项!!!
这里也是先看一下固件库函数手册:
写入FLASH数据
这里我们主要使用到的函数有:
FLASH_Unlock(); //解锁FLASH编程擦除控制器
/**
参数:需要清除的标志位,具体标志位看下图
**/
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
//在写入FLASH时候要先擦除整页的数据
FLASH_ErasePage(add); //擦除指定地址页的数据
FLASH_ProgramHalfWord(add,dat); //从指定页的addr地址开始写
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
//锁定FLASH防止程序误操作
FLASH_Lock(); //锁定FLASH编程擦除控制器
FLASH具体标志位
读取FLASH数据
//FLASH读出数据
u16 FLASH_R(u32 add){ //参数1:32位读出FLASH地址。返回值:16位数据
u16 a;
a = *(u16*)(add);//从指定页的addr地址开始读,这里用到了强制类型转换和指针的知识
return a;
}
/*
u32 a; //定义32位无符号变量a
u16 a; //定义16位无符号变量a
u8 a; //定义8位无符号变量a
vu32 a; //定义易变的32位无符号变量a
vu16 a; //定义易变的 16位无符号变量a
vu8 a; //定义易变的 8位无符号变量a
uc32 a; //定义只读的32位无符号变量a
uc16 a; //定义只读 的16位无符号变量a
uc8 a; //定义只读 的8位无符号变量a
*/
注意事项!!!!:
1:最重要的是不要写死循环的FLASH擦写程序!不要写死循环的FLASH擦写程序!不要写死循环的FLASH擦写程序!FLASH是有读写次数限制的了
2:用户程序也保存在FLASH中,注意不要擦写到,一般起始地址为(0x08000000)
3:在使用FLASH前要开启HSL内部高速时钟RCC_HSICmd(ENABLE); 或者是HSE外部高速时钟RCC_HSEConfig(RCC_HSE_ON);二选一
还有就是我这段时间会备考软考嵌入式,STM32的更新频率会变低,但是会更新下我嵌入式的笔记!谢谢各位兄弟姐妹大神们的点赞收藏。如果我写的笔记有啥问题也期望大家指点一下。多谢多谢,感激不尽!!!!