【发布时间】:2020-09-08 09:15:34
【问题描述】:
设备说明(有关上下文,如果您对电子设备不满意,请跳过它):
对于一个简单的设备,通信是在半双工 UART 中完成的(TX 和 RX 在同一条线上),方式如下:
- 一个引脚(写入模式)指示 UART 是发送还是接收(1:TX,0:RX)
- 一个引脚写入线路 (TX)。
- 从电线 (RX) 读取一个引脚。
write-mode 处于 TX(写入)时,RX 引脚处于高阻状态,TX 处于发送状态。当write-mode 处于RX(读取)时,TXpin 处于高阻状态,RXreceiving。
这只是为了说明,我不希望这里有电子问题/答案。
WiringPI 示例:
为此,我有以下示例:
#include <wiringPi.h>
#include <wiringSerial.h>
int main()
{
wiringPiSetup ();
auto fd = serialOpen ("/dev/ttyAMA0", 115200);
pinMode(0, OUTPUT);
for(size_t i=0; i<10; ++i)
{
digitalWrite(0, HIGH);
serialPutchar(fd, '\x55');
digitalWrite(0, LOW);
delay(1000);
}
serialClose(fd);
}
使用示波器,我可以清楚地看到write-mode引脚在UART端发送数据之前被复位。
显然,我尝试添加一些“延迟”或空循环进行调整,但这对于 μs 时间不可靠(由于操作系统上的计时器通常精度)。
问题:
如何同步,所以write-mode引脚在UART字节发送后复位? (不超过大约 150μs 后)。
【问题讨论】:
-
我看不出这个被标记为 c++ 的原因?对我来说看起来像普通的 c 代码。
-
其实它不是标准的 C 语言(auto 不是用隐式 int 的 C 语义,而是作为 C++11 关键字)。重要的是这两种语言都会匹配问题。跨度>
-
在嵌入式系统中使用 C++11
auto是非常危险的。在几乎任何情况下使用它都是有问题的。 -
到底什么是“写入模式”?使用 RTS/CTS 硬件握手,这些东西已经标准化了 60 多年……那么信号地呢?如果没有信号接地,将电池驱动的 Rasp 连接到固定 PC 将无法工作。
-
@AdrianMaire 哎呀,别担心。无论如何,我一直在忽略 auto` 关键字。但这会使 c 标签 IMO 无效。不应滥用语言标签来吸引更多受众。
标签: c++ c raspberry-pi uart wiringpi