【发布时间】:2023-03-26 20:19:01
【问题描述】:
据我目前了解的串口,数据传输是通过引脚 3 完成的。如下所示:
有两件事让我对此感到不舒服。第一个是这似乎暗示两个连接的设备在信号速度上达成一致,第二个是即使它们被配置为以相同的速度运行,您也会遇到可能的同步问题......对吗?这样的事情我想是可以处理的,但似乎必须有一个更简单的方法。
对我来说,更好的方法是让其中一个串行端口引脚发送一个脉冲,指示下一位已准备好存储。因此,如果我们将这些引脚连接到移位寄存器,我们基本上有:(一些脉冲引脚)->clk, tx->d
这是一种常见的做法吗?有什么理由不这样做吗?
编辑
迈克不应该删除他的答案。这种I2C (2 pin serial) 方法似乎与我所做的非常接近。串行端口没有时钟你是对的 nobugz 但这基本上就是我所做的。见这里:
private void SendBytes(byte[] data)
{
int baudRate = 0;
int byteToSend = 0;
int bitToSend = 0;
byte bitmask = 0;
byte[] trigger = new byte[1];
trigger[0] = 0;
SerialPort p;
try
{
p = new SerialPort(cmbPorts.Text);
}
catch
{
return;
}
if (!int.TryParse(txtBaudRate.Text, out baudRate)) return;
if (baudRate < 100) return;
p.BaudRate = baudRate;
for (int index = 0; index < data.Length * 8; index++)
{
byteToSend = (int)(index / 8);
bitToSend = index - (byteToSend * 8);
bitmask = (byte)System.Math.Pow(2, bitToSend);
p.Open();
p.Parity = Parity.Space;
p.RtsEnable = (byte)(data[byteToSend] & bitmask) > 0;
s = p.BaseStream;
s.WriteByte(trigger[0]);
p.Close();
}
}
在有人告诉我这有多丑陋或我如何破坏传输速度之前,我的快速回答是我不在乎。我的观点是,这似乎比您在答案 nobugz 中描述的方法简单得多。如果 .Net SerialPort 类让我能够更好地控制引脚信号,它就不会那么难看。还有其他的串口 API 可以吗?
【问题讨论】:
-
不这样做的一个原因是不兼容,它不再是 RS232 ... 最好查看最近的串行 x-fer 接口(例如 USB),这些问题似乎已得到解决。
-
你为什么要标记这个升c?
-
你想要c#相关的东西吗?
-
取消标记为 C#。我认为这是一个错误的标签。
-
对不起,我还没有发布代码,同时我忘了删除标签。
标签: c# hardware serial-port circuit