单片机——FLASH(2)

文章目录

    • [flash (stm32f40x 41x的内存映射中区域详解)](#flash (stm32f40x 41x的内存映射中区域详解))
    • flash写数据时

flash (stm32f40x 41x的内存映射中区域详解)

Main memory

主存储区

放置代码和常数
System memory

系统存储区

方式bootloader代码
OTP区

一次性可编程区
选项字节

配置读保护,BOR级别,软件/硬件看门狗以及期间处于待机或停止模式下的复位,相当于一些寄存器。

flash写数据时

flash写数据时,对闪存的任何操作都会锁住总线,这里锁住总线的锁定机制来控制访问点共享资源,有设备要访问资源,会在总线上设置一个锁定的状态,表示正在访问此资源,其他设备访问就会阻塞,直到被释放标志。

所以在进行写操作的时候有必要写禁止数据缓存

flash擦除数据是写1,写入数据的时候是写0

flash闪存的配置和代码建议查看这篇博客,详细清楚:
https://cloud.tencent.com/developer/article/2190978

在代码中。标准库会有禁止数据缓存的标志,即

c 复制代码
FLASH_DataCacheCmd(DISABLE);

但是在HAL库中并没有这一步,知识对flash区域上锁,解锁,HAL库函数有对标志位清除这一项,但是数据缓存标志禁止未提及。目前的一种说法是有可能是HAL库的代码优化导致,但是有待考察。手册中也没有提到。

在STM32中是一个32bits地址对应的一个字节,flash是以最小单位字节操作的。

32位(u32)地址是一个地址代表1字节,4个32位地址代表1个32位数

16位(u16)地址是一个地址代表1字节,2个16位地址代表1个16位数

另外,在控制寄存器FLASH_CR的时候,PSIZE的配置

目前查到的资料是两种说法

一种是:对应的电压只能对应并行位数,例如,电压范围在2.3-3.6v之间的只能是并行位数32

一种是:高电压可以对应并行位数及以下的,例如电压范围在2.3-3.6v之间的可以设置并行位数32,16,8

这里我建议遵循第一种

最后提一下,底层访问通讯总线都要有加锁过程,CPU与内存通讯时,有地址总线,总线的宽带意味着每次通讯读写的字节数。

相关推荐
小付同学呀7 小时前
C语言学习(五)——输入/输出
c语言·开发语言·学习
小龙报7 小时前
【51单片机】 给单片机加 “安全锁”!看门狗 WDT:原理 + 配置 + 复位验证全拆解,让程序稳定不跑飞
驱动开发·stm32·单片机·嵌入式硬件·物联网·51单片机·硬件工程
国科安芯7 小时前
芯片抗单粒子性能研究及其在商业卫星测传一体机中的应用
嵌入式硬件·安全·fpga开发·性能优化·硬件架构
梦幻精灵_cq7 小时前
学C之路:不可或缺的main()主函数框架(Learn-C 1st)
c语言·开发语言
学编程的闹钟8 小时前
E语言计算器开发全攻略
学习
薛定e的猫咪8 小时前
Claude Code 完整学习手册:安装配置、CCR、MCP、插件与 Superpowers开发框架
学习
一路往蓝-Anbo8 小时前
第 9 章:Linux 设备树 (DTS) ——屏蔽与独占外设
linux·运维·服务器·人工智能·stm32·嵌入式硬件
雾山大叔9 小时前
多会话浏览器串口调试助手
经验分享·笔记·学习
小凯1234510 小时前
pytest框架-详解(学习pytest框架这一篇就够了)
python·学习·pytest
今儿敲了吗10 小时前
29| 高考志愿
c++·笔记·学习·算法