结合实际代码谈常见串行通讯方式—USART、SPI以及IIC

本文深入探讨了串行通讯的三种常见方式:USART、SPI和IIC。介绍了它们的基本概念、通讯特点及在不同场景下的应用。USART是一个全双工通用串行收发模块,常用于点对点通信;IIC通讯只需两根线,适合系统内多个IC间的简单通讯;SPI则以高速全双工通信为主,适用于要求传输速率较高的场合。通过对这三种通讯方式的代码实例解析,读者能够更好地理解和应用它们。
摘要由CSDN通过智能技术生成

按数据传送的方式,通讯可分为串行通讯与并行通讯,串行通讯是指设备之间通过少量数据信号线(一般是8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,而并行通讯一般是指使用8、16、32 及64 根或更多的数据线进行传输的通讯方式。
很明显,因为一次可传输多个数据位的数据 ,在数据传输速率相同的情况下,并行通讯传输的数据量要大得多,而串行通讯则可以节省数据线的硬件成本(特别是远距离时)以及PCB 的布线面积。目前随着技术的发展,越来越多的应用场合采用高速率的串行差分传输。下面就常见四种串行通讯方式——USART、SPI以及IIC进行详细展开。

0. 通讯基本概念:

  • 全双工、半双工及单工通讯;
  • 同步、异步通讯;
  • 通讯速率;

全双工、半双工及单工通讯: 以公路来类比,全双工的通讯就是一个双向车道,两个方向上的车流互不相干;半双工则像乡间小道那样,同一时刻只能让一辆小车通过,另一方向的来车只能等待道路空出来时才能经过;而单工则像单行道,另一方向的车辆完全禁止通行。

在这里插入图片描述

同步通讯与异步通讯: 根据通讯过程中是否有使用到时钟信号进行简单的区分。在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据。
同步通讯
在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据
异步通讯
通讯速率: 通常以比特率(Bitrate)来表示,即每秒钟传输的二进制位数,单位为比特每秒(bit/s)。容易与比特率混淆的概念是“波特率”(Baudrate),它表示每秒钟传输了多少个码元,而码元是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。常见的波特率为4800、9600、115200 等,在数据传输和接收双方,需要预先统一波特率,以便正确的传输数据。

1. USART通讯

USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。USART是一个大家族,其包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不相同:


在这里插入图片描述

嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。常用的就三根引线:发送线TX、接收线RX、电平参考地线GND。串口通讯的数据包由发送设备通过自身的TXD 接口传输到接收设备的RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据,其组成见图:


串口数据包的基本组成

起始位: 串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑0 的数据位表示,在下面会在结构体中详细展开;
主体数据: 在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7 或8 位长,一般为8位
校验位: 在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及无校验(noparity):

  • 奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个8 位长的有效数据
    为:01101001,此时总共有4 个“1”,为达到奇校验效果,校验位为“1”,最
    后传输的数据将是8 位的有效数据加上1 位的校验位总共9 位;
  • 偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数
  • 0 校验是不管有效数据中的内容是什么,校验位总为“0”,1 校验是校验位总为
    “1”;
  • 在无校验的情况下,数据包中不包含校验位

停止位: 而数据包的停止信号可由0.5、1、1.5 或2 个逻辑1 的数据位表示,默认使用一个停止位,2个停止位适用于正常USART模式、单线模式和调制解调模式,0.5和1.5个停止位适用于智能卡模式。

下面从具体代码来理解USART(基于STM32单片机):

typedef struct {
   
    uint32_t USART_BaudRate;     //波特率,一般设置为2400、9600、19200、115200
    uint16_t USART_WordLength;   //数据帧字长,可选8 位(无奇偶校验)或9 位
    uint16_t USART_StopBits;     //停止位,,可选0.5 个、1 个、1.5 个和2 个停止位
    uint16_t USART_Parity;       //校验位
    uint16_t USART_Mode;         //USART模式,
    uint16_t USART_HardwareFlowControl;  //硬件流控制,可自行了解
}USART_InitTypeDef;

时钟结构体:

typedef struct {
   
    uint16_t USART_Clock;       //时钟使能,需要同步的时候进行使能
    uint16_t USART_CPOL;        //时钟极性,同步模式下SCLK 引脚上输出时钟极性设置
    uint16_t USART_CPHA;        //时钟相位,同步模式下SCLK 引脚上输出时钟相位设置
    uint16_t USART_LastBit;     //最尾时钟脉冲;
}USART_ClockInitTypeDef;

USART初始化:

void USART_Config(void)
{
   
    //定义 GPIO 和 USART 结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
   
   //使能 USART 数据传输口和时钟口的时钟; 
    DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
    DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
    
    //初始化TX的GPIO口
    GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.</
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
USARTIICSPI、CAN是常用的通信协议。USART是一种通用的串行通信协议,常用于单片机与外部设备之间的通信。IIC(Inter-Integrated Circuit)是由飞利浦公司开发的同步半双工通信协议,适用于多个集成电路之间的通信。SPI(Serial Peripheral Interface)是一种串行外设接口协议,常用于连接微控制器与外部设备,具有高速传输和多设备连接的特点。CAN(Controller Area Network)是一种用于实时应用的串行通信协议,主要用于汽车电子和工业控制领域。这些协议在不同的应用场景中具有各自的特点和优势,可以根据具体需求选择合适的协议来进行通信。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [【嵌入式】串行通信协议总结:UARTSPIIIC,CAN](https://blog.csdn.net/ZHOU_YONG915/article/details/122666235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [常见通讯协议总结(USARTIICSPI、485、CAN)](https://blog.csdn.net/lsw15834115977/article/details/127375167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [常用的嵌入式硬件通信接口协议(UARTIICSPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(一)](https://blog.csdn.net/m0_46582811/article/details/123899074)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值