你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 8967|回复: 12

STM32F0xx_FLASH编程(片内)配置详细过程

[复制链接]

49

主题

19

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-2-16
发表于 2016-6-6 23:35:41 | 显示全部楼层 |阅读模式
、概述
    关于数据的储存,我觉得编程的人基本上都会使用到,只是看你储存在哪里。STM32的芯片内部FLASH都是可以进行编程的,也就是说可以拿来储存数据。但是,很多做一些小应用程序开发的人都没有利用好这个功能,而是单独外接一个EEPROM或者FLASH,我觉得有些情况下(小数据、不常改动)这是对资源的一种极大浪费。
    关于使用内部FLASH进行编程,网上也有很多人这么说:1、内部FLASH的读写次数有限;2、内部FLASH会破坏程序。这些说法确实存在一定道理,对于次数,10W次,我想这个次数除非你经常写FLASH,正常情况下你打不到这个值。对于破坏程序,如果你编程严谨,这个不是问题。综上,我觉得这些都不是担心的问题,只要你用心编好程,这样就能利用好资源。
    举一个存在的例子,我三年前在STM32F1上面开发了两个产品(已经投入使用),储存的数据量一个差不多在6K左右,每使用一次,读写的次数差不多在5-10次左右,但是该产品至今还未因FLASH而出现过问题。所以说,利用好资源也是作为一位软件工程师需要考虑的。
    提示:为了安全起见,写的次数最好做一个预估,储存的地址最和程序存在一定的距离。

Ⅱ、下载
文章提供的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘,请放心下载测试,如有问题请检查一下你的板子是否有问题。
ST标准外设库和参考手册、数据手册等都可以在ST官网下载,你也可以到我的360云盘下载。关于F0系列芯片的参考手册有多个版本(针对F0不同芯片),但有一个通用版本,就是“STM32F0x128参考手册V8(英文)2015-07”建议参考该手册,以后如果你换用一种型号芯片也方便了解。

今天的软件工程下载地址(360云盘):

STM32F0xx的资料可以在我360云盘下载:
http://yunpan.cn/cS2PVuHn6X2Bj  访问密码 8c37

Ⅲ、准备工作
对于内部FLASH的编程,建议大家准备F0的参考手册和数据手册,方便查阅相关知识,没有的请到ST官网或到我360云盘下载。
今天总结的软件工程是基于“TIM基本延时配置详细过程”修改而来,因此需要将该软件工程下载准备好。我每次都是提供整理好的软件工程供大家下载,但是,如果你是一位学习者,建议自己亲手一步一步操作:打开工程 -> 新建文件(flash.c  flash.h) -> 添加相关文件到工程中 -> 添加源代码。

Ⅳ、FLASH编程说明
STM32F0系列芯片中页的大小都是规则的,也就是说都是1K或许2K大小(如图:F0_FLASH),学过其他系列芯片的人可能知道,在其他很多芯片中也有不是规则的,如F2F4中基本都不是规则的(如图:F4_FLASH),有的一块16K128K等不规则。这样的芯片对于今天提供的工程就不适用,今天提供工程适用于内部FLASH规则大小的芯片。
FLASH编程(片内)1.png
图:F0_FLASH
FLASH编程(片内)2.png
图:F4_FLASH

Ⅴ、代码描述
工程概要说明: 提供工程的源代码主要就是两个接口,一个写,一个读。
void FLASH_WriteNWord(uint16_t* pBuffer, uint32_t WriteAddr, uint16_t nWord);
void FLASH_ReadNWord(uint16_t* pBuffer, uint32_t ReadAddr, uint16_t nWord);
相信经常编程的人都明白函数接口的意思(我的命名规则还是算比较人性化的),就是和常见的访问外部FLASH一样,不会覆盖数据,我已经在实际工作中应用而且商业化了。
主要在地址“ADDR”处写一个标志位,在地址“ADDR + 1”连续写一串数据。如果标志位已经是“写过”,则不会再次写入数据,只会读取数据,意思就是说数据只写一次,以后每次只是读取数据(就是保证掉电后数据会不会丢失)。每次读取数据,通过串口打印出以前写入的数据是否正确。

提供的工程以简单为原则,详细中文注释,方便自己方便大家。

