当前位置: 首页 > news >正文

【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

题目 解题核心&#xff1a; 分解质因数&#xff0c;每个质因数的次方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文件从被加载到被卸载这个生命过程&#xff0c;总共要经历4个阶段&#xff1a; 加载->链接&#xff08;验证准备解析&#xff09;->初始化&#xff08;使用前的准备&#xff09;->使用->卸载 其中类加载过程包括加载、验证、准备、解析和初始化五个阶…...

PHP yield

概念&#xff1a; Generator&#xff1a;带 yield的function yield&#xff1a;Generator或task的中断关键字&#xff0c;执行到yield时一次调度周期执行完即阻塞&#xff0c;并返回右侧表达式结果&#xff0c;等待下一次调度器运行next()或迭代遍历才会继续往下执行&#xff0…...

react antd实现upload上传文件前form校验,同时请求带data

最近的需求&#xff0c;两个下拉框是必填项&#xff0c;点击上传按钮&#xff0c;如果有下拉框没选要有提示&#xff0c;如图 如果直接使用antd的Upload组件&#xff0c;一点击文件选择的窗口就打开了&#xff0c;哪怕在Button里再加点击事件&#xff0c;也只是&#xff08;几乎…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...