【STM32】---存储器,电源核时钟体系

一、STM32的存储器映像
1 文中的缩写

2 系统构架(原理图)


3. 存储器映像
(1)STM32是32位CPU,数据总线是32位的
(2)STM232的地址总线是32位的。(其实地址总线是32位不是由数据总线是32位决定的)
(3)STM32可以访问的地址容量是:4GB(2的32次方Byte)
(4)STM32肯定用不完4GB的空间,所以就有了:逻辑上地址,实际的地址
(5)存储器的映像就是告诉我们STM32设计时是如何使用这4GB的逻辑地址。

ARM是内存与IO统一编址
4.STM32实际地址安排
0x0000 0000 - 0x07ff ffff 128MB 映射区【解决不同启动方式】
0x0800 0000 -0x0801 ffff 128KB Flash

0x1fff f000 - 0x1fff f800 2KB System memory

0x 1fff f8000 -0x1fff f9ff 512B option bytes

二、STM32的位带详解(bitband)
1.基本概念

bitband,有时候翻译位位带操作
位带操作(地址的映射,一对一)
别名存储器区(逻辑地址) 字(32位)
映射
位段存储区 位
别名存储器区大小=位段存储器区大小的32倍
2.别名存储器区和位段存储区的映射

为什么要有位带操作??因为STM32本身只能支持8,16,32位的操作,不能支持位操作(不能支持一位)。
但是实际编程中有对1位单独操作的需求。一般我是这么做的:因为STM32不支持位操作,所以我们对32进行整体操作。我们一般读取整个32位,然后对其中一位做操作,在整体32位写回去。这么做是可以的,但是效率低。
如何改进效率??想一个方法,只修改其中一位还不影响其他位。如果硬件不支持是没办法的,除非硬件给你支持位操作。
3.位段操作的原理

而ARM又不支持位操作,所以发明了位带操作来替代。位带操作的思路是不让你直接单独操作这一位,而是把这一位给你映射到别的某一个地方的32位,然后你在别的地方操作那个32位相当于操作这里的这1位。
位带操作的核心问题:如何由位段存储器区地址,计算出别名存储器区的地址。
4.位段操作计算公式

三、STM32启动模式
1. 嵌入式闪存

2.三种启动模式
(1)启动模式,是研究STM32上电复位后从哪里区执行程序的问题
可以通过 BOOT[1:0]引脚选择三种不同启动模式。
(2)用户闪存存储器区:是给我们设计来放置用户写的代码的,我们程序员写的代码烧录时就被烧录到这里了,正常各种状态下就要把STM32设置为从这里启动的。
(3)系统存储器区:在非常规情况下用,用来实现ISP功能
(4)内嵌SRAM区:这种也是非常规的,用来实现调试器调试功能的。
我们常用的是用户闪存和系统存储区
3.ISP和IAP
单片机三种烧录方式ISP、IAP和ICP有什么不同?-电子工程专辑
ISP:程序自动【系统存储器区】
ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程
ISP就是in-system programming(在系统烧录,在系统编程)。以前要烧录bin文件到flash(单片机内部的flash中)是需要借助专用的烧录器的。比较麻烦。后面我们就需要一种不用烧录器也不用把单片机从板子上卸下来烧录方法,这种方法就是ISP。一般ISP都是通过串口把bin/hex文件直接isp到单片机内部flash中。如果想要使用ISP则要从系统存储器区开始启动STM32.
IAP:手写操作代码【用户闪存存储器区】
而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。
IAP:in-application programming(在应用编程,在应用烧录,在线升级)。
IAP的核心是用户需要在自己的应用程序中去操作单片机内部flash的控制器的寄存器,实现对内部flash的烧录功能。
然后IAP的时候用户的程序通过串口(usb,rtheernet)来接收PC发送过来的bin/hex文件,然后将其烧录到内部flash中去完成IAP。完成后再次启动后就会从用户存储器区执行,更新就会起效果。
一般实现IAP需要人为的将用户存储器区分为部分:bootloader+app【实际进行功能更新的程序】
四、STM32电源管理系统(PWR)

1.框图
外部传输电压3.3V,但是实际内部电压是1.8V

2.上电复位(POR)和掉电复位(PDR)

3 低功耗模式
睡眠模式,停机STOP模式,待机模式----->功耗越来越低,但是开机需要的时间越来越长。


降低功耗实际上是断开时钟。【时钟是关键】
为了省电:当该GPIO使用到才开启其时钟
1.睡眠模式(SLEEP)
CPU停,但是内部外设运行
唤醒源:任何中断
1.进入睡眠模式

2.退出睡眠模式


2.停止模式(STOP)

CPU停,时钟停(内部外设也停),只有SRAM(内存)和寄存器还能报错原来的值
唤醒源:外部中断(只能是外部中断)
外部中断 VS 内部中断
内部中断:定时器,USB
外部中断:按钮
3.待机模式(SUSPEND)

