单片机第三季-第二课:STM32存储器、电源和时钟体系

2023-09-14 08:59:00

目录

1,存储器

1.1,位带操作

2,启动模式 

3,电源管理系统 

4,复位和时钟 

4.1,复位 

4.2,时钟 


1,存储器

ICode总线:

该总线将Cortex™-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。

DCode总线:

该总线将Cortex™-M3内核的DCode总线与闪存存储器的数据接口相连接(常量加载和调试访问)。 系统总线此总线连接Cortex™-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间的访问。

DMA总线:

此总线将DMA的AHB主控接口与总线矩阵相联,总线矩阵协调着CPU的DCode和DMA到 SRAM、闪存和外设的访问。 

AHB/APB桥(APB):

两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操作于全速(最高72MHz)。

STM32是32位CPU,数据总线32位;
STM32地址总线也是32位;(地址总线32位不是由数据总线32位决定的)
STM32可以访问地址的容量:4GB(2的32次方Byte);

STM32用不完4GB空间,存在逻辑上的地址和实际地址;
存储器映像就是告诉我们STM32设计时是如何使用这4GB的逻辑空间;

ARM是内存与IO统一编址的,因此为IO留出逻辑地址;

1.1,位带操作

STM32只支持8、16、32位操作,而不支持位操作;但是实际编程中有对1位操作需求,因为STM32不支持位操作,需要对32位进行整体操作,读出整个32位,然后对其中一位做操作后再只能个体32位写回去,这样做是可以的,但是效率低;

如何改进?
能够直接修改那一位,并且不影响其他位(51单片机是可以直接操作一位的,这方面来说51单片机比STM32先进)。位段就是解决这个问题的。
将这一位映射到别的地方32位,然后在别的地方操作这32位;

如何映射?
bit_word_addr = bit_band_base + (byte_offset×32) + (bit_number×4)
其中: 
bit_word_addr是别名存储器区中字的地址,它映射到某个目标位。
bit_band_base是别名区的起始地址。
byte_offset是包含目标位的字节在位段里的序号。
bit_number是目标位所在位置(0-31)。 

快速理解STM32位带操作原理和用途icon-default.png?t=N7T8https://blog.csdn.net/ybhuangfugui/article/details/108067563

位带操作的意义:

2,启动模式 

启动模式,是研究STM32上电复位后从哪里去执行程序的问题。

三种启动模式:
(1)用户闪存存储器区是给我们设计来放置用户写的代码的,我们程序员写的代码烧录时就被烧录到这里了,正常工作状态下就要把STM32设置为从这里启动。
(2)系统存储器区在非常规情况下用,用来实现ISP功能的。
(3)内置SRAM区,这种也是非常规的,用来实现调试器调试功能的。 

在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。 

问题:系统存储器是指的什么?

ISP和IAP:

(1)ISP就是in-system programming(在系统烧录,在系统编程)。以前要烧录代码bin文件到单片机内部的flash中是需要借助专用的烧录器的,比较麻烦。后来我们就需要一种不用烧录器也不用把单片机从板子上卸下来的烧录方法,这种方法就是ISP。一般ISP都是PC机通过串口把bin/hex文件直接isp到单片机内部flash中;
(2)IAP就是in-application programming(在应用编程,在应用烧录,在线升级),IAP的核心是用户需要在自己的应用程序中去操作单片机内部flash的控制器的寄存器,实现对内部flash的烧录功能。然后IAP的时候用户程序通过串口(usb、ethernet)来接收PC发送过来的bin/hex文件,然后将之烧录到内部flash中去完成IAP。完成后再次启动后就会从用户存储器区执行,更新就会起效果。一般实现iAP需要人为的将用户存储器区分为2部分:bootloader+app。

3,电源管理系统 

STM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。 当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。

低功耗模式:

当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时。

用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。

STM32F10xxx有三种低功耗模式:

● 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行)

● 停止模式(所有的时钟都已停止)

● 待机模式(1.8V电源关闭)

此外,在运行模式下,可以通过以下方式中的一种降低功耗:

● 降低系统时钟

● 关闭APB和AHB总线上未被使用的外设时钟。 

4,复位和时钟 

4.1,复位 

STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。 

当发生以下任一事件时,产生一个系统复位:

1. NRST引脚上的低电平(外部复位)

2. 窗口看门狗计数终止(WWDG复位)

3. 独立看门狗计数终止(IWDG复位)

4. 软件复位(SW复位)

5. 低功耗管理复位 

当以下事件中之一发生时,产生电源复位:

1. 上电/掉电复位(POR/PDR复位)

2. 从待机模式中返回 

当以下事件中之一发生时,产生备份区域复位。
1. 软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)中的BDRST位产生。

2. 在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。 

4.2,时钟 

时钟源分类:纯内部、内外部、纯外部;

PLL:锁相环电路,功能就是倍频;

MCO: Main Clock Output,可将mcu内部的时钟通过MCO管脚输出; 

(1),4套独立时钟:HSE/LSE/HSI/LSI
(2),纯内部:HSI、LSI,时钟频率的精度较低;
(3),内外部:HSE、LSE,时钟频率的精度较高;
(4),纯外部:OSC_IN、OSC32_IN,即晶振和时钟电路都在外部,产生的外部时钟信号通过OSC_IN、OSC32_IN引脚输入,同时保证OSC_OUT、OSC32_OUT引脚悬空,这样可以实现多个mcu的时钟同步。

