单片机——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与内存通讯时,有地址总线,总线的宽带意味着每次通讯读写的字节数。

相关推荐
码不停蹄Zzz6 分钟前
对内存堆栈管理的简单理解[C语言]
c语言·开发语言
白帽子凯哥哥8 分钟前
大一想打CTF,稍微学了些web想转pwn零基础要如何学习
学习·渗透测试·web·pwn·ctf
执笔论英雄28 分钟前
【cuda】 event 学习实践。
学习
困死,根本不会28 分钟前
Python 基础语法速通:从入门到上手
windows·笔记·python·学习
半夜修仙31 分钟前
总结一下 Spring 中存取 Bean 的相关注解, 以及这些注解的用法.
java·笔记·学习·spring
edjxj39 分钟前
PFC电路学习
单片机·学习
电气_空空1 小时前
基于 Labview/Matlab 的人脸识别系统设计与实现
单片机·嵌入式硬件·毕业设计·labview
星幻元宇VR1 小时前
VR禁毒学习机:禁毒宣传数字化的创新尝试
科技·学习·安全·vr·虚拟现实
小光学长2 小时前
基于ssm的书法学习交流系统25ki07v1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·开发语言·数据库·学习·ssm
Engineer邓祥浩2 小时前
JVM学习笔记(2) 第一部分 走近java 第1章 走近java
jvm·笔记·学习