嵌入式通信协议-----UART协议详解(基于智芯Z20k11X)

目录

一、简介

1.概念

2.结构

3.特点

4.优缺点

二、协议帧组成 

1.起始位

2.数据位

3.奇偶校验位

4.停止位

三、UART通信过程

四、USART与UART区别

五、代码实现

1.硬件框图

2.软件实现


一、简介

1.概念

        USART(Universal Synchronous Asynchronous Receiver Transmitter,通用同步异步收发器)是一串行通信设备,可以灵活地与外部设备进行进行全双工信息交换。

         UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种双向、串行、异步的通信总线,仅用一根数据接收线和一根数据发送线就能实现全双工通信。

        两者相似,UART是在 USART 的基础上裁剪了同步通信功能,只保留异步通信功能,我们平时使用的串口通信都是 UART。

2.结构

        任何 UART 双向通信至少需要 3 个引脚,数据发送引脚 TXD,数据接收引脚 RXD,数据参考地 GND。这里特别需要注意的是连接方法,设备 A 和设备 B 信号需要交叉连接。如果电平不同,需要电平转换芯片。

ARM芯片和PC机的电平不同需接入电平转换芯片如RS232 

这里解释下电平标准,根据使用使用的电平标准不同,可以分为 TTL 和 RS232 标准, 如图所示:

因为控制器一般都是 TTL 标准,因此如果需要进行 RS232 通信时,一定要使用 R232 转换器进行 TTL 和 RS232 的电平转换。

3.特点

①  空闲时,RXD 和 TXD 默认高电平

②数据起始位为低电平,低位在前,高位在后,串口数据一般为8位

③串口可选择是否开启数据校验,校验位:单个字节数据校验,对数据中高低电平数据个数进行计数,常见的有奇偶校验。

4.优缺点

优点:

  • 简单性:实现简单,硬件需求少。
  • 无时钟信号:无需设备之间的时钟同步。
  • 广泛支持:被微控制器和外围设备广泛支持。

缺点:

  • 距离限制:适用于短距离通信,长距离会受到噪声和信号衰减的影响。
  • 速度限制:与SPI或I2C等同步通信协议相比,数据传输速率较低。
  • 单设备通信:主要设计为点对点通信,若要多设备通信需要额外的电路。

二、协议帧组成 

在 UART中,传输模式为数据包形式。数据包由起始位、数据帧、奇偶校验位和停止位组成。

1.起始位

         用于指示数据传输的开始。接收器通过检测到逻辑低电平来识别传输的开始。不传输数据时保持高电平(1),开始传输数据后变为低电平(0)。

2.数据位

        实际传输的数据。数据位的长度可以在通信双方协商时设置,通常为5到9位(常见的是8位)。不使用奇偶校验位为9位。

3.奇偶校验位

        用于错误检测。常见的校验方式包括偶校验(Even Parity)和奇校验(Odd Parity)。偶校验时,数据帧中的1的个数为偶数;奇校验时,1的个数为奇数。如果奇校验时 ,而数据帧1的总和为偶数,或者偶校验时 ,而总和为奇数,则UART 认为数据帧中的位已改变。如果不用校验位,可以省略这一部分。

4.停止位

        指示数据传输的结束,并用于接收器同步和复位。停止位提供了一段时间让接收器准备好接收下一帧数据。发送 UART 将数据传输线从低电压驱动到高电压并保持1 到 2 位时间。

示例:

假设发送8位数据,没有校验位,1位停止位,数据为0x55(即二进制01010101),其UART帧结构如下:

| 起始位 |  数据位     |  停止位 |
|   0        | 01010101 |    1       |   

三、UART通信过程

发送器

  • 发送器开始发送起始位。
  • 紧接着发送数据位(从LSB到MSB)。
  • 如果启用了校验,发送校验位。
  • 最后发送停止位。

接收器

  • 接收器通过检测起始位(逻辑低)开始数据接收。
  • 按照预设的波特率,依次接收数据位。
  • 检查校验位(如果有)进行错误检测。
  • 检测到停止位(逻辑高)后,完成一帧数据的接收。

四、USART与UART区别

UARTUSART
配置和使用只需配置波特率、数据位、校验位和停止位,适用于简单的点对点通信除了和UART一样的配置外,还需要配置同步模式的时钟设置,适用于需要高精度、高速度的通信场合。
数据传输例如,9600波特率下,每秒可以传输9600个比特在同步模式下,可以通过更高的时钟频率实现更高的数据传输率

例子:

UART数据传输

  • 发送端:数据0x55(二进制01010101),波特率9600,无校验位,1个停止位。
  • 接收端:检测到起始位后,按配置的波特率读取数据位,校验(如果有),然后等待停止位。

USART数据传输(同步模式):

  • 发送端和接收端共享时钟信号。
  • 发送端:数据0x55(二进制01010101),时钟频率为1MHz。
  • 接收端:同步时钟信号,按时钟频率读取数据位,实现更高的传输速率。

五、代码实现

本次实验的效果是重定义printf函数输出Hello world!

1.硬件框图

2.软件实现

①初始化结构体

UART_Config_t tUartCfgStruct = 
 {
 9600,             /* 波特率选择*/
 UART_DATABITS_8, /* 数据位大小 */
 UART_PARITY_NONE, /* 奇偶校验位选择*/
 UART_STOPBITS_1, /* 停止位 */
 DISABLE,         /* 数据流控制 */
 40000000         /* 函数时钟频率选择 */
};
 /* 初始化结构体配置 */
