【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)设置值位:把某一个值设置进去表示要写入什么

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/162382.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tortoise SVN 察看本地缓存密码

1、打开设置(Settings) 2、查看保存的数据 3、打开鉴权数据 4、查看密码 CTRLSHIFT双击表格,就会出现一列密码列 (我的是Mac PD虚拟Win11,CTRLSHIFTOPTION双击表格) 原文见这里: Recover SVN …

【ubuntu】常用软件安装

【ubuntu】常用软件安装 前言安装搜狗输入法安装flameshot截图软件总结 前言 Ubuntu 是一个基于 Linux 内核的开源操作系统,它提供了简单易用的界面和丰富的功能,广受开发者和普通用户的喜爱。博主时常也需要经常切换Ubuntu系统进行开发和学习&#xff…

2023系统架构师---信息系统基础知识

目录 信息系统基础知识 信息系统概述 信息系统开发方法 1.结构化方法 2,原型法 3.面向对象方法 4.面向服务的方法 信息系统基础知识 信息系统是一个由人、计算机等组成的能进行信息的收集、传递、存储、加工、维护和使用的系统,它是一门综合了经济…

模型的选择与调优(网格搜索与交叉验证)

1、为什么需要交叉验证 交叉验证目的:为了让被评估的模型更加准确可信 2、什么是交叉验证(cross validation) 交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成4份,其中一份作为验证集。然后经过…

专业144,总分440+,上岸西北工业大学827西工大信号与系统考研经验分享

我的初试备考从4月末,持续到初试前,这中间没有中断。 总的时间分配上,是数学>专业课>英语>政治,虽然大家可支配时间和基础千差万别,但是这么分配是没错的。 数学 时间安排:3月-7月:…

ROC与AUC与主动学习评价指标ALC

首先需要关注一下什么是混淆矩阵,此处认为1为正类,0为负类 预测为0预测为1真实为0TN真负例(预测为0,真实也为0)FP假正例(预测为1,但真实为0)真实为1FN假负例(预测为0&am…

前端HTML要了解的知识,DOCTYPE 声明究竟是做什么的、作用是什么?

🌟🌟🌟 专栏详解 🎉 🎉 🎉 欢迎来到前端开发之旅专栏! 不管你是完全小白,还是有一点经验的开发者,在这里你会了解到最简单易懂的语言,与你分享有关前端技术和…

【LeetCode热题100】--55.跳跃游戏

55.跳跃游戏 方法:贪心 对于数组的任意一个位置y,如何判断它是否可以到达? 只要存在一个位置x,它本身可以到达,并且它跳跃的最大长度为xnums[x],这个值大于等于y,即xnums[x]≥y,那么这个位置y…

节省工时超 1500人/天,国泰基金探索金融业人机协同新业态

“十四五”时期是我国经济实现从高速增长转变为高质量发展的关键历史时期,“十四五”规划向金融行业提出了数字化转型与科技监管的新要求。在新一轮科技革命和产业变革趋势下,新一代信息技术与金融行业融合加速,金融行业面临着监管要求与自身…

【MySQL系列】- SELECT语句执行顺序

【MySQL系列】- SELECT语句执行顺序 文章目录 【MySQL系列】- SELECT语句执行顺序一、MYSQL逻辑查询处理的步骤图二、MYSQL执行顺序详解2.1 执行FROM操作2.2 应用ON过滤器2.3 JOIN外部行2.4 应用WHERE过滤器2.5 GROUP BY分组2.6 应用ROLLUP 或 CUBE2.7 HAVING过滤2.8 处理SELEC…

数据结构--B树

目录 回顾二叉查找树 如何保证查找效率 B树的定义 提炼 B树的插入和删除 概括B树的插入方法如下 B树的删除 导致删除时,结点不满足关键字的个数范围时(需要借) 如果兄弟不够借,需要合体 回顾B树的删除 B树 B树的查找 …

单链表经典OJ题:反转链表

题目: 给你单链表的头节点 head ,i请你反转链表,并返回反转后的链表。 图例: 分析: 根据链表的特征,反转链表的本质便是改变节点内部的指针方向。 将原先指向下一个节点的指针进行修改,将其的…

PRCV 2023:语言模型与视觉生态如何协同?合合信息瞄准“多模态”技术

近期,2023年中国模式识别与计算机视觉大会(PRCV)在厦门成功举行。大会由中国计算机学会(CCF)、中国自动化学会(CAA)、中国图象图形学学会(CSIG)和中国人工智能学会&#…

【物联网+JAVA 】智慧工地源码

一、什么是智慧工地? 工地本身不拥有智慧,工地的运作是依赖于人的智慧。工地信息化技术,能够减少对人的依赖,使工地拥有智慧。 智慧工地,就是立足于“智慧城市”和“互联网”,采用云计算、大数据和物联网…

python教程:selenium WebDriver 中的几种等待

嗨喽,大家好呀~这里是爱看美女的茜茜呐 强制等待:sleep() import time sleep(5) #等待5秒设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点: 不智能,使用太多的sleep会影响脚本运行速度。…

Vue 网络处理 - axios 异步请求的使用,请求响应拦截器(最佳实践)

目录 一、axiox 1.1、axios 简介 1.2、axios 基本使用 1.2.1、下载核心 js 文件. 1.2.2、发送 GET 异步请求 1.2.3、发送 POST 异步请求 1.2.4、发送 GET、POST 请求最佳实践 1.3、请求响应拦截器 1.3.1、拦截器解释 1.3.2、请求拦截器的使用 1.3.3、响应拦截器的使…

微信小程序--小程序框架

目录 前言: 一.框架基本介绍 1.整体结构: 2.页面结构: 3.生命周期: 4.事件系统: 5.数据绑定: 6.组件系统: 7.API: 8.路由: 9.模块化: 10.全局配置&…

【LeetCode】35. 搜索插入位置

1 问题 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例…

Linux性能优化--实用工具:性能工具助手

8.0 概述 本章介绍一些在Linux系统上可用的实用程序,它们能够加强性能工具的有效性和可用性。实用工具本身不是性能工具,但是当它们与性能工具一起使用时,它们可以帮助完成如下功能:自动执行繁琐的任务、分析性能统计数据&#x…

【Linux】adduser命令使用

我们经常在linux系统中创建用户。有时候用的是 useradd 有时候用的是 adduser ,好混乱啊到底用哪个啊。今天咱们一起来学习一下。 adduser与useradd的区别 useradd 命令是内置的 Linux 命令,在任何 Linux 系统中都可用。然而,使用这种低级…