CPU停,外设停,时钟停,SRM和寄存器停(相当于整个都断电关机了),只有备份寄存器和待机电路还能工作。
唤醒源:WKUP引脚上升沿,RTC闹钟,NRST引脚上外部复位,IWDG复位

五、复位与时钟
1.复位
STM32F10xxx 支持三种复位形式,分别为系统复位、上电复位和备份区域复位(待机模式下)。
1.系统复位
复位后CPU都会被强制到复位向量中去执行程序。
RCC——CSR:当发生了某一个复位,则对应的bit位上的电平会发生变化

2.电源复位


2.时钟
1.时钟源:
时钟来源
不同时钟源带来不同的特点
分为三种:
1)纯内部:全部内嵌到单片机中【缺点:很不精确】
2)内外部:时钟产生的振动电路在内部,晶振在外部【晶振不能产生时钟】
3)纯外部:外部直接产生时钟
2.PLL(锁相环电路)
特点:可以进行倍频
频率是逐级递减

3.时钟通道与流向,分频
时钟的流向不是固定的
4.完全独立的多个时钟
多个时钟可能不是来自一个地方,所以使用的时钟电路会不同
六、STM32的时钟框图
1.总体配置
我们一般使用纯内部和内外部
一般上电的时候是使用内部的时钟周期【速度快】,但是一段时间切换为外部【较为精准】
1.2套独立时钟:
因为我们的晶体震荡电路和外部晶振不同
(1)HSxxx
(2)LSxxx:

2.纯内部:HSI(内部高速时钟源),SLI
RC:时钟源(可以产生时钟震荡)
HSI:high sourse intern


3.内外部:HSE(外部高速时钟源),LSE
HSE:high sourse extern

4.纯外部:OSC——IN,OSC32——IN
如果外部有一个高速/低速时钟要输入,则按照输入的来控制RTC
如果没有则直接使用标志的

5.时钟树
STM32学习8 理解STM32的时钟树_51CTO博客_stm32时钟树





时钟节点名称
1)HSI,LSI:内部高速/低速时钟源
2)HSE,LSE:外部高速/低速时钟源
3)PLLCLK:输出时钟
4)SYSCLK:输入到CPU时钟
5)USBCLK:USB模块时钟
6)HCLK:AHB时钟
7)FCLK:空闲时钟8)PCLK1,PCLK2:APB1,APB2总线时钟
9)ADCCLK:ADC时钟
10)RTCCLK:RTC时钟
11)IWDGCLK:看门狗
6.systick和MCO
(1)systick
SYSCLK:CPU工作的频率
systick:系统滴答时钟【时间片】
RCC【STM32中管理时钟的总名称】通过AHB时钟8分频后提供给Cortex系统定时器的外部时钟。通过对SysTick控制与状态寄存器的设置,可以选择上诉时钟或者Cortex AHB时钟作为SysTick时钟。

(2)MCO:输出位

八、时钟寄存器
我们在使用时钟的时候,记得打开时钟。
STM32默认时钟都是关闭的。
0.查看RTC的基地址
基地址,查memory map图得到,然后配合偏移量得到寄存器地址
一个寄存器占4字节(32bit),所以相邻的寄存器相差4字节

1.RCC_CR:时钟倍频(时钟控制寄存器)
因为RCC起始地址为:0x4002 1000
所以CR的首地址【偏移量为0】应该是0x4002 1000


2.RCC_CFGR:时钟配置寄存器
CFGR:首地址为:0x4002 1000+0x04=0x4003 1004


3.RCC_CIR:时钟中断寄存器
CIR:首地址为:0x4002 1000+0x08=0x4003 1008

4.RCC_APB2RSTR/RCC_APB1RSTR:APB2 /APB1 外设复位寄存器
复位的是时钟

5.RCC_AHBENR/ RCC_APB2ENR/ RCC_APB1ENR:AHB外设时钟使能寄存器

6.RCC_CSR:控制/状态寄存器
判断从哪里来进入复位的。

