历史上的今天
返回首页

历史上的今天

今天是:2025年01月13日(星期一)

正在发生

2021年01月13日 | STM32F1_片内FLASH编程

2021-01-13 来源:eefocus

前言

今天总结“STM32F103  片内FLASH编程”,对于学习编程的人来说“FLASH”这个词肯定很熟悉,因为FLASH主要用于存储数据。对于STM32来说,内部FLASH的容量有大有小,从16K到2M不等,主要看芯片的型号。


对于刚从51或者430转入学习ARM-Cortex M芯片的人来说,可能只知道内部FLASH是拿来装载程序的,事实上Cortex M芯片内部FLASH的可以拿来编程的,而且还可以像外部FLASH一样存储数据。对,今天提供的工程就是使用内部FLASH像外部FLASH一样读写数据,而且不是块或者页编程(即不覆盖临近地址数据)。


在实际的开发中,内部FLASH存储数据也是很重要的一点,特别是一些不常修改,而且很重要的标志位,或者一些配置等,存储在内部FLASH是很常见的。但是,这个地址一定要避开程序储存的地址(我计划后期整理编程地址规范及要求)。

 

https://yunpan.cn/cRs8kq9Q5hQCS  访问密码

 

STM32F10x的资料可以在我360云盘下载:

https://yunpan.cn/crBUdUGdYKam2   访问密码 ca90

 

内容讲解

工程概要说明: 提供工程的源代码主要就是两个接口,一个写,一个读。

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”连续写一串数据。如果标志位已经是“写过”,则不会再次写入数据,只会读取数据,意思就是说数据只写一次,以后每次只是读取数据(就是保证掉电后数据会不会丢失)。每次读取数据,通过串口打印出以前写入的数据是否正确。

 

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

 

关于“STM32F103  片内FLASH编程” 我把重要的几点在下面分别讲述:

一、写函数接口


该函数位于flash.c文件下面;

注意:

A.参数pBuffer是数据缓冲区,是16位的,而不是8位的。(其实这里可以整理为8位的,由于时间有限,如果有需要,请微信里回复我,我抽时间整理一下)。

B.参数长度也是16位的数量。

C.地址是内部FLASH地址,可别溢出了,也别和程序冲突。最好看看你的程序大小及芯片容量。

 

二、读函数接口


该函数位于flash.c文件下面;

注意的地方和上面写函数接口一样,主要是参数。

 

三、读写应用


该函数位于main.c文件下面;

蓝色表示读写标志位

红色表示读写数据

看一下就知道程序的流程是:“数据标志位”和“数据”都只写一次,而每次上电读一次标志位,再读数据。

这里的“数据标志位”地址就在“数据”前面。

 

四、今天的重点



重点A.页的大小:STM32F1小、中容量是1K,而大容量是2K,对于编程这里是有差异的。

重点B.STM32系列芯片中有很大一部分页的大小都是规则的,也就是说都是1K或许2K大小,学过其他系列芯片的人可能知道,在其他很多芯片中也有不是规则的,如STM32F4中基本都不是规则的(如下图F4芯片),有的一块16K、128K等不规则。这样的芯片对于今天提供的工程就不适用,今天提供工程适用于内部FLASH规则大小的芯片。



说明

今天提供的软件工程基于STM32F103大容量芯片,中等及小容量芯片也使用,只要修改flash.h文件一个宏(页大小就可以)。其实只要适当修改工程的部分配置,STM32F1的芯片都适用。


推荐阅读

史海拾趣

Gauthier Connectique公司的发展小趣事
根据测试结果对电路进行调试优化。可能需要调整元器件参数、优化电路布局等,以提高电路的灵敏度和稳定性。
Gigavac LLC公司的发展小趣事
根据提供的电路图,将各元器件正确连接在电路板上。注意元器件的极性、引脚对应关系等,确保电路连接无误。
AntennaHome公司的发展小趣事

AntennaHome公司深知技术创新是企业持续发展的根本动力。因此,公司始终坚持将研发作为企业的核心战略。公司不断加大对研发的投入力度,引进先进的研发设备和人才,同时积极与高校和研究机构开展合作。这些举措使得公司在天线技术领域始终保持领先地位,为公司的长远发展提供了有力保障。

这五个故事展示了AntennaHome公司在电子行业中的发展历程,从创业初期的技术创新到与国际大厂的合作,再到应对行业变革的挑战、参与国际展会以及持续投入研发,每一步都体现了公司的努力和坚持。

Arduino公司的发展小趣事

