• STM32前言知识总结


    目录

    关于STM32

    STM32F1

    存储器 

    位带操作

    三种启动模式

    低功耗模式

    复位

    时钟系统

    STM32库

    仿真器和调试器


    注:本文大部分内容来自于STMCU官网以及STM32数据手册。

    STM32使用的是ARM公司的Cortex-M系列的内核,ARM将MCU的设计卖给其他公司,其他公司再添加总线和各种外设接口,就形成了STM32单片机。

    在这些下游商家中,以意法半导体公司(STMicroelectronics)最为知名,产品最为成熟。

    ST官网(打开非常慢,经常打不开):首页 - STMicroelectronics

    意法半导体不只是做STM32,还有其他各种半导体产品。

    其中,有一个单片机的专门网站(重点关注):

    意法半导体STM | STM32/STM8微控制器 | MCU单片机

    可以先将这个网站仔细浏览一遍。以下记录重要内容。

    关于STM32

    意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。覆盖超低功耗、超高性能方向,同时兼具市场竞争力。

    STM32致力于ARM® Cortex® 内核单片机和微处理器和微处理器市场和技术方面,目前提供18大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1,L4, L4+,L5,U5,WB,WL),超过1000个型号。

    STM32产品广泛应用于工业控制、消费电子、物联网、通讯设备、医疗服务、安防监控等应用领域,其优异的性能进一步推动了生活和产业智能化的发展。

    系列产品如下所示:

    其中:

    L是低功耗,F是普通的,L系列一般都只有低端产品,F则从低端到高端非常全。

    G应该是表示入门级?H表示高性能?这两个型号含义具体不详,如此理解也无妨。

    其他还有U系列等等。

    G系列和U系列都是比较新的产品(2022年8月)

    • 极端低功耗系列:STM32L0,STM32L1,STM32L4,性能依次增强。
    • 主流系列: STM32F0,STM32F1,STM32F3,性能依次增强。
    • 高性能系列: STM32F2,STM32F4,STM32F7,STM32H7,性能依次增强。

    在STM32相同内核的F系列和L系列中(比如F0和L0系列),最主要的不同是对于功耗的控制,其中L系列是针对电池供电应用做过功耗优化的,一般比同型号的F系列主频低,功耗也低很多。而F系列则主要考虑性能和价格因素,所以像智能穿戴产品这类应用一般都会用到L0或者L4系列的MCU作为主控。而一些使用外部供电的家用电器,则对于功耗要求没有那么高,就会考虑F0或者F4系列,这些性价比更好一些。

    产品命名含义

    比如我们学习时用的STM32F103C8;

    再比如我们公司用的STM32F103RCT6等等。

    STM32F1

    功能展示:

    STM32F103xx 增强型系列使用高性能的 ARM Cortex-M3 32 位的 RISC 内核,工作频率为 72MHz ,内置高速存储器( 高达 128K 字节的闪存和 20K 字节的 SRAM) ,丰富的增强 I/O 端口和联接到两条 APB 总线的外设。所有型号的器件都包含2 12 位的 ADC 3 个通用 16 位定时器和一个 PWM 定时器,还包含标准和先进的通信接口:多达2 I2C SPI 3 USART 、一个 USB 和一个 CAN
    STM32F103xx 增强型系列工作于 -40°C +105°C 的温度范围,供电电压 2.0V 3.6V ,一系列的省电模式保证低功耗应用的要求。
    这些丰富的外设配置,使得 STM32F103xx 增强型微控制器适合于多种应用场合:
    ● 电机驱动和应用控制
    ● 医疗和手持设备
    PC 外设和 GPS 平台
    ● 工业应用:可编程控制器、变频器、打印机和扫描仪
    ● 警报系统,视频对讲,和暖气通风空调系统

    嵌套的向量式中断控制器(NVIC)

    STM32F103xx 增强型内置嵌套的向量式中断控制器,能够处理多达 43 个可屏蔽中断通道 ( 不包括 16 个Cortex-M3的中断线 ) 16 个优先级。
    ● 紧耦合的 NVIC 能够达到低延迟的中断响应处理
    ● 中断向量入口地址直接进入核心
    ● 紧耦合的 NVIC 接口
    ● 允许中断的早期处理
    ● 处理 晚到的 较高优先级中断
    ● 支持中断尾部链接功能
    ● 自动保存处理器状态
    ● 中断返回时自动恢复,无需额外指令开销
    该模块以最小的中断延迟提供灵活的中断管理功能。
    时钟和启动
    系统时钟的选择是在启动时进行,复位时内部 8MHz RC 振荡器被选为默认的 CPU 时钟,随后可以选择外部的、具失效监控的4~16MHz 时钟;当外部时钟失效时,它将被隔离,同时会产生相应的中断。同样,在需要时可以采取对PLL 时钟完全的中断管理 ( 如当一个外接的振荡器失效时 )
    具有多个预分频器用于配置AHB 的频率、高速 APB(APB2) 和低速 APB(APB1) 区域。 AHB 和高速 APB的最高频率是72MHz ,低速 APB 的最高频率为 36MHz
    自举模式
    在启动时,自举管脚被用于选择三种自举模式中的一种:
    ● 从用户闪存自举
    ● 从系统存储器自举
    ● 从 SRAM 自举
    自举加载器存放于系统存储器中,可以通过 USART 对闪存重新编程。
    串行线 JTAG 调试口 (SWJ-DP)
    内嵌 ARM SWJ-DP 接口和 JTAG 接口, JTAG TMS TCK 信号分别与 SWDIO SWCLK 共用管脚,TMS 脚上的一个特殊的信号序列用于在 JTAG-DP SWJ-DP 间切换。

    内部框图

     

    存储器 

    STM32是32位CPU,数据总线是32位的。
    STM32的地址总线也是32位的。
    STM32可以访问的地址容量是:4GB(2的32次方Byte)STM32没有用到所有4GB的空间。

    ARM是内存与IO统一编址的。

    ARM采用的是小端模式。

    内存映射

    注意,上面标注的地址是每一块的起始地址。

    比如,TIM2的地址范围为0x40000000~0x400003FF。

    在左侧的内存映射图中,有些之所以只有起始地址,没有结束地址,是因为不同型号的单片机是不一样的,起始地址都是一样的,结束地址根据其实际大小来决定。你空间大一些,我其后的保留地址就相应小一些。

    F10x系列配置静态SRAM,起始地址为0x20000000,大小为20k字节。

    位带操作

    在32中,有一种操作方式,叫做位带(Bit-banding)操作。

    什么是位带操作呢?

    回顾下51单片机,我们可以对整个端口进行操作,但是也可以进行寄存器位操作。

    显然,位操作是很有必要的,且不会影响到其他的位。

    但是,在32中,无法针对特定位进行操作,而是需要进行寄存器整体操作,也就是说,如果想要操作某一位,就要操作32位寄存器,先读出32位,修改,然后再写入,也就是针对32位地址的读改写操作。

    显然,每次操作一位就要进行如此繁杂的操作,效率不高。

    为了解决这个问题,32就设定了一种位带操作的机制。即每一个位都有一个对应的32位地址与其相对应,只要操作这32位地址,就会映射到要操作的位,从而提高运行效率。

    这些32位地址就称为对应位的别名。

    别名存储器区——字(32位)

    |
    映射

    |
    位段存储区——位

    映射公式如下:

    映射的别名地址=别名区的起始地址

    + 位段区中包含目标位的字节的编号*32

    + 目标位的位位置*4

    举例如下:

    由此可知:别名存储器区大小等于位段存储器区大小的32倍。

    三种启动模式

    32支持3种启动方式。通过boot[1:0]引脚来选择启动方式。

    用户闪存存储器区:是给我们设计来放置用户写的代码的,我们程序员写的代码烧录时就被烧录到这里了,正常工作状态下就要把STM32设置为从这里启动。


    系统存储器区:在非常规情况下用,用来实现ISP功能的。


    内嵌SRAM区:这种也是非常规的,用来实现调试器调试功能的。 

    低功耗模式

    睡眠SLEEP模式:CPU停,外设运行。

    唤醒源为所有中断;


    停机STOP模式:CPU停,时钟停,外设停,只有SRAM和寄存器还能保持原来的值。

    唤醒源是外部中断;


    待机SUSPEND模式:CPU停、外设停、时钟停、SRAM和寄存器停(相当于整个都断电关机了),只有备份寄存器和待机电路还能工作。

    唤醒源:WKUP引脚的上升沿、 RTC闹钟、 NRST引脚上外部复位、 IWDG复位。

    复位

    32有三种复位,系统复位、电源复位和备份区域复位。

    系统复位:

    电源复位:

    复位电路:

    备份区域复位:

    复位后CPU都会被强制到复位向量中去执行程序。

    时钟系统

    时钟源通常有三类,即纯内部、纯外部、内外部。他们各有优缺点,一般都是这三类的综合设计,以供不同情境下的使用。

    纯内部时钟源优点是方便,直接在芯片内部集成了,但往往不够精准。

    纯外部时钟是外面直接生成时钟再引入内部,一般比较精准,但是占地方,使用起来也不够方便。

    内外部则是振荡电路在内部,而晶振在外部。

    在实际中,内外部结合的方式是较为理想的。

    PLL

    锁相环电路,可以进行倍频和分频。具体见模电数电。

    时钟树

    纯内部:HSI、LSI
    内外部:HSE、LSE
    纯外部:OSC_IN、OSC32_IN

    注:内部时钟不是很精准,为了兼顾启动速度和时钟的精准度,32是这样设计的。启动时,先用的是内部的时钟HSI,让系统启动起来之后,再通过读取用户程序,切换到更加精准的内外部时钟。

    时钟相关寄存器

    时钟相关寄存器主要是控制时钟开关、时钟分频、时钟倍频、时钟选择等部件。

    具体内容查阅数据手册。

    其中1、2、6、7、8这5个寄存器比较重要。

    STM32库

    寄存器操作(懂底层)

    stm32有很多型号,每种型号的寄存器都有所不同,我们知道,我们是通过操作寄存器来操作单片机的,所以,不同的型号,就要去学习对应型号的寄存器,这样的话,每接触一个新的型号,因为寄存器的些许差别,就会导致代码需要重新调整。

    标准库(懂原理)

    显然,这样太不灵活,代码的可移植性太差。

    于是,STM32就封装了一些库,这些库屏蔽了底层的寄存器操作(类似于C语言的标准库),我们通过调用这些库来实现功能。

    这就是stm32的标准库(全称为标准外设库)

    HAL库(会用即可,主流方向)

    但是,标准库的功能也是有限的,像网络模块、蓝牙模块、GUI等,标准库没有提供。

    于是,就在此基础上又开发了一些库,称之为HAL库(也叫cubeMX),这些库拿来即用,又能够实现一些更高级的功能。

    从哪里获取

    从ST官网。

    地址如下:

    STM32微控制器软件 - STMicroelectronics

    仿真器和调试器

    为了方便地调试程序,我们往往会使用仿真器或者调试器。

    在keil中,可以使用调试功能来调试程序,但是,也只能通过keil平台来调程序,无法实际看到开发板上的现象。像这样的调试,叫做仿真调试。

    那什么是调试器(一般统称为仿真器)呢?

    我们把程序烧录到开发板中的时候,看到的就是最终结果。那么,我怎么能让已经烧录到开发板中的程序可以一步一步地走呢?这样的调试,再结合keil中的正确配置,就可以让开发板中的程序一步一步地走,还能看到实际地现象。

    这就是调试器起到的作用。

    为了方便嵌入式调试,就定义了一种JTAG接口,是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。

    只要器件支持JTAG,就可以使用该接口来调试嵌入式程序。

    STM32就提供了JTAG接口。

    另外,还有其他的接口协议,比如SWD,SWD是一种串行调试接口,与JTAG相比,SWD只需要SWCLK和SWDIO两根线,减少了对单片机GPIO口的占用。

    现在市场上,已经有了很多实现了该接口的调试器,常见的有下面三种:

    • JLINK V8 V9
    • STLINK
    • 普中ARM仿真器

  • 相关阅读:
    【Redis】Zset 有序集合命令
    【深度学习实验】卷积神经网络(八):使用深度残差神经网络ResNet完成图片多分类任务
    关于:在企业局域网中启用 Delivery Optimization
    Grads:绘制风流畅
    Java基础-package包机制
    MFC C++ 数据结构及相互转化 CString char * char[] byte PCSTR DWORE unsigned
    计算机组成原理——指令系统(课程笔记)
    YOLOv7模型训练
    Python np.argsort() 函数的用法
    《基础知识》BOW(Bag-Of-Words)
  • 原文地址:https://blog.csdn.net/qq_28576837/article/details/126129453