7.寄存器分类
寄存器位一般有三种:状态位,开关位,设置值位
1)状态位:只用读取,获取状态【一般是硬件设置的】
2)开关位:一般写“1”表示打开【使能】,写“0”表示关闭
3)设置值位:把某一个值设置进去表示要写入什么
相关文章:
【STM32】---存储器,电源核时钟体系
一、STM32的存储器映像 1 文中的缩写 2 系统构架(原理图) 3. 存储器映像 (1)STM32是32位CPU,数据总线是32位的 (2)STM232的地址总线是32位的。(其实地址总线是32位不是由数据总线是…...
Flink中的时间和窗口操作
1.窗口概念 在大多数场景下,我们需要统计的数据流都是无界的,因此我们无法等待整个数据流终止后才进行统计。通常情况下,我们只需要对某个时间范围或者数量范围内的数据进行统计分析:如每隔五分钟统计一次过去一小时内所有商品的点击量;或者每发生1000次点击后,都去统计一…...
【算法|前缀和系列No.5】leetcode1314. 矩阵区域和
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【Leetcode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…...
python知识:从PDF 提取文本
一、说明 PDF 到文本提取是自然语言处理和数据分析中的一项基本任务,它允许研究人员和数据分析师从 PDF 文件中包含的非结构化文本数据中获得见解。Python 是一种通用且广泛使用的编程语言,它提供了多个库和工具来促进提取过程。 二、各种PDF操作库 让我…...
基于MATLAB的GPS卫星绕地运行轨迹动态模拟仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 Prn NavData(PRNS_SEL,1);%识别导航数据中的PRNiode NavData(PRNS_SEL,11);%企…...
TCP/IP模型五层协议
TCP/IP模型五层协议 认识协议 约定双方进行的一种约定 协议分层 降低了学习和维护的成本(封装)灵活的针对这里的某一层协议进行替换 四/五层协议 五层协议的作用 应用层 应用层常见协议 应用层常见协议概览 基于TCP的协议 HTTP(超…...
vue 插槽 - 具名插槽
vue 插槽 - 具名插槽 **创建 工程: H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day05\准备代码\09-插槽-具名插槽 vue --version vue create…...
Elasticsearch2.x Doc values
文档地址: https://www.elastic.co/guide/en/elasticsearch/reference/2.4/doc-values.html https://www.elastic.co/guide/en/elasticsearch/guide/2.x/docvalues-intro.html https://www.elastic.co/guide/en/elasticsearch/guide/2.x/docvalues.html https://ww…...
Squeeze-and-Attention Networks for Semantic Segmentation
0.摘要 最近,将注意力机制整合到分割网络中可以通过更重视提供更多信息的特征来提高它们的表征能力。然而,这些注意力机制忽视了语义分割的一个隐含子任务,并受到卷积核的网格结构的限制。在本文中,我们提出了一种新颖的squeeze-a…...
【Java】Java 11 新特性概览
Java 11 新特性概览 1. Java 11 简介2. Java 11 新特性2.1 HTTP Client 标准化2.2 String 新增方法(1)str.isBlank() - 判断字符串是否为空(2)str.lines() - 返回由行终止符划分的字符串集合(3)str.repeat(…...
用Vue3.0 写过组件吗?如果想实现一个 Modal你会怎么设计?
一、组件设计 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式 现在有一个场景,点击新增与编辑都弹框出来进行填写,功能上大同小异,可能只是标题内容或者是显示的主体内容稍微不同 …...
ArmSoM-W3之RK3588硬编解码MPP环境配置
1. 简介 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的 通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不 同芯片的差异,为使用者…...
源码解析flink文件连接源TextInputFormat
背景: kafka的文件系统数据源可以支持精准一次的一致性,本文就从源码看下如何TextInputFormat如何支持状态的精准一致性 TextInputFormat源码解析 首先flink会把输入的文件进行切分,分成多个数据块的形式,每个数据源算子任务会被分配以读取…...
SQL ORDER BY Keyword(按关键字排序)
SQL ORDER BY 关键字 ORDER BY 关键字用于按升序或降序对结果集进行排序。 ORDER BY 关键字默认情况下按升序排序记录。 如果需要按降序对记录进行排序,可以使用DESC关键字。 SQL ORDER BY 语法 SELECT column1, column2, ... FROM table_name ORDER BY column1, …...
光伏三相并网逆变器的控制策略与性能分析(Simulink仿真实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【网络安全 --- xss-labs靶场】xss-labs靶场安装详细教程,让你巩固对xss漏洞的理解及绕过技巧和方法(提供资源)
一,资源下载准备 1-1 VMware 16.0 安装请参考以下博客,若已经安装请忽略: 【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程(…...
蓝桥每日一题(day 3: 蓝桥587.约数个数)--数学--easy
题目 解题核心: 分解质因数,每个质因数的次方1的累乘积就是anscode #include <iostream> #include<algorithm> #include<unordered_map> //# #include<> typedef long long LL; const int N 110, MOD 1e9 7;using namespac…...
深入剖析Java类加载过程:探寻类加载器的奥秘
摘要: 一个java文件从被加载到被卸载这个生命过程,总共要经历4个阶段: 加载->链接(验证准备解析)->初始化(使用前的准备)->使用->卸载 其中类加载过程包括加载、验证、准备、解析和初始化五个阶…...
PHP yield
概念: Generator:带 yield的function yield:Generator或task的中断关键字,执行到yield时一次调度周期执行完即阻塞,并返回右侧表达式结果,等待下一次调度器运行next()或迭代遍历才会继续往下执行࿰…...
react antd实现upload上传文件前form校验,同时请求带data
最近的需求,两个下拉框是必填项,点击上传按钮,如果有下拉框没选要有提示,如图 如果直接使用antd的Upload组件,一点击文件选择的窗口就打开了,哪怕在Button里再加点击事件,也只是(几乎…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...
轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...
ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...
RabbitMQ 各类交换机
为什么要用交换机? 交换机用来路由消息。如果直发队列,这个消息就被处理消失了,那别的队列也需要这个消息怎么办?那就要用到交换机 交换机类型 1,fanout:广播 特点 广播所有消息:将消息…...


