问题1:STM32G0 系列 256KB内部FLash大小,无法读写
分析:从STM32F103C8 移植过来的Flash操作代码,发现无法进行读写,返回 HAL_ERROR 错误,随后,检查在写之前是否擦除成功,检查代码发现,移植过来的擦除Flash函数,默认擦除BANK1
但是G0系列,256KB的Flash是分为两个BANK的,且我的参数区放在最后,也就是会在BANK2中
所以这里没有擦除成功导致,导致无法写入
解决:将代码修改为,通过地址去判断是哪一个,BANK区,以及计算要擦除的页
问题2:解决了第一个问题后,我在参数区最后存的是软件版本号,但是发现,在写入版本号,再写入其他参数时,版本号的最后几位丢失了
分析:首先确认,先写入其他参数,再写入版本号,读取Flash,版本号完整无误,写入版本号后,再写入其他参数,版本呢号最后几位丢失;所以,怀疑是写其他参数的时候有问题。
我的参数写入流程是:先读取Flash中所有参数值到内存,再修改对应位置参数值,再全部写入
随后,我将写操作屏蔽,仅在确认了版本号无误后,读取,发现,版本号最后几位丢失,检查读取代码,发现读取时的长度不对,没有将版本号最后几位读取到内存中,导致写入的时候,不是Flash中原来的值。
解决:修改读取所有参数时的长度
问题3:将数据由 两位修改为一位时,原来的第二位数据没有改变,导致修改有误
分析:同样,参数的最大长度为12 Byte,当由两位数变为一位数时,这边默认传入修改的长度为1,所以第二位不被修改
解决:每次修改的长度均为固定12Byte