目录
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位带操作原理和用途https://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
时钟相关寄存器位一般有三种:状态位、开关位、设置值位。