当前位置:   article > 正文

STM32F103学习笔记(三)-STM32F103的存储器、供电_stm32f103系列单片机电源

stm32f103系列单片机电源


一、存储器和总线架构

1、系统架构

  1. 四个驱动单元:

    • Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
    • 通用DMA1和通用DMA2
  2. 四个被动单元:

    • 内部SRAM
    • 内部闪存存储器
    • FSMC
    • AHB到APB的桥(AHB2APBx),它连接所有的APB设备
      AHB(Advanced High-performance Bus)高速总线,是CPU连接高速外设的通道
      APB(Advanced Peripheral Bus) 低速总线,是CPU用来接低速外设的
  3. 系统结构图
    在这里插入图片描述

2、存储器

  1. STM32内存介绍
    STM32是32位CPU,数据总线是32位的,地址总线也是32位的。其实地址总线是32位不是由数据总线是32位决定的,二者可以完全独立。STM32可以访问的地址容量是4GB( 2 32 2^{32} 232Byte),但是其肯定用不完4GB的空间的,所以就有了:逻辑上的地址、实际的地址。

  2. 内存映射
    在这里插入图片描述

  3. STM32实际地址安排

    • 0x00000000 - 0x07FFFFFF 128MB 映射区
    • 0x08000000 - 0x0801FFFF 128KB Flash
    • 0x1FFFF000 - 0x1FFFF800 2KB System Memory
    • 0x1FFFF800 - 0x1FFFF9FF 512B option bytes

二、STM32位带操作

  1. 定义:Bit banding;
  2. 作用:Cortex-M3存储器映射包含两个bit-band区域,这些区域将别名存储区的字映射到bit-band区,写别名区的字和对bit-band区的目标位进行等同于读-修改-写的操作具有相同的效果;
  3. 映射关系:别名存储器区的字(32位)-> 位带(bit-band)存储区的位;
  4. 提出bit-band的原因:
  • 因为STM32本身只支持8、16、32位的操作,而不支持位操作。但是我们实际编程中有对1位单独操作的需求。一般是这么做的:因为STM32不支持位操作,所以我们需要对32位进行整体操作。我们一般是读出整个的32位,然后对其中一位做操作后再整体32位写回去,这么做是可以的,但是效率低。
  • 如何改进效率?那就是想一个办法能够直接一次性修改那一位同时还不影响其他位。如果硬件不支持是没办法的,除非硬件支持位操作。
  • 而ARM又不支持位操作,所以发明了位带操作来替代。位带操作的思路是不让你直接单独操作这一位,而是把这一位给你映射到别的某个地方的32位,然后你在别的地方操作那个32位就相当于是操作这里的这1位。
  1. 地址映射公式如下:
    bit_word_addr = bit_band_base + (byte_offset * 32) + (bit_number * 4)
  • bit_word_addr:别名存储区中要映射到目标位的字的地址;
  • bit_band_base:别名存储区的基地址(起始地址);
  • byte_offset:位段存储区包含目标位的字节的编号;
  • bit_number:为目标位的位位置(0~31)。
  1. 举例如何计算SRAM地址为0x20000300的字节中的位2:
  • SRAM中的地址为:0x20000300
  • 别名存储区的及地址:0x22000000
  • 目标位位置:2
  • 计算结果:0x22006008 = 0x22000000 + (0x30032) + (24)

对0x22006008地址的写操作和对SRAM中地址0x20000300字节的位2执行读-改-写操作有着相同的效果。
读0x22006008地址返回SRAM中地址0x20000300字节的位2的值(0x01 or 0x00)。


三、STM32的启动模式

1、启动模式

启动模式,是研究STM32复位后从哪里去执行程序的问题。
在STM32F10x里,可以通过BOOT[1:0]引脚选择三种不同启动模式,如下表:
在这里插入图片描述
    通过设置选择管脚,对应到各种启动模式的不同物理地址将被映像到第0块(启动存储区)。在系统复位后, SYSCLK的第4个上升沿, BOOT管脚的值将被锁存。 用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

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

2、ISP和IAP

  1. ISP:
        In-System Programming(在系统烧录,在系统编程)。以前要烧录代码bin文件到单片机内部的flash中是需要借助专用的烧录器的,需要将单片机从电路板上卸下来,烧录后再装上去,非常麻烦。后来我们就需要一种不用烧录器也不用把单片机从板子上卸下来的烧录方法,这种方法就是ISP。一般ISP都是PC机通过串口把bin/hex文件直接isp到单片机内部flash中。
        功能的实现原理:就是厂家在生产芯片的时候就在系统存储区写好一段代码,当单片机从系统存储区启动的时候就会运行这段代码。这段单吗的功能就是通过串口来接收PC机传过来的可执行代码,然后烧录到内部flash中,烧录完给PC机一个信号,工作就结束了。
  2. IAP:
        In-Application-Programming(在应用编程,在应用烧录,在线升级),IAP的核心是用户需要在自己的应用程序中去操作单片机内部flash的控制器的寄存器,实现对内部flash的烧录功能。然后IAP的时候用户程序通过串口(usb、ethernet)来接收PC发送过来的bin/hex文件,然后将之烧录到内部flash中去完成IAP。完成后再次启动后就会从用户存储器区执行,更新就会起效果。一般实现IAP需要人为的将用户存储器区分为2部分:bootloader+app。《IAP的介绍》-在此感谢作者。

四、电源控制

1、供电总览

在这里插入图片描述

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

2、电源管理器

  1. 上电复位(POR)和掉电复位(PDR)
        STM32内部有一个完整的上电复位(POR)和掉电复位(PDR)电路,当供电电压达到2V时系统既能正常工作。当VDD低于指定的限位电压VPOR/VPDR时,系统保持为复位状态,而无需外部复位电路。

上电复位和掉电复位波形图:
在这里插入图片描述

  1. 可编程电压监测器(PVD)
        用户可以利用PVD对VDD电压与电源控制寄存器(PWR_CR)中的PLS[2:0]位进行比较来监控电源,这几位选择监控电压的阀值。
        通过设置PVDE位来使能PVD。
        电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD是高于还是低于PVD的电压阀值。该事件在内部连接到外部中断的第16线,如果该中断在外部中断寄存器中是使能的,该事件就会产生中断。当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断。例如,这一特性可用于用于执行紧急关闭任务。

PVD门限:
在这里插入图片描述

3、低功耗模式

    在系统或电源复位以后,微控制器处于运行状态。运行状态下的HCLK为CPU提供时钟,内核执行程序代码。当CPU不需继续运行时,可以利用多个低功耗模式来节省功耗,例如等待某个外部事件时。根据最低电源消耗,最快速启动时间和可用的唤醒源的需求,选取一个最佳的折中方案来帮助用户选定一个低功耗模式。

STM32F10x有三中低功耗模式:

  1. 睡眠模式( Cortex-M3 内核停止,外设仍在运行)。
  2. 停止模式(所有的时钟都以停止,只保存SRAM)。
  3. 待机模式( 1.8V 电源关闭)。

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

  • 降低系统时钟。
  • 关闭 APB 和 AHB 总线上未被使用的外设的时钟。

低功耗模式一览:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/457458
推荐阅读
相关标签
  

闽ICP备14008679号