我正在尝试使用 UART5 和自定义 PCB 中此模块的缓冲区(检查原理图、信号电平转换)在我的 STM32L4 微控制器上实现 SDI-12 协议,以便使我的 UART 到 SDI-12 的单线转换器。但是,我无法与任何 SDI-12 兼容传感器进行通信,并且我认为输出数据存在问题。我找到了一个关于 SDI-12 协议的datasheet,其中显示了发送此命令“0!”时示波器输出的图片(picture_1)。我无法对其进行解码以查看数据表中的 picture_1 中的二进制序列是什么,并且当我尝试从我的实现中发送相同的命令(picture_2)时,结果不一样,除了“break”和“标记”事件。需要这个协议的UART规范是这样的:
1) BaudRate = 1200, 2) 1 stop bit, 3) Even parity, 4) 1 start bit
所以我的问题是:
Picture_2(这是我的实现的示波器输出,发送此命令“0!”)
这是数据表中的 Picture_1,它与我发送相同的命令。
我找到了解决方案。 SDI-12协议确实有UART的上述配置。 波特率 = 1200,奇偶校验 = 偶数,停止位 = 1,起始位 = 1。但是,如果您查看 SDI12 数据表,您会注意到该协议使用负逻辑。因此,需要将数据倒序排列,但为了实现数据不倒序,必须改变UART协议默认的空闲线,使起始位由0变为1,然后将数据从0变为1。 “像数据一样反转”,由于 UART TX 空闲线的变化而不是通过实际的数据反转,因此以相反的顺序传输!