时钟节点名称:HSI、HSE、LSI、LSE、PLLCLK、SYSCLK、USBCLK、HCLK、FCLK、PCLK1、PCLK2、ADCCLK、RTCCLK、IWDGCLK。 

时钟相关的寄存器:

(1)RCC_CR            0x40021000            重要
(2)RCC_CFGR            0x40021004            重要
(3)RCC_CIR
(4)RCC_APB2RSTR        复位外设时钟的
(5)RCC_APB1RSTR
(6)RCC_AHBENR        外设时钟开关        重要
(7)RCC_APB2ENR                            重要
(8)RCC_APB1ENR                            重要
(9)RCC_BDCR
(10)RCC_CSR

时钟相关寄存器位一般有三种:状态位、开关位、设置值位。

更多推荐

ArcGIS 10.3软件安装包下载及安装教程!

【软件名称】:ArcGIS10.3【安装环境】:Windows【下载链接】:链接:https://pan.baidu.com/s/1K5ab7IHMYa23HpmuPkFa1A提取码:oxbb复制这段内容后打开百度网盘手机App,操作更方便哦软件解压码点击原文获取:ArcGIS10.3软件安装包下载及安装教程软件介绍:

理解MySQL的会话变量、局部变量和全局变量

理解MySQL的会话变量、局部变量和全局变量1.MySQL变量分类根据作用范围不同,分为会话用户变量和局部变量。会话用户变量:作用域和会话变量一样,只对当前连接会话有效。局部变量:只在BEGIN和END语句块中有效,局部变量只能在存储过程和存储函数中使用。全局变量:在MySQL服务器启动运行后,系统内置变量。2.变量定

QRunnable与外界互传对象

1.概述QRunnable与外界互通讯是有两种方法的使用多继承。让我们的自定义线程类同时继承于QRunnable和QObject,这样就可以使用信号和槽,但是多线程使用比较麻烦,特别是继承于自定义的类时,容易出现接口混乱,所以在项目中尽量少用多继承。//使用多继承classrunnable:publicQObject,

xdebug3开启profile和trace

【xdebug开启profiler】https://xdebug.org/docs/profilerhttp://www.xdebug.org.cn/docs/profiler1、php.ini添加下面配置然后重启php容器:xdebug.mode=profile;这个目录保存profile和trace文件xdebug

TQ210-Bootloader-Uboot(LTS)

Bootloader的作用Bootloader是位于计算机系统启动过程中的程序,它的主要作用是将操作系统从磁盘等外部存储介质加载到计算机内存中,并启动操作系统执行。Bootloader通常包括硬件初始化、自检、异常处理和启动操作系统等功能。它是计算机系统中非常重要的部分,直接影响系统启动和运行的稳定性和性能。U-boo

10分钟设置免费海外远程桌面

前言本教程将向您介绍如何使用AmazonLightsail服务的免费套餐轻松搭建属于您的远程桌面。依托于Amazon全球可用区,您可以在世界各地搭建符合您配置需求的远程桌面。本教程需要先拥有亚马逊云科技海外账户。现在注册亚马逊云科技账户可以享受12个月免费套餐,包括EC2等多种热门产品。亚马逊云科技开发者社区为开发者们

LinkedList与链表

目录一、Arraylist的缺陷二、链表2.1链表的概念和结构2.2链表的实现三、链表面试题3.1删除链表中所有值为val的节点3.2反转一个单链表3.3链表的中间节点3.4将有序链表合并3.5输出倒数第k个节点3.6链表分割3.7链表的回文结构3.8找两个链表的公共节点3.9判断链表是否有环3.10找链表入环的第一个

Axure设计之数据图表折线图(中继器)

折线图是一种用于显示数据随时间变化或有序类别关系变化的图形。在折线图中,数据点用线段连接,并按照时间顺序或类别顺序排列。通过观察折线图的走势和变化,可以获得数据变化的趋势和规律。在系统统计分析中折线图经常被使用的数据图表。一、效果展示1、该示例为折线图,分别对客流量和购买量以月份为单位进行统计;2、横轴为统计月份,纵轴

Python经典练习题(一)

文章目录🍀第一题🍀第二题🍀第三题🍀第四题🍀第五题🍀第一题有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?这里我们使用两种方法进行求解解法一:循环套循环count=0foriinrange(1,5):forjinrange(1,5):forkinrange(1,5):if(i!

如何辨认是否是高防服务器?

因为现在高防服务器比较出名,很多IDC服务器商都标榜自己的服务器是高防服务器,那我们怎么辨别服务器商说的高防服务器是否是真正的高防服务器呢?今天小编就告诉大家几点辨认是否是高防服务器的小要点。向选择好的服务器商要一下高防服务器的IP,然后通过简单的测试来看一看,也就是ping指令(用来测试网络连接是否正常)来检查,一般

如何使用插件扩展Vue的功能

Vue是一款流行的前端JavaScript框架,它的核心库提供了许多强大的功能,但有时我们需要额外的功能来满足特定需求。这时,使用插件来扩展Vue的功能是一个很好的选择。本文将详细介绍如何使用插件来扩展Vue的功能,包括创建、注册和使用插件。Vue提供了强大的插件系统,供大家来扩展项目功能。开发者可以自由的使用公开的第

热文推荐