UART_Init(UART1_ID, &tUartCfgStruct);

 ②串口接收函数

 unsigned char ch;
 /* 等待清除DR寄存器 */
 while (RESET == UART_GetLineStatus(UART1_ID,UART_LINESTA_DR));
/* 接收数据 */
 ch = UART_ReceiveByte(UART1_ID);

③串口发送函数

/* 等待状态寄存器TEMT复位 */
 while(RESET == UART_GetLineStatus(UART1_ID,
UART_LINESTA_TEMT));
 /* 发送数据ch */
 UART_SendByte(UART1_ID, ch);
 }
}

 ④重定义printf

unsigned char  ch[100];

int fputc(int ch, FILE *f)
{     
    (void) f; 
    /* Wait untill FIFO is empty */
	while(RESET == UART_GetLineStatus(UART1_ID, UART_LINESTA_TEMT))
    {
    }
    /* Send data */
    UART_SendByte(UART1_ID, (uint8_t)ch);     
	return ch;
}

代码简单的介绍了串口发送和接收的函数以及重定向printf进行打印,代码很简单所以没有放入完整代码,有学习使用智芯开发板的小伙伴们可以留言一起进行交流。 

  • 58
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 嵌入式ARM协议中的LIN总线是一种低成本、低速率的串行通信协议,主要用于汽车电子系统中的设备通信。LIN总线主要用于连接车辆的各个电子控制单元(ECU),如仪表盘、门控制模块、座椅调节模块等,以实现数据的传输和控制。 LIN总线协议基于主从结构,其中一个ECU充当主节点,负责发送指令和协调通信,而其他ECU则作为从节点,负责接收指令并执行相应的操作。主节点通过发送特定的帧让从节点执行特定的任务,从而实现控制和通信。 LIN总线的通信速率相对较低,通常在20kbps到20Mbps之间。这是为了满足低成本和低功耗的需求而设计的。此外,LIN总线还采用了不同的物理层电压标准,如12V和5V。这样可以适应不同的应用场景和硬件要求。 在嵌入式ARM系统中,LIN总线可以通过软件和硬件实现。通过使用ARM处理器的UART通信接口,可以将指令转化为LIN总线的帧格式,实现数据的发送和接收。同时,还可以使用专用的LIN总线驱动芯片来简化通信的实现。这些芯片通常具有LIN总线协议的硬件支持,可以提供更高的性能和稳定性。 总的来说,嵌入式ARM协议中的LIN总线是一种用于汽车电子系统的通信协议,通过低成本、低速率的串行通信实现ECU之间的数据传输和控制。它提供了灵活和可靠的通信方式,使得车辆系统的各个模块能够协同工作,实现更高的性能和功能。 ### 回答2: 嵌入式ARM协议中的LIN(Local Interconnect Network)总线是一种低成本、低速率的串行通信协议,常用于汽车和工业领域中。 LIN总线主要用于连接车辆不同的电子控制单元(ECU),包括车身电子系统、信息娱乐系统等。它的设计目标是为了提供可靠的数据传输,并保持较低的硬件和软件成本。 在LIN总线中,通讯由一个主节点(Master)和若干从节点(Slave)组成。主节点负责控制总线的访问和数据传输的时序,从节点则是被动响应主节点的指令。主节点通过发送帧(Frame)来控制从节点的操作,并接收从节点上报的数据。 LIN总线的通信速率相对较低,通常在20kbps至20Mbps之间,这是为了满足成本和可靠性的要求。它使用单线通信,通过追加校验位和帧头来确保数据的完整性和正确性。 作为一种低成本的通信协议,LIN总线在汽车和工业控制应用中发挥着重要作用。它常用于门锁系统、车窗控制、座椅调节、仪表盘等模块的通信。LIN总线的主要优点包括低成本、低功耗、简单的网络拓扑和更低的研发成本。 总而言之,嵌入式ARM协议中的LIN总线是一种低成本、低速率的串行通信协议,用于连接车辆不同的电子控制单元。它通过主节点和从节点的通信方式来实现数据传输和控制,具备低成本、低功耗等优点,广泛应用于汽车和工业控制领域。 ### 回答3: 嵌入式ARM协议——LIN总线,全称是局域网互连网络(Local Interconnect Network),是一种用于汽车电子控制系统的串行通信总线协议。 LIN总线是针对在车内各种电子设备之间进行通信而设计的低成本、低速率数据传输网络。它可以连接车内电子控制单元(ECU)之间的传感器、执行器和其他外设,例如仪表板、门锁、窗户控制器和座椅调节器等。 LIN总线采用了单一主节点和多个从节点的拓扑结构。主节点负责发送消息,而从节点是被动接收消息并执行相应的操作。主从节点之间的通信通过单线半双工方式进行,使得LIN总线在成本和可靠性方面都得到了优化。 LIN总线的通信速率相对较低,一般在20kbps至20Mbps之间。由于车内电子设备通常只要求低速率的数据传输,因此LIN总线可以满足大部分应用的需求。 LIN总线的协议栈包含物理层、数据链路层和应用层。物理层负责定义信号和电气特性,例如电压和线缆类型。数据链路层负责提供错误检测和纠正机制,以确保数据的可靠传输。应用层定义了消息的格式和内容,包括标识符、数据字节和校验位等。 相比于其他汽车网络协议,如CAN总线,LIN总线具有更低的成本和更简单的实现。它适用于一些较简单的车内电子设备,不需要高速数据传输的场景。 总而言之,嵌入式ARM协议——LIN总线是一种适用于车内电子控制系统的低成本、低速率的串行通信协议,通过单一主节点和多个从节点的拓扑结构实现通信。它的简单实现和性价比使得它在一些简单车内电子设备中得到广泛应用。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值