①读函数接口
FLASH编程(片内)3.png
该函数位于flash.c文件下面;
这个函数接口比较简单,直接地址读数据。
注意:
A.参数pBuffer是数据缓冲区,是16位的,而不是8位的。(其实这里可以整理为8位的,由于时间有限,后期整理一下)。
B.参数长度也是16位的数量。
C.地址是内部FLASH地址,可别溢出了,也别和程序储存地址冲突。最好看看你的程序大小及芯片容量。


②写函数接口
FLASH编程(片内)4.png
FLASH编程(片内)5.png
该函数位于flash.c文件下面;
这个函数接口FLASH_WriteNWord才是本文的重点,原因在于这里的写不会破坏其它数据(哪怕是临近地址),这个函数接口是比较现成的,也就是应用级的接口。经过我大量测试和项目开发,暂未发现bug。

③重点
A.页的大小:STM32F0因芯片型号差异请注意页的大小,我在程序中用一个宏来定义也的大小。


Ⅵ、说明
    或许你硬件芯片不是提供工程里面的芯片,但是STM32F0的芯片软件兼容性很好,可以适用于F0其他很多型号的芯片,甚至是F2、F4等芯片上(具体请看手册、或者亲自测试)。
    本文章提供的软件工程是基于ST标准外设库为基础建立而成,而非使用STM32CubeMX建立工程。个人觉得使用ST的标准外设库适合与学习者,STM32CubeMX建立工程结构复杂,对于学习者,特别是初学者估计会头疼。
    今天的工程是基于工程“STM32F0xx_TIM基本延时配置详细过程”修改而来,以上实例总结仅供参考,若有不对之处,敬请谅解。

公众号0.5m.jpg
回复

使用道具 举报

2

主题

794

回帖

2

蝴蝶豆

金牌会员

最后登录
2019-3-6
发表于 2016-6-7 09:00:32 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

49

主题

19

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-2-16
 楼主| 发表于 2016-6-7 15:06:07 | 显示全部楼层
昨天的FLASH编程代码有网友反应有问题,在于编译器 编译时把“WriteBuf”首地址编译为基数地址,导致寻址错误(也就是在应用的地方有BUG),但是flash.c源文件没有问题的。  
我已更新应用程序,欢迎重新下载测试。
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-3
发表于 2016-8-15 16:28:47 来自手机 | 显示全部楼层
源文件密码没有了?  
回复 支持 反对

使用道具 举报

1

主题

32

回帖

0

蝴蝶豆

中级会员

最后登录
2020-1-5
发表于 2016-8-19 17:39:37 | 显示全部楼层
学习一下,
不知道为什么 ,擦除扇区时会卡死?
回复 支持 反对

使用道具 举报

49

主题

19

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-2-16
 楼主| 发表于 2016-8-20 13:16:09 | 显示全部楼层
正在缓冲...99% 发表于 2016-8-19 17:39
学习一下,
不知道为什么 ,擦除扇区时会卡死?

提供下载的实例代码应该不会卡死哦,这个代码在实际项目中使用了,而且产品已经有两年了,还没出现这方面的问题。 你是不是修改了什么地方,或者移植代码有些配置没有改过来呢?
回复 支持 反对

使用道具 举报

0

主题

2189

回帖

397

蝴蝶豆

论坛元老

最后登录
2020-10-13
发表于 2016-8-20 16:23:09 | 显示全部楼层
用来保存不经常改变的参数,还是不错的。
回复 支持 反对

使用道具 举报

1

主题

32

回帖

0

蝴蝶豆

中级会员

最后登录
2020-1-5
发表于 2016-8-23 11:35:38 | 显示全部楼层
我的情况是这样:代码执行过程中,如果有串口数据,代码就卡死了。
单步调试,发现是串口中断。
感觉都片机都不听使唤了。
自己查了好久了,希望高手指点一下。

STM32F0-Flash.zip

下载

431.93 KB, 下载次数: 112, 下载积分: ST金币 -1

回复 支持 反对

使用道具 举报

7

主题

196

回帖

0

蝴蝶豆

高级会员

最后登录
2019-9-16
发表于 2016-8-23 15:15:46 | 显示全部楼层
厉害,学习下
回复 支持 反对

使用道具 举报

5

主题

25

回帖

0

蝴蝶豆

初级会员

最后登录
2018-11-12
发表于 2016-9-8 13:56:09 | 显示全部楼层
楼主,我用的STM32cubeMX建的工程, 貌似很不一样, 并且 FLASH_ClearFlag()什么的都没有。
有没有调通了的?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版