十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

USART串口通讯

USART串口通讯 首先讲解一下通信基础知识可以把通信方式拆成三个互相独立的问题来看一次传几位→ 串行 / 并行能不能双向、能不能同时→ 单工 / 半双工 / 全双工接收方怎么知道每一位什么时候采→ 同步 / 异步这三者不是互斥的而是可以组合。比如 UART 就是串行 全双工 异步。SPI 是串行 全双工 同步。I2C 是串行 半双工 同步。一、串行与并行一次传几位1. 串行传输定义数据一位一位地在同一条数据线上按时间顺序发送。比喻单车道排队过车一辆接一辆。例子时间 → 1 0 1 1 0 0 1 0线 → ──── 一位一位发 ────优点线少成本低适合远距离抗干扰相对容易高速时更容易做差分、时钟恢复现代高速接口大多是串行如 USB、PCIe、SATA、以太网缺点同样时钟频率下一次只传 1 位表面速率低需要并串转换、串并转换2. 并行传输定义多位数据同时通过多条数据线发送。比喻多车道并排行驶。例子D0 → 1D1 → 0D2 → 1D3 → 1... 同时传 8 位优点短距离内同样时钟频率下吞吐量高控制简单早期计算机总线常用缺点线多引脚多成本高线间容易串扰各条线延迟不同会产生位偏斜 skew距离一长多位很难同时到达高速时同步困难所以现代趋势是短距离、片内、旧总线可能并行长距离、高速、外部连接大多串行。一句话串行不一定慢并行不一定快。高速串行现在反而是主流。二、单工、半双工、全双工往哪传这个维度看的是通信双方能不能互相发能不能同时发。1. 单工定义只能一个方向传输。A 只能发给 BB 不能发给 A。比喻单行道。例子广播电台电视遥控器某些单向传感器特点最简单不需要反向信道但无法确认、无法重传、无法交互2. 半双工定义双方都能发但不能同时发同一时刻只能一方发、另一方收。比喻对讲机。你说完“Over”对方才能说。例子对讲机RS-485 两线总线I2C某些无线模块特点省线需要切换收发方向有转向时间效率低于全双工容易发生总线冲突需要仲裁或主从控制3. 全双工定义双方可以同时发送和接收。比喻打电话。双方可以同时说话虽然通常会礼貌轮流。例子电话UARTTX 和 RX 独立SPIMOSI 和 MISO 独立以太网交换机全双工模式特点效率高不需要频繁切换方向通常需要独立的发送和接收通道或频率/编码上分离注意全双工是逻辑能力不一定等于“必须两根线”。比如电话两线也能全双工因为它通过混合电路和频率分离实现。UART 则通常用 TX、RX 两根数据线加 GND。三、同步与异步怎么对齐每一位这个维度看的是接收方怎么知道每一位的边界和采样时刻。1. 异步通信定义没有共享时钟线。发送方和接收方各自用本地时钟靠起始位、停止位和约定波特率来对齐每一个字符。典型代表UART。一帧常见格式空闲高 | 起始位低 | D0 D1 D2 D3 D4 D5 D6 D7 | 校验 | 停止位高 | 空闲高工作方式线路空闲是高电平发送方拉低一个起始位接收方检测到下降沿开始按波特率采样每个字符重新同步一次双方波特率必须接近否则会错位优点线少简单不需要时钟线适合低速、短报文、调试串口缺点每帧有起始位、停止位开销高速时效率下降波特率误差不能太大不适合超高速连续数据流一句话异步不是没有时钟而是没有共享时钟线靠起始位和本地时钟重新同步。2. 同步通信定义发送方和接收方使用同一个时钟节拍。通常有一根时钟线或者接收方从数据中恢复时钟。典型代表SPISCK 时钟线I2CSCL 时钟线USART 同步模式CK 时钟线以太网、PCIe从数据流中恢复时钟优点没有起始位、停止位开销数据可以连续传速率高效率高缺点需要时钟线或者复杂的时钟恢复电路距离远时时钟和数据可能偏斜主从、时序要求更严格一句话同步通信靠统一节拍传异步通信靠起始位重新对齐。四、三者组合常见接口长什么样接口串行/并行方向同步/异步常见线UART串行全双工异步TX、RX、GNDUSART 异步串行全双工异步TX、RX、GNDUSART 同步串行全双工/半双工同步TX、RX、CKSPI串行通常全双工同步SCK、MOSI、MISO、SSI2C串行半双工同步SCL、SDARS-485串行半双工异步A、B旧并口并行半双工/全双工通常同步/选通D0~D7 控制线所以以后看到一个新接口可以问自己三个问题它是串行还是并行它是单工、半双工还是全双工它是同步还是异步比如UART串行、全双工、异步。SPI串行、全双工、同步。I2C串行、半双工、同步。RS-485串行、半双工、异步。USB串行、半双工/全双工按版本和模式异步/同步混合内部复杂。五、一句话总结串行 vs 并行一次传 1 位还是一次传多位。单工 vs 半双工 vs 全双工只能单向还是双向但不能同时还是可以同时双向。同步 vs 异步有没有共享时钟节拍异步靠起始位和波特率重新对齐同步靠时钟线或时钟恢复。最实用的记忆UART 串行 异步 全双工SPI 串行 同步 全双工I2C 串行 同步 半双工RS-485 串行 异步 半双工这是USART框图我们按照“数据怎么流 → 谁在控制 → 时钟怎么来 → 状态怎么查 → 高级功能怎么用”的顺序循序渐进地把这张图拆解清楚。第一步看全局——数据是怎么收发和缓存的图的顶部先看最上面的一排这是数据CPU/DMA 与 USART 之间的交互的通道。1. 发送路径左侧PWDATAPeripheral Write DataCPU 或 DMA 把要发送的数据写进来。发送数据寄存器 (TDR)数据先存到这里。注意它是个缓冲区。发送移位寄存器TDR 里的数据会自动“倒”进这里然后一位一位地从TX引脚发出去。精髓TDR 和移位寄存器是双缓冲的。这意味着当移位寄存器正在发第一个字节时CPU/DMA 已经可以把第二个字节写入 TDR。这样就能实现连续不间断发送极大提高效率。2. 接收路径右侧RX引脚收到数据一位一位进入接收移位寄存器。收满一个字节后整个字节被“倒”进接收数据寄存器 (RDR)。CPU 或 DMA 通过PRDATAPeripheral Read Data把数据读走。精髓同样是双缓冲。当 CPU 还没读走 RDR 里的旧数据时移位寄存器还能继续接收新数据给 CPU 留出反应时间但如果 RDR 没读走新数据又来了就会发生溢出错误 ORE。第二步看控制——谁在指挥这些数据图中部数据不会自己流动需要“指挥官”。图中间那一大块控制逻辑和寄存器就是指挥官。1. 控制寄存器CR1, CR2, CR3这三个寄存器决定了 USART 怎么工作CR1最核心UEUSART 总开关。M字长8位或9位。PCE,PS,PEIE校验位使能、奇偶选择、校验中断使能。TE,RE发送使能 (Transmit Enable)和接收使能 (Receive Enable)。TXEIE,TCIE,RXNEIE,IDLEIE各种中断使能后面讲。CR2STOP停止位长度1位、1.5位、2位。CLKEN,CPOL,CPHA,LBCL同步模式下的时钟控制极性、相位。LINELIN 总线模式。CR3DMAT,DMARDMA 发送/接收使能。HDSEL半双工模式选择。IREN,IRLPIrDA 红外通信使能。SCEN,NACK智能卡模式。2. 发送器控制 / 接收器控制 / 唤醒单元这三个模块是直接执行 CR 寄存器命令的“执行器”它们控制移位寄存器的启停、采样时机以及多机通信时的唤醒逻辑。第三步看心跳——波特率是怎么产生的图底部这是 USART 极其关键的部分。fPCLK(x1, x2)来自 APB 总线通常是 PCLK1 或 PCLK2的时钟源。USART_BRR波特率寄存器里面写着DIV_Mantissa整数部分和DIV_Fraction小数部分。USARTDIV计算公式在左下角USARTDIV DIV_Mantissa (DIV_Fraction / 16)。波特率发生器用fPCLK除以USARTDIV再经过/16的过采样产生发送器时钟和接收器时钟。注意TE和RE信号不仅控制引脚还控制着波特率发生器。如果你不使能发送或接收对应的时钟就不会输出外设就不工作。第四步看神经系统——状态与中断图左下方数据收发过程中CPU 怎么知道“可以发下一个了”或者“收到新数据了”靠的是状态寄存器 (SR)和中断控制。看左下角的USART 中断控制和SR寄存器TXE (Transmit Data Register Empty)TDR 空了可以写下一个数据了。如果TXEIE开启就会触发中断。这是最常用的发送中断。TC (Transmission Complete)整个数据发完了包括停止位都发完了。用于 RS-485 切换收发方向或者进入低功耗模式前。RXNE (Read Data Register Not Empty)RDR 里有新数据了快来读如果RXNEIE开启就会触发中断。这是最常用的接收中断。IDLE (Idle Line Detected)总线空闲了。非常经典的应用接收不定长数据。一帧数据发完总线空闲触发 IDLE 中断CPU 就知道一帧结束了。错误标志OREOverrun Error数据没来得及读被覆盖了。NENoise Error噪声检测。FEFraming Error帧错误比如停止位没收到。PEParity Error校验错误。第五步看拓展能力——框图中的“周边模块”除了最基础的异步串口这张图还展示了 STM32 赋予 USART 的“超能力”硬件数据流控 (nRTS, nCTS)图左侧。当接收缓冲区快满时拉高 nRTS 告诉对方别发了发送前检查 nCTS对方没准备好就暂停。防止数据丢失。同步模式 (SCLK)图右上角。CLKEN使能后USART 可以输出时钟变成类似 SPI 的同步通信支持主从模式。IrDA SIR 编码/解码模块图左上角。用于红外通信通过IRDA_OUT和IRDA_IN收发。智能卡 (Smartcard)图左上角。支持 ISO 7816 协议用于读卡器。多机通信 (USART 地址)图中间。支持 LIN 总线或地址位唤醒模式多个从机挂在一根总线上通过地址匹配唤醒特定从机。第六步融会贯通——发送一个字节的完整流程假设你要用查询方式Polling发送一个字节A0x41配置为 115200 8N1配置阶段写CR1的UE1、TE1、M08位写CR2的STOP001位停止位写BRR设置波特率。等待CPU 不断读取SR寄存器检查TXE位是否为 1。写入TXE1时CPU 把0x41写入TDR即 PWDATA。硬件动作硬件自动把0x41从 TDR 搬到发送移位寄存器并在 TX 引脚上拉低起始位 → 发 8 位数据LSB先发→ 发停止位高电平。完成发送移位寄存器空了硬件自动把TXE置 1等待下一个字节如果所有数据发完TC位会被置 1。如果是用中断或 DMA就把第 2 步的等待换成配置TXEIE1或DMAT1硬件会在合适的时候自动通知 CPU 或直接搬运数据CPU 就可以去干别的事了。总结这张图的核心思想这张图展示了一个经典的数字外设设计模式“数据通道TDR/RDR/移位寄存器 控制通道CR1/CR2/CR3 时钟通道BRR/波特率发生器 状态反馈SR/中断 扩展功能流控、同步、IrDA”
返回列表