单片机——FLASH(2)

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

Main memory
主存储区
放置代码和常数
System memory
系统存储区
方式bootloader代码
OTP区
一次性可编程区
选项字节
配置读保护,BOR级别,软件/硬件看门狗以及期间处于待机或停止模式下的复位,相当于一些寄存器。
在这里插入图片描述

flash写数据时

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

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

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

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

相关推荐

  1. 单片机中什么是FLASH

    2024-02-14 09:18:01       39 阅读
  2. Flask基础学习2

    2024-02-14 09:18:01       53 阅读
  3. stm32flash一键ISP烧录单片机

    2024-02-14 09:18:01       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-14 09:18:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-14 09:18:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-14 09:18:01       87 阅读
  4. Python语言-面向对象

    2024-02-14 09:18:01       96 阅读

热门阅读

  1. 【嵌入式——C++】STL

    2024-02-14 09:18:01       50 阅读
  2. 第三代互联网web3.0

    2024-02-14 09:18:01       53 阅读
  3. 除了ajax还有什么方法获取数据而不用刷新数据

    2024-02-14 09:18:01       50 阅读
  4. 信号的状态类型

    2024-02-14 09:18:01       48 阅读
  5. 面试计算机网络框架八股文十问十答第四期

    2024-02-14 09:18:01       59 阅读
  6. 23种设计模式之建造者模式

    2024-02-14 09:18:01       55 阅读
  7. CSS介绍

    CSS介绍

    2024-02-14 09:18:01      44 阅读
  8. 企业级DevOps实战

    2024-02-14 09:18:01       41 阅读
  9. 2024.2.7

    2024.2.7

    2024-02-14 09:18:01      48 阅读
  10. 掘根宝典之C++运算符重载

    2024-02-14 09:18:01       53 阅读