uart通信

  1. uart通信
    串口通信是一种应用十分广泛的通讯接口,两个设备之间的通信连接方式如下: 在这里插入图片描述 串口通信参数: 波特率:串口通信的速率
    起始位:标志一个数据帧的开始,固定为低电平
    数据位:数据帧的有效载荷,低位先行;数据位有8位和9位两种格式
    校验位:用于数据验证,可配置 奇/偶/无 校验位
    停止位:固定为高电平;可配置位 0.5/1/1.5位停止位
    串口时序图:
    在这里插入图片描述

  2. 下面以stm32为例描述串口通信过程:
    stm32 UART支持硬件流控制、DMA等功能。
    stm32硬件流控制:当发送方发送过快,导致接收方接收不过来(接收方会丢弃新数据或发生数据覆盖),如果有硬件流控制(在硬件电路上会多出一条线),此时接收方没有准备好就置高电平,准备好了置低电平,发送方根据接收方反馈的信号从而决定是否发送数据。
    在这里插入图片描述如上图所示为stm32 USART通信框图。
    整个收发数据过程中最主要的是发送数据寄存器、接收数据寄存器、发送移位寄存器、接收移位寄存器、控制寄存器CR和状态寄存器SR相互配合工作,其中TDR和RDR是一个寄存器DR。

    采用中断模式,在进行发送数据操作时,当SR中TXE被硬件置为1产生一个UART中断表示发送数据寄存器TDR为空,此时通过CPU或DMA方式将数据写入TDR中,随后发送移位寄存器会将数据一位一位(低位先行)通过TX口发送出去,当一帧数据发送完成后SR中TC位为1表示发送完成。
    在进行数据接收时,接收移位寄存器通过RX口一位一位(向右移位)接收数据,并当接收移位寄存器中的数据被转移动RDR中时,SR中RXNE位被硬件置1产生一个UART中断表示RDR非空,此时通过CPU或DMA数据读走。

  3. 带数据缓存的UART收发
    1.数据对列收发
    这种方式较为常用,需配合UART中断使用。
    当发送数据时并不直接将数据写入TDR中,而是写进一个ringbuffer中。然后当SR中TXE被硬件置1产生一个UART中断时读取ringbuffer并将读到的字节写入TDR,然后在下一次中断时送入下一个字节,如此往复,直到ringbuffer为空。
    在接收数据时,当SR中RXNE位被硬件置1产生一个UART中断,将接收到的数据写入ringbuffer,读数据时可直接从ringbuffer中读取数据。
    在具体实施时,可分别创建一个发送和接收的task,用于处理上述数据逻辑。这种设计的优点是可以有效地处理实时数据,避免了数据的丢失。但是,如果Queue的大小设置不当,可能会导致数据的溢出。因此,我们需要根据实际的应用场景来合理地设置Queue的大小。

    2.带硬件FIFO的UART收发
    很多先进的单片机的UART收发用上了硬件FIFO。没有硬件FIFO的单片机在收发数据时每收发一个字节就要执行一次中断函数,在高波特率通信时单片机会频繁进入中断,从而影响单片机主任务的处理。而硬件FIFO则可以缓解这种矛盾。例如单片机的UART FIFO是16字节,单片机在发送数据时一次最多可以传输16字节数据,等16字节数据发送完毕后才产生UART TX发送完毕中断。接收数据时通常是“半满”中断和“超时”中断,即接收FIFO中的字节数超过8字节,或者接收FIFO不为空但是超过1字节的时间内没有收到新的字节数据,产生一次UART RX接收中断。通常带硬件FIFO的UART会和数据队列的方式相结合使用,在高波特率通信下传输效率更高。

    3.带DMA的UART收发
    当UART接收到数据时,数据可直接写入到DMA控制的内存区域中,然后触发中断。在中断服务程序中,我们可以从DMA控制的内存区域中取出数据,进行数据处理。
    使用DMA对连续多条数据的传输帮助特别大。连续发送多条数据流时,可以把数据流放在多个不同的缓冲区,然后DMA直接指向缓冲区地址,待DMA传输完毕后产生一个中断,然后在中断处理中把DMA指向下一个缓冲区地址。接收数据时也可以预约一个接收缓冲区,DMA传输的数据传输到该缓冲区,传输满了后产生中断再指向下一个接收缓冲区,同时可以让主程序处理已收满数据的缓冲区的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值