原创 【博客大赛】STM32学习-Flash读写

2015-5-4 08:47 14952 19 42 分类: MCU/ 嵌入式 文集: STM32F1学习笔记
一直是使用野火的例程学习STM32,而他的书里面没有讲到STM32的Flash操作,所以一直以为STM32不能对Flash进行操作。后来想到连STC这等国产8位机都可以进行Flash操作,想必STM32也可以,所以对此进行了一番小研究。
其实STM32的库里面就有专门针对Flash的程序,还有一个专门的文档,而且还有中文版本,名字叫《PM0042 STM32F10xxx闪存编程》(见附件)。
手头开发板上芯片是STM32F103C8T6,片上Flash为64KB,按ST定义,属于中容量的,下表就是中容量内存组织。
20130820213353197.jpg
文档中对写Flash有专门的描述,重要的知识点包括但不限于:
1)擦除操作只能是页擦除或全部擦除。
2)写操作只能是每次写入16-bit,即双字节。
3)在擦除之前,要先写两个键值KEY1(0x45670123)和KEY2(0xCDEF89AB)到FLASH_KEYR寄存器,以解除闪存锁。
我们的程序基本流程是,先读取Flash中一个固定地址的数据,然后通过串口打印,再修改此数据,修改后再读回来。
这是写Flash的程序:
void Writeflash(void)
{
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); 
    FLASHStatus = FLASH_ErasePage(StartAddress);
 
if(FLASHStatus == FLASH_COMPLETE)
{
FLASHStatus = FLASH_ProgramWord(StartAddress, 0x12345678);
USART1_printf(USART1, "\r\n");
}
}
 
FLASH_Unlock()就是完成解除闪存锁的工作,以下是FLASH_Unlock()函数的实现。
void FLASH_Unlock(void)
{
  /* Authorize the FPEC of Bank1 Access */
  FLASH->KEYR = FLASH_KEY1;
  FLASH->KEYR = FLASH_KEY2;
 
  #ifdef STM32F10X_XL
  /* Authorize the FPEC of Bank2 Access */
  FLASH->KEYR2 = FLASH_KEY1;
  FLASH->KEYR2 = FLASH_KEY2;
  #endif /* STM32F10X_XL */
}
FLASH_ErasePage()函数就是完成擦除整页数据功能,FLASH_ProgramWord()是向Flash固定的地址写入一个32-bit数据。
20130820213915841.jpg
 
程序进行相应修改可以做成通过USART对Flash操作,比如,通过串口发送数据,修改Flash中的数据。
对Flash的操作用处很多,比如在CAN网络中可以在Flash中预先设置CAN的地址,也可以通过can通信在线修改地址,再比如在温度测量控制系统中可以在Flash预置传感器的标定值等。
 
完整工程文件及参考文档见附件。

文章评论23条评论)

登录后参与讨论

用户24167 2016-5-8 09:48

谢谢,学习一下

用户24167 2016-5-8 09:47

谢谢,学习一下

用户3659544 2016-4-26 21:25

谢谢,学习一下

用户1868772 2016-1-18 15:11

收获大

用户1868772 2016-1-18 15:07

谢谢,好用

sunce_464022046 2016-1-11 16:35

谢谢

用户1847740 2015-12-31 09:05

正在编这款MCU的flash,派上用场了,O(∩_∩)O谢谢

用户1861315 2015-11-12 08:00

给力,给我工作很大的帮助,赞。

用户1860692 2015-11-5 09:16

很好

用户1834845 2015-9-28 20:39

看看OKbuOK
相关推荐阅读
飞言走笔 2017-01-06 21:56
2017,新的博客旅程
EDNChina 改版终于成功了!祝贺! 2017年,开始新的旅程~ ...
飞言走笔 2016-06-01 10:17
【博客大赛】《白鹿原》读后
《白鹿原》这本书已经买了很久,多次以来,都是只翻看几页,顶多几章就放下了,觉得这是一个大部头,得有足够的时间才行。前几天陈忠实先生去世的消息传来,让我很震惊和惭愧。 一口气读完这本书,畅快淋漓,又意...
飞言走笔 2016-03-26 16:42
【博客大赛】《毛斯朝》读后
这本书最早是在凤凰卫视曾子墨主持的一期关于沈志华先生的《世纪大讲堂》节目中知晓的。但是一直拖到今天才读完。 说实话,书的主要内容与当前官方的宣传口径有很多不一致的地方,而沈先生作为中国掌握苏联档...
飞言走笔 2016-03-08 13:46
【博客大赛】蓝牙4.0低功耗技术及其认证要求
详见附件 ...
飞言走笔 2016-02-02 14:20
【转】蓝牙4.0协议官方手册(一)——通用属性配置文件
转自:http://blog.csdn.net/jinzhichaoshuiping/article/details/43370009 通用属性配置文件 (GATT)——该说明书定义了通用属性配置...
飞言走笔 2016-01-31 23:24
【博客大赛】脑洞大开、三观重塑——《人类简史》读后
终于读完了《人类简史》,没有把这本书拖到二月份,这也是2016年读完的第一本书。之前也有所耳闻,但是没有太在意,倒是罗胖子的跨年演讲上偶然提到,不知怎么就勾起了阅读此书的欲望。 本文的标题用了“脑洞...
我要评论
23
19
关闭 站长推荐上一条 /2 下一条