今天调试程序的时候需要把掉电前的数据存储到flash中之后等待下次初始化的时候把数据读进来。
刚刚开始的时候去找了一些stm32的flash的操作,真的是废话连篇的真正能用到的没几句话,这里我把自己调试好的flash读写数据的子函数跟大家分享一下。
void FLASH_WriteByte(u32 addr ,u16 flashdata1)
{
}
这个子函数就是将数据flashdata1写到地址addr中去。数据的长度是可变的。
当需要读入数据的时候可以直接访问地址,如:rdata=*(u16*)0x08014000;
0x08014000是存储的地址。
这样大家应该很清楚了吧。flash读写数据还是比较简单的,这里希望能帮到大家。
但是在写入数据的时候,又遇到了另一个问题,就是程序运行的时候进入到这个HardFault_Handler函数中死循环了,不知道大家有没有遇到过这个问题,后来我查了一些资料,发现可能是存储器的分配有问题。然后把地址改到更大的地方,又试了试,发现已经可以了。建议大家这样试一试。
下面是我找的关于
防止误擦除有用程序代码的方法
方法一:首先要计算程序代码有多少,把FLASH存取地址设置在程序代码以外的地方,这样就不会破坏用户程序。原则上从0x0800
方法二:先在程序中定义一个const
const
MDK3.03A开始就支持关键字
需要加#include
方法三:在程序中定义一个const
uint32_t
const
address
方法四:利用写保护的方式(没研究明白)
联系客服