超越点对点:利用USART地址唤醒功能构建多设备串口网络
在嵌入式系统设计中,串口通信一直是最基础也是最常用的通信方式之一。传统的USART(通用同步异步收发器)通常被用于点对点的数据交换,但在许多实际应用场景中,我们需要构建一个包含多个节点的通信网络。智能家居控制系统需要同时与多个传感器和执行器通信,工业自动化领域需要连接分布在车间各处的数据采集设备,而物联网网关则需要与多个终端设备进行数据交互。
面对这些需求,许多工程师的第一反应是转向更复杂的通信协议,如CAN、I2C或SPI。然而,这些方案往往需要额外的硬件支持,增加了系统复杂度和成本。实际上,大多数现代微控制器内置的USART模块已经提供了一个被低估的功能——地址唤醒机制,这个功能可以让我们在不增加任何外部硬件的情况下,构建一个高效的多设备串口网络。
1. USART地址唤醒机制的核心原理
1.1 地址识别单元的工作原理
USART的地址唤醒功能基于一个简单而巧妙的概念:每个设备在总线上都有一个唯一的地址标识符。当主机需要与特定从机通信时,它首先发送一个包含目标地址的特殊帧,所有从机都会接收这个地址帧,但只有地址匹配的从机会被"唤醒"并参与后续的数据交换。
在STM32系列微控制器中,这一功能通过USART_CR2寄存器中的**ADD[3:0]**字段实现。这个4位字段允许设备识别0-15范围内的地址值。当地址匹配发生时,USART会设置相应的状态标志并可能产生中断,从而通知处理器开始处理后续的数据帧。
// USART地址配置示例
USART1->CR2 |= (0x0A << 24); // 设置设备地址为10
USART1->CR2 |= USART_CR2_ADDEN; // 启用地址匹配检测
1.2 多设备网络的帧结构设计
在地址唤醒模式下,通信帧需要包含地址信息。典型的帧结构如下:
| 帧部分 | 起始位 | 地址/数据标识位 | 地址值 | 数据位 | 停止位 |
|---|---|---|---|---|---|
| 长度 | 1位 | 1位 | 4位 | 8位 | 1-2位 |
地址帧与数据帧的区别在于第9位(当使用9位字长时)或通过特殊的字节值来区分。在实际实现中,通常采用以下两种方式:
方法一:使用9位字长模式
- 地址帧:第9位设置为1
- 数据帧:第9位设置为0
方法二:使用特殊字节值作为地址标识
- 地址帧:以0x00开头,


459

被折叠的 条评论
为什么被折叠?



