单片机总结【GPIO/TIM/IIC/SPI/UART】
一、GPIO
1、概念
通用输入输出口;开发者可以根据自己的需求将其配置为输入或输出模式,以实现与外部设备进行数据交互、控制外部设备等功能。简单来说,GPIO 就像是计算机或微控制器与外部世界沟通的 “桥梁”。
2、工作模式
工作模式 | 性质 | 特征 |
上拉输入 | 数字输入 | 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平 |
下拉输入 | 数字输入 | 可读取引脚电平,内部链接下拉电阻,悬空时默认低电平 |
模拟输入 | 模拟输入 | GPIO无效,引脚直接接入内部ADC |
浮空输入 | 数字输入 | 可读取引脚电平,若引脚悬空,则电平不稳定 |
推挽输出 | 数字输出 | 可输出引脚电平,高电平为VDD,低电平接VSS |
开漏输出 | 数字输出 | 可输出引脚电平,高电平为高阻态,低电平接VSS |
复用推挽输出 | 数字输出 | 由片上外设控制,高电平为VDD,低电平接VSS |
复用开漏输出 | 数字输出 | 由片上外设控制,高电平为高阻态,低电平接VSS |
3、外设寄存器
外设寄存器 | 功能 | 模式选择 |
GPIOx_MODER(GPIO端口模式寄存器) | 用于配置 GPIO 引脚的工作模式,每个 GPIO 引脚对应 2 位,通过设置这 2 位的值,可以将引脚配置为不同的模式。 | 00:输入模式;01:通用输出模式;10:复用功能模式;11:模拟模式。 |
GPIOx_OTYPER(GPIO端口输出类寄存器) | 当 GPIO 引脚配置为输出模式(通用输出或复用功能输出)时,该寄存器用于选择输出类型,即推挽输出或开漏输出。每个 GPIO 引脚对应 1 位。 | 0:推挽输出;1:开漏输出。 |
GPIOx_OSPEEDR(GPIO端口输出速度寄存器) | 用于配置 GPIO 引脚的输出速度,每个 GPIO 引脚对应 2 位。输出速度影响引脚的信号上升和下降时间,不同的速度适用于不同的应用场景。 | 00:低速;01:中速;10:高速;11:超高速。 |
GPIOx_PUPDR(GPIO端口上拉/下拉) | 用于配置 GPIO 引脚的上拉或下拉电阻,每个 GPIO 引脚对应 2 位。上拉或下拉电阻可以确保引脚在没有外部信号输入时保持稳定的电平状态。 | 00:无上下拉;01:上拉;10:下拉;11:保留。 |
GPIOx_IDR(GPIO端口输入数据寄存器) | 用于读取 GPIO 引脚的输入电平状态。该寄存器是只读的,每个引脚对应 1 位,读取相应的位可以获取该引脚当前的电平(高电平或低电平)。 | 无 |
GPIOx_ODR(GPIO端口输出数据寄存器) | 用于设置 GPIO 引脚的输出电平状态。当 GPIO 引脚配置为输出模式时,向该寄存器的相应位写入 0 或 1 可以将引脚设置为低电平或高电平。 | 无 |
GPIOx_BSRR(GPIO端口置位/复位寄存器) | 用于原子性地设置或清除 GPIO 引脚的输出电平。该寄存器分为两部分,低 16 位用于置位(将引脚设置为高电平),高 16 位用于复位(将引脚设置为低电平)。 | 无 |
GPIOx_BRR(GPIO端口复位寄存器) | 专门用于将 GPIO 引脚的输出电平复位(设置为低电平)。该寄存器的每一位对应一个 GPIO 引脚,向相应的位写入 1 可以将对应的引脚设置为低电平。 | 无 |
二、TIM
1、概念
定时器是一种能够对时间进行奇数的硬件设备。它可以按照预设的规则对时钟信号进行计数,当计数值达到设定的阈值时,会触发相应的事件,如产生中断、输出特定的信号等。通过对定时器的配置和使用,开发者可以实现精确的时间控制,满足各种不同的应用需求。
2、工作原理
定时器的核心是一个计数器,它会在时钟信号的驱动下进行计数操作。时钟信号可以来自于内部时钟源(如系统时钟),也可以来自外部时钟源。计数器从初始值开始,每接收到一个时钟脉冲,计数值就会加1(或减1,具体取决于定时器的工作模式)。当计数值达到预设的自动重载函数值时,计数器会产生溢出事件,根据定时器的配置,可能会触发中断、更新输出信号等。
计数模式:①递增计数模式;②递减计数模式;③中心对齐模式。
内部工作框图:
3、PWM脉冲宽度调剂
1、概念:
PWM是一种对模拟信号电平进行数字编码的方法。通过定时器产生一系列脉冲信号,这些脉冲信号的频率通常保持不变,但是脉冲的宽度(即高电平持续的时间)可以根据需要进行调整。通过改变脉冲的宽度,可以等效地控制输出信号的平均电平,从而实现对一些设备的模拟控制。
2、工作原理:
定时器是产生PWM信号的核心部件。定时器内部有一个计数器,它会在时钟信号的驱动下不断计数。同时,还有一个比较寄存器,用于存储一个比较值。当计数器的值小于比较值时,定时器输出高电平;当计数器的值大于比较值时,定时器输出低电平。计数器计数到自动重装载值后会重新归零,开始下一个计数周期。通过改变比较寄存器的值,就可以更改脉冲的宽度。
3、关键参数:
周期:
pwm信号完成一个完整的脉冲循环所需的时间,它决定了pwm信号的频率。周期的倒数就是频率。在定时器中,周期通常由自动重装载值和时钟频率共同决定。
占空比:
指的是脉冲信号中高电平持续时间与整个周期的比值,通常用百分比表示。通过改变占空比,可以控制pwm信号的平均电平。
4、外设寄存器
外设寄存器 | 功能 | 具体功能位及其作用 | |||
TIMx_CR1(定时器控制寄存器1) | 该寄存器用于对定时器的基本工作模式和运行状态进行配置和控制。 | 计数器使能位:当该位置为 1 时,定时器计数器开始计数;置为 0 时,计数器停止计数。 | 计数器方向位:用于设置计数器的计数方向,0 表示向上计数(从 0 开始递增到自动重装载值),1 表示向下计数(从自动重装载值开始递减到 0)。 | 自动重装载预装载使能位:若该位置 1,自动重装载寄存器(TIMx_ARR )的值会在更新事件发生时才被传送到影子寄存器;置 0 时,TIMx_ARR 的值会立即生效 | 单位脉冲模式位:置 1 时,定时器在发生一次更新事件后停止计数,常用于只需要单次定时操作的场景。 |
TIMx_CCMR1(定时器捕获/比较模式寄存器) | 主要用于配置定时器的捕获 / 比较通道 1 和通道 2 的工作模式,包括输入捕获模式和输出比较模式。 | 模式选择位:用于选择通道 1 或通道 2 的输出比较模式,例如 PWM 模式 1、PWM 模式 2 等。不同的模式决定了计数器值与比较值的比较方式以及输出引脚的电平变化规则。 | 输入捕获预分频器位:在输入捕获模式下,用于设置输入信号的预分频系数,以减少捕获不必要的信号边沿,提高捕获精度。 | 输出比较预装载使能位:置 1 时,比较寄存器的值会在更新事件发生时才被传送到影子寄存器;置 0 时,比较寄存器的值会立即生效。 | |
TIMx_CCER(定时器捕获/比较使能寄存器) | 该寄存器用于控制定时器捕获 / 比较通道的使能和极性。 | 捕获/比较使能位:用于使能相应的捕获 / 比较通道。例如,CC1E 置 1 时,通道 1 的捕获或比较功能被使能;置 0 时,功能被禁用。 | 捕获/比较极性位:用于设置捕获 / 比较通道的输入或输出极性。例如,在输入捕获模式下,该位决定是捕获上升沿还是下降沿;在输出比较模式下,决定输出信号的初始电平。 | ||
TIMx_PSC(定时器预分频器寄存器) | 用于设置定时器时钟的预分频系数,从而调整定时器计数器的计数频率。 | 定时器的时钟源通常具有较高的频率,通过设置预分频器,可以将时钟频率降低到合适的范围,以满足不同的定时需求。例如,若预分频系数设置为 10,则计数器每接收到 10 个时钟脉冲才会加 1。 | |||
TIMx_ARR(定时器自动重装载寄存器) | 存储定时器计数器的自动重装载值。当计数器的值达到该寄存器存储的值时,会产生更新事件,计数器可能会重新归零(取决于计数方向和配置)。 | 自动重装载值与预分频系数共同决定了定时器的定时周期。通过改变自动重装载值,可以调整定时器的定时时间。 | |||
TIMx_CCR1(定时器捕获/比较寄存器1) | 在输入捕获模式下,该寄存器用于存储捕获到的计数器值;在输出比较模式下,用于存储与计数器值进行比较的值。 | 输入捕获模式:当定时器检测到指定的输入信号边沿(上升沿或下降沿)时,会将当前计数器的值捕获到 TIMx_CCR1 中,通过分析这些捕获值,可以测量输入信号的周期、脉宽等参数。 | 输出比较模式:计数器的值会不断与 TIMx_CCR1 中的值进行比较,当两者相等时,会根据配置产生相应的输出动作,如改变输出引脚的电平状态,常用于产生 PWM 信号等。 |
5、看门狗定时器
1、概念(工作原理):
它会在系统正常运行时按照一定的时间间隔进行计数。在系统运行过程中,程序需要定期对看门狗定时器进行 “喂狗” 操作,即重置定时器的计数值。如果由于某种原因(如程序跑飞、硬件故障等)导致系统未能及时 “喂狗”,看门狗定时器就会溢出,进而触发一个复位信号,使系统重新启动,以恢复到正常的工作状态。
2、设置看门狗的步骤:
①确定看门狗的时钟频率
②对时钟频率进行分频
③给看门狗一个看门阈值
④主程序中正常喂狗
三、IIC
1、概述
iic是一种同步串行通信协议,有Philips(现为NXP)开发,广泛用于低速、短距离的多设备通信。iic允许多个设备(包括多个主设备和从设备)共享2根线路:数据线(SDA)和时钟线(SCL)。
2、工作原理
由主设备控制时钟线(SCL),通过数据线(SDA)与多个从设备通信。每个设备由唯一的地址,主设备通过设备地址选择要通信的设备。
3、应用场景
传感器、EEPROM、RTC(实时时钟)、显示屏等。
4、iic的信号
起始信号(SCL为高电平期间,SDA由高电平向低电平变化)。
终止信号(SCL为高电平期间,SDA由低电平向高电平变化)。
应答信号(接收方接收到数据后,还可以进行下一次8bit数据的接收)。
非应答信号(接收方接收到数据后,不可以进行下一次8bit数据的接收)
数据接收和发送信号。
5、主机和从机通信过程分析
①主机给从机发送数据
②主机从从机读取数据
四、SPI
1、概述
spi是一种同步串行通信协议,用于主从设备之间的高速数据传输。spi是全双工通信,意味着数据可以同时在两个方向上传输。它使用四根信号线:时钟线(SCK)、主设备输入从设备输出线(MISO)、主设备输出从设备输入线(MOSI)和片选线(SS)来进行通信。
2、工作原理
主设备提供时钟信号(SCK),通过数据线(MISO和MOSI)与从设备进行双向数据传输。每个从设备需要一个单独的片选信号(SS)来进行通信。
3、应用场景
存储设备(如Flash、SD卡)、显示屏、传感器、音频解码器等。
4、硬件连接方式
①基本的连接方式(四线)
当一个SPI主机和多个从机进行通信时,会通过片选线 选择和哪一个从机进行通信。
② 三线连接
当单主机单从机进行SPI通信时不需要片选线选择和哪一个从机进行通信,所以在进行连接时只需SCK\MOSI\MISO三根线就可以完成通信。
5、时序分析
spi主从机通信需要通过两个时钟特性进行约定:
1、时钟极性(CPOL):空闲状态下时钟线电平的高低
时钟极性为1:空闲状态下时钟线保持高电平;
时钟极性为0:空闲状态下时钟线保持低电平。
2、时钟相位(CPHA):通信进行数据采样(数据读取)在时钟前沿还是时钟后沿
时钟相位1:在时钟后沿进行数据采样,在时钟前沿进行数据输出;
时钟相位1:在时钟前沿进行数据采样,在时钟后沿进行数据输出。
五、UART
1、概述
uart一种异步串行通信协议,用于在两个设备之间传输数据。它将数据按位发送,不需要时钟信号进行同步。在uart通信中,数据通过两根线路传输:发送线(TX)和接收线(RX)。它主要用于简单的点对点通信。
2、工作原理
数据被拆分成多个数据位,并通过串行方式(一个接一个地)发送,接收方根据预定的波特率解析数据。
3、应用场景
常见于调试接口、串口通信、GPS模块、蓝牙、WIFI模块等。
4、数据帧格式
异步通信,双方各自使用自己的时钟信号进行数据传输,由于双方的始终不一样,就算提前约定好了波特率,随着传输数据量的增加,双方数据收发就会累计一定的误差,所以为了避免这个误差,我们需要对传输收发的数据进行约定,规范好收发的格式来消除误差。
空闲位:当不进行数据收发时,数据线处于高电平状态
起始位:1bit低电平,一帧数据传输的开始
数据位:5-8bit数据位,传输的数据
校验位:1bit,可有可无
奇校验:一帧数据传输后保证数据位和校验位1的个数是一个奇数;
偶校验:一帧数据传输后保证数据位和校验位1的个数是一个偶数。
停止位:1-2bit高电平,一帧数据结束的标志
六、三种总线对比
1、总线
总线:连接多个部件的信息传输线,是各部件共享的传输介质
2、总线类型
片内总线:连接处理器内核和外设的总线,在芯片内部。
片外总线:连接芯片和其他芯片或者模块的总线。
3、模块之间进行总线通信的方式
①串行通信和并行同行
串行通信:
指的是同一时刻只能收或发一个bit位信息,因此只用一根信号线即可。
优点:占用的引脚资源少。
缺点:速度相对较慢。
并行通信:
指的是同一时刻可以收或发多个bit位信息,因此需要多跟信号线才行。
优点:速度快。
缺点:占用引脚资源多。
②单工、半双工、全双工通信
单工:
要么收,要么发,只能做接收设备或发送设备。
半双工:
可以收,可以发,但不能同时收发,通信双方只有同一个信道。
全双工:
可以在同一时刻接收和发送。
③同步通信与异步通信
1、同步通信:
同步通信是一种在数据传输过程中,发送方和接收方使用同一个时钟源或通过特定的同步机制来保证双方时钟严格同步的通信方式。在这种方式下,发送方和接收方的时钟信号频率和相位保持一致,从而使数据能够在准确的时间被发送和接收。
优点:
传输效率高,数据传输速率快。
缺点:
硬件成本高,对时钟精度要求高。
2、异步通信:
异步通信是一种发送方和接收方不需要使用同一个时钟源,而是通过在数据中添加起始位、停止位等控制信息来实现数据传输同步的通信方式。
优点:
硬件简单,灵活性高。
缺点:
传输效率低,数据传输效率慢。
4、总结对比