随着物联网和智能设备的兴起,Arduino平台在智能家居、智能农业、机器人等领域的应用越来越广泛。开发者们可以利用Arduino平台来设计和开发各种智能设备和应用,实现设备的互联互通和智能化控制。这些应用不仅提高了人们的生活质量,也推动了电子行业的进步和发展。

这五个故事展示了Arduino公司在电子行业中的发展历程和取得的成就。从最初的廉价微控制器解决方案,到如今的多样化主板和广泛应用,Arduino始终秉持着创新、开放和合作的精神,为电子行业的发展做出了重要贡献。

ECS公司的发展小趣事

随着云计算技术的不断发展,ECS公司意识到只有不断创新才能保持竞争优势。他们投入大量研发资源,对ECS服务进行了多次技术升级和产品优化。例如,他们引入了智能调度算法,实现了计算资源的自动分配和负载均衡;同时,他们还加强了数据安全性和隐私保护措施,确保客户的数据安全。这些技术突破和产品升级使得ECS公司的服务更加稳定、可靠和高效。

HTC Korea(TAEJIN Technology )公司的发展小趣事

进入安卓时代,HTC再次展现了其敏锐的市场洞察力和强大的技术实力。2008年,HTC联合电信运营商T-Mobile推出了世界上第一款安卓手机T-Mobile G1,这款手机的成功标志着HTC正式进入了安卓阵营。随后,HTC推出了多款备受好评的安卓手机,如HTC Hero(G3)等,进一步巩固了其在智能手机市场的地位。与谷歌和安卓的合作,为HTC带来了前所未有的发展机遇。

问答坊 | AI 解惑

inputPanel控件出现资源未释放问题

程序中有两个窗体,我为每个窗体都加了inputpanel 都写了如下方法 [code]         ///         /// 让窗体随着输入法窗口上移         /// & ...…

查看全部问答>

双端口存储器可写不可读

大家好,s3c2410的板子,上面接上我们自己的双端口存储器IDT70v05(8k*8)。情况是这样的,我对8k空间连续写10次没有问题,但是对这些空间连续读10次,内核马上重启。另外,对8k空间读一次的话没有任何问题! 已经确认不是软件问题,请教大家,是不 ...…

查看全部问答>

ARM的串口输出问题

问个困扰了我很久的问题: Uart_Printf这个函数 我看了它的定义。但还是不很懂。而且用它串口输出的话,显示的是乱码。过程是这样的:我选取了某公司写的测试程序中的3个文件:RTC.C 、44BINIT.S和44blib.c。用这3个文件做了工程。(当然了,我还添 ...…

查看全部问答>

钻孔文件问题

请问各位朋友,我这里有个钻孔文件,但不知道是用什么软件画出来,用什么方法可以让PROTEL 能够识别,有知道的麻烦说一下.小弟在这里先谢过了.…

查看全部问答>

可卖3块STM32板(外扩了SRAM/NANDflash),找点本钱回来

自己做的,有3块https://bbs.eeworld.com.cn/upfiles/img/20092/2009210202234127.gifhttp://item.taobao.com/auction/item_detail.jhtml?item_id=45a768b70c9bfb6ba339f8219eb08610&x_id=0db21:板载STM32F103ZET6;IS61LV25616-10(512K字节 ...…

查看全部问答>

万方数据免费下载方法

新年带给大家个好消息!万方数据是中国最全的学术资料库(论文、期刊、图书),但通常需收费用才能其官方网站下载文献。现寻得一种免费下载万方数据的方法与各位研友共同分享,在“上海研发公共服务平台”(政府公益性质)注册审核通过后,便可在“上 ...…

查看全部问答>

和TI那些事--说说launchpad

图中左边是430 Launchpad, 参加2012年电子设计的同学肯定都不陌生吧,板载仿真器,可以根据自己需求选择不同的G2系列单片机,非常适合入门及开发。在今年的比赛中,我们实验室很多队伍把它用在系统中,很好的满足了低功耗的需求。 图中右边是TI近 ...…

查看全部问答>

单片机学习资料

单片机 学习 资料…

查看全部问答>

示波器频响方式对信号采集保真度的影响

脉冲响应原理 一个“完美”的方波脉冲包含了无数阶奇次正弦谐波分量的幅度,如公式1所示: 因此,我们可以认为测量系统采集脉冲信号的过程,也就是先采集其各个正弦谐波分量然后再合成脉冲的过程。现在测试测量设备包括数字示波器的前端输入带 ...…

查看全部问答>