在STM32中,其通信接口共有5个,分别是:用于IC间通信的SPI接口和I2C接口、用于控制局域网通信的CAN 总线接口、与PC通信的 USB接口、还有最常见的通用同步/异步串口USART。下面我们来详细介绍一下这5个通信接口在STM32中分别所起的作用。
1. 用于IC间通信的SPI接口
在STM32中,为了能够与其他 IC进行通信,其配备2个SPI接口,并提供高达18 MHz的全双工SPI通信。在这两个SPI接口上,其中有一个SPI设备接口是位于满速为72 MHz的APB2高速总线上,而另外一个SPI设备接口则是位于满速为36 MHz的APB1低速总线上。用户可以对每个 SPI 设备的时钟极性和相位进行定制,其发送数据的长度可以为8位或16 位,还可以选择从最高位还是最低位开始发送,每个 SPI都可以扮演主机或从机和其他 SPI 设备进行通信。
在STM32中,为了能够更好地发挥出 SPI(最大18MHz)的特性,每个SPI设备都可以申请两个 DMA 传输通道,在这两个传输通道中,对数据分别进行传输与发送。SPI 接口在 DMA的支持下,很容易实现纯硬件运作的高速数据双向传输。除此以外,在STM32的SPI中还包含两个硬件CRC(循环冗余校验单元)单元,一个用于对数据发送过程中的CRC校验,一个则用于数据接收过程中的CRC校验。每个CRC单元都可以进行CRC8 和CRC16校验。CRC校验功能将在STM32与MMC/SD卡进行SPI通信的时候发挥显著作用。
2. .两线串行总线接口(I2C)
在STM32中,除了使用上面所说的SPI接口外,还可以使用I2C上的总线接口与其他IC进行通信,扮演总线上的主机或从机。I2C 接口支持I2C总线上的多主机仲裁机制,支持I2C的标准100KHz,也支持高速400KHz,还支持7位或者10位地址模式。使用I2C接口,能够轻易地在I2C总线上实现数据存取功能。如果用户要实现I2C与不同器件之间的通信,则要通过软件来进行启动I2C接口。
在I2C接口设备中,其提供2个中断源,其功能分别是∶传输错误中断以及数据传输期间的阶段性中断。此外,有2个DMA通道与I2C设备的数据缓冲区相连接。当我们启用I2C接口的DMA支持时,一旦I2C总线上的地址数据传输完毕,将由硬件来接管数据进出STM32的过程。
3. 通用同步/异步串行接口(USART)
在STM32内部中,其配备了3个增强型USART接口,都支持最新的通信协议。每个USART的最大通信速率为4.5 Mbps。STM32的USART是一个可全面定制的串行通信口,其数据长度、停止位和波特率等都是可以设置的。在3个USART中,其中一个挂载于APB2总线上,另外两个则挂载在 APB1总线上。下图所示的是STM32的USART。
每个USART的波特率产生器可以产生精确到小数级别的波特率,精度远比通过简单的时钟分频器来得高。和其他通信接口设备一样,每个USART都配备了两个DMA通道,用以接管USART数据寄存器和内存之间的数据进出。STM32的USART支持数种特殊通信模式,也可以使用Tx(发生数据输出)单线来实现半双工通信。每个USART都有额外的CTS(调制解调器)和RTS(调制解调器)控制通道,可实现调制通信和硬件流控制。下图所示的USART的半双工通信连接方式。
每个USART还可以用作LIN总线(内联总线)控制器,LIN是一种汽车标准协议总线,一般用于布设低成本的控制器网络。USART还支持同步通信,是为其能更好地发挥其高通信速率,其可以与3线SPI总线连接,如下图所示。在该模式下,USART作为SPI的主机,其时钟极性和相位也都是可以进行设置的,因此其可以与任何的SPI从机进行通信。
4. CAN接口与USB接口
CAN总线接口和全速USB接口。CAN与USB接口具有共同点,都需要大量的SRAM空间支持信息过滤机制。STM32专门划分了512字节的SRAM空间共给CAN和USB设别使用。这个512的字节空间只能被这两个接口使用。对于CAN或者USB来说,该512字节的空间都 被其当作是独有的,这就说明了这两个接口不能同时使用这一个SRAM字节空间。但是在同一个应用中,CAN和USB两个设备进行交替轮换使用,分别存取共用的SRAM空间。
这里不详细阐述CAN接口与USB接口,若想查看详细介绍,可点击链接进行跳转CAN接口