完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 hejecu 于 2018-11-14 08:01 编辑 第十三章 FLASH数据存储实验 13.1 实验目的 13.2 实验简介 不同型号的STM32F4,其FLASH容量也有所不同,最小的只有128K字节,最大的则达到1024K字节。星光的闪电F407开发板选择的STM32F407ZGT6的FLASH容量为 1024K字节,属于大容量产品(另外还有中容量和小容量产品),其闪存结构图如下: 图13.2.1 系统存储器,这个主要用来存放 STM32F4 的bootloader 代码,此代码是出厂的时候就固化在STM32F4里面了,专门来给主存储器下载代码的。当B0接 V3.3,B1接GND的时候,从该存储器启动(即进入串口下载模式)。 OTP区域,即一次性可编程区域,共528字节,被分成两个部分,前面 512 字节(32 字节为 1 块,分成16块),可以用来存储一些用户数据(一次性的,写完一次,永远不可以擦除!),后面16字节,用于锁定对应块。 选项字节,用于配置读保护、BOR 级别、软件/硬件看门狗以及器件处于待机或停止模式下的复位。 闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪存模块的控制机构。 在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。 编程和擦除闪存 闪存编程一次可以写入8位、16位、32位。 闪存擦除操作可以按页面擦除或完全擦除(全擦除)。全擦除不影响信息块。 为了确保不发生过度编程, 闪存编程和擦除控制器块是由一个固定的时钟控制的。 写操作(编程或擦除)结束时可以触发中断。仅当闪存控制器接口时钟开启时,此中断可以用来从WFI模式退出。 闪存读取 STM32F4 可通过内部的I-Code指令总线或D-Code数据总线访问内置闪存模块,本章我们主要讲解数据读写,即通过D-Code数据总线来访问内部闪存模块。 为了准确读取Flash数据,必须根据CPU时钟(HCLK) 频率和器件电源电压在 Flash 存取控制寄存器 (FLASH_ACR)中正确地设置等待周期数 (LATENCY)。当电源电压低于 2.1V 时,必须关闭预取缓冲器。 Flash等待周期与 CPU 时钟频率之间的对应关系,如表13.2.1 所示: 表13.2.1 CPU时钟(HCLK)频率对应的FLASH等待周期表 13.3 电路设计 用到的硬件资源有串口,电路图前面章节介绍过,IAP编程属于片上资源,所以电路图这里略过。 13.4 软件设计 打开光盘目录下的3、程序源码->1、基础实验->下的“实验10 FLASH数据存储实验”工程,打开左侧目录树BSP下的stm32_flash.c文件,此为STM32的FLASH的读写驱动程序文件,工程目录如下图所示: 图13.4.1 13.5 下载验证 用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验10 FLASH数据存储实验”工程代码,编译下载,打开串口调试助手,串口波特率115200,程序功能是向STM32F407ZGT6的FLASH扇区5和6,即地址0x08020000开始处写入250字节数据,然后再读出来,比较读出和写入是否一致,正确串口打印STM32 FLASH ReadWrite OK,错误串口打印STM32 FLASH ReadWrite ERROR。
|
|
相关推荐
|
|
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 14:30 , Processed in 0.629714 second(s), Total 68, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号