写在前面
STM32的IO分配遵循先分配特定外设 IO,再分配通用 IO,最后微调的原则。我们根据项目需求来对MCU 的 IO口进行分配,以连接不同的外设,从而实现整体功能。比如:GPIO、IIC、SPI、SDIO、FSMC、USB、中断等。
接下来,我们分类看下都有哪些IO。
一,特定外设
1.1 I2C
I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接微控制器、传感器、存储器等低速设备。在I2C通信中,主设备和从设备通过两条线(SDA和SCL)进行数据传输,因此IO口在I2C通信中扮演着重要的角色。
- IIC_SCL:这是I2C总线上的时钟信号线,由主设备控制。主设备使用这个信号来同步数据传输,即在传输数据时,每个数据位都在SCL信号的边沿上进行传输。
- IIC_SDA:这是I2C总线上的数据信号线,用于在主设备和从设备之间传输数据。当主设备需要向从设备传输数据时,它将数据写入SDA线,并在SCL信号的边沿上进行传输。从设备在接收数据时,也是通过SDA线接收数据。
I2C IO口需要满足以下要求:
- 双向传输:I2C通信需要双向数据传输,因此IO口需要支持输入和输出功能。
- 开漏输出:为了保证多个设备可以连接到同一条I2C总线上,IO口需要采用开漏输出模式。这种模式下,输出端口可以输出低电平信号,但不能输出高电平信号,因此需要外部上拉电阻将信号线拉高到高电平状态。
- 输入上拉:为了保证输入信号的稳定性,IO口需要采用输入上拉模式。这种模式下,输入端口通过上拉电阻连接到正电源,以保证在没有信号输入时,输入端口处于高电平状态。
- 噪声抑制:I2C通信对噪声比较敏感,因此IO口需要采取一些措施来抑制噪声,如添加滤波器、降低工作频率等。
1.2 SPI
SPI(Serial Peripheral Interface)是一种串行外设接口规范,用于嵌入式系统。它定义了主设备和从设备(或外设)之间通信的方式。SPI通信协议使用的4根线分别是:片选线(CS/SS, Slave Select/Chip Select)、时钟线(SCK, Serial Clock)、串行输出数据线(MOSI/SDO, Master Out Slave In/Serial Data Output)、以及串行输入数据线(MISO/SDI, Master In Slave Out/Serial Data Input)。
片选线用于选择需要进行通信的从设备;时钟线为SPI通信提供时钟;串行输出数据线用于主设备向从设备发送数据;串行输入数据线用于从设备向主设备发送数据。
-
基本结构:SPI通信通常涉及一个主设备(Master)和一个或多个从设备(Slave)。主设备负责初始化通信,而从设备响应主设备的请求。
-
信号线:
- MISO(Master In Slave Out):从设备到主设备的数据线。
- MOSI(Master Out Slave In):主设备到从设备的数据线。
- SCK(Serial Clock):由主设备产生的时钟信号,用于同步数据传输。
- CS/SS(CS/SS, Slave Select/Chip Select):由主设备控制,用于选择和与特定的从设备进行通信。
-
通信方式:SPI是全双工通信,这意味着数据可以在两个方向上同时传输(通过MISO和MOSI)。数据的传输与时钟信号(SCK)同步。
-
协议特点:
- 简单性:SPI协议相对简单,不需要复杂的初始化或配置。
- 高速:由于使用了较少的信号线,并且是全双工通信,SPI通常比I2C更快。
- 灵活性:SPI没有严格的通信速率或数据格式要求,这使得它非常灵活,可以适应各种应用需求。
-
应用:SPI常用于嵌入式系统中,如微控制器、传感器、存储器和其他外设之间的通信。由于其高速和灵活性,它在许多应用中都是首选的通信协议。
1.3 TIM
- TIM_CH1/2/3/4:这些指的是定时器的通道。STM32的通用定时器和高级定时器通常有4个通道(CH1至CH4),每个通道都可以独立配置和操作,用于输入捕获、输出比较、PWM生成等功能。
- ETR:External Trigger(外部触发)。此功能允许定时器由外部信号触发,从而实现与外部事件的同步。
- 1N/2N/3N:这些通常与互补输出相关。在某些PWM应用中,可能需要非重叠的PWM信号。这些“N”通道提供了与原始通道(如CH1、CH2、CH3)互补的输出,确保两个信号不会同时高电平,从而防止短路。
- BKIN:Break Input(刹车输入)。这是一个特殊的功能,允许通过外部信号来“刹车”或停止定时器的操作。这在某些电机控制应用中非常有用,例如需要快速停止PWM输出的情况。
1.4 USART/UART
USART是通用同步/异步串行接收/发送器。它是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。USART有 USART_TX/RX/CTS/RTS/CK 信号。
UART是通用异步收发器。它是一种通用的串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收。而UART仅有UART_TX/RX两个信号。
1.5 USB
USB,全称为通用串行总线(Universal Serial Bus),是一种串口总线标准,也是一种输入输出接口的技术规范。它被广泛应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。USB接口支持即插即用和热插拔功能,可以自动检测和安装外设,实现真正的即插即用。
1.6 CAN
CAN外设通常指的是具有CAN通信功能的硬件设备,如CAN控制器或CAN收发器等。这些外设通常被用于实现CAN总线通信,以在设备之间传输数据。
而CAN_RX和CAN_TX则是CAN通信中的两个重要信号线。CAN_RX用于接收来自CAN总线的数据,而CAN_TX则用于向CAN总线发送数据。这两个信号线在物理层面上连接了CAN控制器和CAN总线,实现了数据的传输和接收。
在CAN通信中,数据是以帧的形式进行传输的。当CAN控制器需要发送数据时,它会将数据打包成帧,并通过CAN_TX信号线发送到CAN总线上。其他设备在CAN_RX信号线上接收到这个帧后,会对其进行解码并处理其中的数据。