嵌入式基础-STM32外设介绍
1. STM32外设
![[[C-资料/03-附件/2a0d05e5ac96661040526617fbbbffbd_MD5.jpg|Open: image-3.png]]
![[C-资料/03-附件/2a0d05e5ac96661040526617fbbbffbd_MD5.jpg]]](https://i-blog.csdnimg.cn/direct/03456193b75041e182abe02cc22dc369.png)
这张图列举了STM32微控制器(MCU)中非常核心的一些功能模块,它们就像是MCU的各种“器官”和“工具”,让这颗小小的芯片能完成各种复杂的任务。
作为初学者,一下子看到这么多名词确实会有点懵。别担心,我会用最通俗易懂的比喻来帮你理解它们各自是做什么的,以及它们为什么重要。
我们可以把STM32这颗芯片想象成一个功能强大的“机器人大脑”。这个大脑需要很多辅助部门来协同工作,才能控制机器人的身体(也就是你设计的电路板)动起来。下面我们来逐一认识这些“部门”。
1.1. 第一部分:核心与基础控制部门
这些是维持“大脑”正常运转最基本、最核心的部门。
-
RCC (Reset and Clock Control) - 复位和时钟控制
- 通俗比喻: 大脑的“心脏”和“生物钟”。
- 讲解:
- 时钟 (Clock): 就像人的心跳,为大脑的思考和身体的动作提供节奏。时钟越快,大脑运算速度就越快,机器人动作也越快。RCC负责产生并分发这些时钟信号给MCU内部的各个部门(外设),确保大家步调一致。
- 复位 (Reset): 就像大脑的“重启按钮”。当程序跑飞了或者需要从头开始时,按一下复位,所有部门都回到初始状态,准备重新开始工作。
-
GPIO (General-purpose I/O) - 通用IO口
- 通俗比喻: 机器人的“手”和“脚”,也是“眼睛”和“嘴巴”。
- 讲解: 这是MCU与外部世界打交道最直接的方式。
- 输出 (Output): 作为“手”或“嘴巴”,可以控制一个LED灯亮灭(就像挥手),或者给其他芯片发送高低电平信号(就像说话)。
- 输入 (Input): 作为“眼睛”或“耳朵”,可以检测一个按键是否被按下(就像触摸感知),或者读取传感器的状态信号。
- “通用”的意思是,你可以通过编程来决定这个引脚到底是用来输入还是输出。
-
NVIC (Nested Vectored Interrupt Controller) - 嵌套向量中断控制器
- 通俗比喻: 大脑的“应急响应中心”或“秘书处”。
- 讲解: 假设大脑正在专心做一件事(比如执行主程序),突然有个紧急情况发生(比如按键被按下,这就是一个“中断”)。
- 中断处理: NVIC会立刻打断大脑当前的工作,告诉它:“喂,有紧急情况!” 然后引导大脑去处理这个紧急事件(执行对应的中断服务程序)。
- 嵌套和优先级: 如果同时来了好几个紧急事件,比如按键中断和定时器中断,NVIC会根据预设的“优先级”(哪个更重要),先处理最重要的,处理完再处理次要的。这就是“嵌套”。
-
SysTick (System Tick Timer) - 系统滴答定时器
- 通俗比喻: 大脑中一个非常准的“秒表”或“节拍器”。
- 讲解: 它是一个集成在Cortex-M内核中的简单定时器。它会以固定的时间间隔(比如每1毫秒)“滴答”一下,产生一个中断。这对于需要精确时间控制的操作系统(如RTOS)至关重要,可以用来实现任务调度、延时函数等。
-
DMA (Direct Memory Access) - 直接内存访问
- 通俗比喻: 一个高效的“搬运工”。
- 讲解: 正常情况下,数据从一个地方(比如串口)搬到另一个地方(比如内存),需要CPU(大脑)亲力亲为。这很浪费大脑的精力。有了DMA这个“搬运工”,大脑就可以下达一个指令:“把串口收到的100个字节数据搬到内存的某个地址去。”然后大脑就可以去干别的事了,DMA会自己完成搬运工作,搬完后再通知大脑。这极大地解放了CPU,提高了效率。
1.2. 第二部分:定时与测量部门
这些部门主要负责与时间和模拟信号相关的工作。
-
TIM (Timer) - 定时器
- 通俗比喻: 多功能“闹钟”和“节拍器”。
- 讲解: TIM比SysTick功能强大得多。它可以:
- 定时: 设置一个时间,时间到了就通知CPU(产生中断),就像定闹钟。
- PWM输出: 输出一种方波信号(脉宽调制),通过调节方波的“占空比”(高电平时间占总周期的比例),可以用来控制LED的亮度、电机的转速等。想象一下快速开关灯,开关速度和亮灭比例不同,人眼看到的就是不同的亮度。
- 输入捕获: 测量外部输入信号的频率和脉冲宽度,就像用秒表测量别人跑步的速度。
-
ADC (Analog-to-Digital Converter) - 模数转换器
- 通俗比喻: “翻译官”,把模拟语言翻译成数字语言。
- 讲解: 现实世界中的很多信号都是连续变化的“模拟信号”,比如温度、光照强度、声音大小。但MCU这个数字大脑只能理解0和1组成的“数字信号”。ADC的作用就是把这些连续变化的电压信号(模拟量)转换成MCU能读懂的数值(数字量)。
-
DAC (Digital-to-Analog Converter) - 数模转换器
- 通俗比喻: 另一个“翻译官”,把数字语言翻译成模拟语言。
- 讲解: 这是ADC的逆过程。MCU计算出一个数字值,DAC可以把它转换成一个对应的、连续变化的电压信号。比如,可以用它来产生一个精确的参考电压,或者输出一个模拟波形来播放声音。
-
RTC (Real-Time Clock) - 实时时钟
- 通俗比喻: 一个带独立电池的“电子表”。
- 讲解: 即使MCU主电源断电了,只要给RTC接上一个小电池(就像手表电池),它就能一直走时,记录当前的年、月、日、时、分、秒。当你需要做个万年历、闹钟或者需要记录事件发生时间的产品时,RTC就非常有用了。
1.3. 第三部分:通信接口部门
这些部门负责MCU与其它芯片或设备进行“交流”。
-
USART (Universal Synchronous/Asynchronous Receiver/Transmitter) - 通用同步/异步收发器
- 通俗比喻: “电话线”或“电报机”。
- 讲解: 这是最常用的一种串行通信接口,我们常说的“串口”就是指它。可以用来和电脑、GPS模块、蓝牙模块等进行数据交换。它只需要两根线(一根发,一根收)就能工作。
-
I2C (Inter-Integrated Circuit) - I2C通信
- 通俗比喻: “局域网电话会议”。
- 讲解: I2C也是一种串行通信方式,它的特点是用两根线(一根数据线,一根时钟线)就可以连接很多个设备。就像开电话会议,一个“主机”(主持人)可以和多个“从机”(参会者)中的任何一个通话,而且每个设备都有自己唯一的地址。常用于连接一些传感器、存储芯片(EEPROM)等。
-
SPI (Serial Peripheral Interface) - SPI通信
- 通俗比喻: “高速专线电话”。
- 讲解: SPI是另一种高速的串行通信方式,通常需要四根线。它像一条专线,通信速度非常快,通常比I2C快很多。适用于需要高速数据传输的场合,比如连接SD卡、OLED显示屏、Flash存储器等。
-
CAN (Controller Area Network) - CAN通信
- 通俗比喻: “车载对讲机系统”。
- 讲解: CAN是一种非常可靠的通信总线,广泛应用于汽车电子领域。车里的各个控制单元(ECU),比如发动机、ABS、仪表盘等,就是通过CAN总线来交换信息的。它的抗干扰能力特别强,非常稳定。
-
USB (Universal Serial Bus) - USB通信
- 通俗比喻: 就是我们电脑上用的“USB接口”。
- 讲解: 让你的设备可以像U盘、鼠标、键盘一样连接到电脑上,进行数据传输或模拟成各种USB设备。
1.4. 第四部分:系统安全与管理部门
这些部门确保系统稳定可靠运行。
-
WWDG / IWDG (Window/Independent Watchdog) - 窗口/独立看门狗
- 通俗比喻: 一个“监督员”,防止大脑“死机”。
- 讲解: “看门狗”是一个定时器。程序正常运行时,需要定期去“喂狗”(重置看门狗定时器),告诉它“我还活着”。如果程序因为某种错误卡死了(死机),就没法去“喂狗”。看门狗定时器超时后,就会认为系统出问题了,然后强制重启MCU,让系统恢复正常。
- IWDG (独立看门狗): 比较简单,只要在规定时间内喂狗就行。
- WWDG (窗口看门狗): 要求更严格,必须在一个特定的“时间窗口”内喂狗,不能太早也不能太晚,提供了更高的安全性。
-
PWR (Power Control) - 电源控制
- 通俗比喻: “睡眠与唤醒管理器”。
- 讲解: 负责管理MCU的功耗。当机器人不需要工作时,可以让它进入“睡眠”或“待机”模式,关闭一些不必要的部门,大大降低耗电量。当有事件发生时(比如按键按下),再把它“唤醒”。这对于电池供电的设备尤其重要。
-
BKP (Backup Registers) - 备份寄存器
- 通俗比喻: “断电不丢失的小记事本”。
- 讲解: 这些寄存器位于一个特殊的电源区域(备份域),和RTC一样,可以由备用电池供电。即使主电源断了,里面存储的数据也不会丢失。可以用来保存一些重要的配置参数或状态信息。
1.5. 第五部分:其他高级功能部门
这些是STM32提供的一些更高级、更专用的功能。
- AFIO (Alternate Function I/O) - 复用IO口: GPIO引脚除了基本的输入输出功能外,还可以“变身”为其他外设的专用引脚,比如变成串口的发送/接收引脚。AFIO就是管理这种“变身”配置的部门。
- EXTI (External Interrupt) - 外部中断: 专门处理来自GPIO引脚上的电平变化的“紧急事件”。比如,你可以配置一个引脚,当它从低电平跳到高电平时,就触发一个中断。
- CRC (Cyclic Redundancy Check) - CRC校验: 一个“数据校验员”,用来检查数据在传输或存储过程中是否出错了。
- SDIO (SD card interface) - SD卡接口: 专门用来和SD卡进行高速通信的接口。
- FSMC (Flexible Static Memory Controller) - 可变静态存储控制器: 可以让MCU直接像访问内部存储器一样,去访问外部的SRAM、NOR Flash、LCD等设备,扩展存储和显示能力。
总结一下:
学习STM32,其实就是学习如何配置和使用这些功能各异的“部门”(外设),让它们协同工作,最终实现你想要的功能。刚开始,你只需要重点掌握最基础的几个:RCC、GPIO、USART、TIM。随着学习的深入,再逐步去了解和使用其他外设。
更多推荐



所有评论(0)