gpt4 book ai didi

linux - 有时串口读取给出转换后的值[垃圾值]

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:21 24 4
gpt4 key购买 nike

串口配置如下

// open serial port
/* O_RDWR means that the port is opened for both reading and writing
* O_NOCTTY means that no terminal will control the process opening the serial port
*/
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); // /dev/ttyS1
if (fd <0)
perror(MODEMDEVICE);

tcgetattr(fd,&SerialPortSettings); /* save current serial port settings */

/* Set Baud Rate */
cfsetospeed (&SerialPortSettings, (speed_t)B230400);
cfsetispeed (&SerialPortSettings, (speed_t)B230400);

SerialPortSettings.c_iflag &= ~IGNBRK; // disable break processing
SerialPortSettings.c_lflag = 0; // no signaling chars, no echo, no canonical processing
SerialPortSettings.c_oflag = 0; // no remapping, no delays

/* Setting other Port Stuff */
SerialPortSettings.c_cflag &= ~PARENB; /* No Parity */
SerialPortSettings.c_cflag &= ~CSTOPB; /* Stop bits = 1 */
SerialPortSettings.c_cflag &= ~CSIZE; /* Clears the Mask */
SerialPortSettings.c_cflag |= CS8; /* Set the data bits = 8 */

SerialPortSettings.c_cflag &= ~CRTSCTS; /* Turn off hardware based flow control */
SerialPortSettings.c_cc[VMIN] = 0; // read doesn't block // specifies the minimum number of characters that should be read before the read() call returns
SerialPortSettings.c_cc[VTIME] = 10; // 1 seconds read timeout
SerialPortSettings.c_cflag |= CREAD | CLOCAL; /* Turn on the receiver of the serial port */
SerialPortSettings.c_iflag &= ~(IXON | IXOFF | IXANY); /* Turn off software based flow control */


tcsetattr ( fd, TCSANOW, &SerialPortSettings ); //TCSANOW tells to make the changes now without waiting

下面给出了预期的输出,在 3-4 次中出现 5 个

14-Jun-16 15:41:32.300 [RX] - :010400000036C5<CR><LF>
14-Jun-16 15:41:32.316 [TX] - :01046C00009FDA740049FF000085066AEB1E0F00003AFE00007B1F00040000000B000400000000000000003F8000002B4DDEB375E0EEA0000000044E1DD31400001F1E4D42312E302E300022D0837A33303030525300C6BB4187C05445542F414900AF6EFDFBFF937EA47A5F3D65BFA5<CR><LF>
14-Jun-16 15:41:32.341 [RX] - :01046C00009FDA740049FF000085066AEB1E0F00003AFE00007B1F00040000000B000400000000000000003F8000002B4DDEB375E0EEA0000000044E1DD31400001F1E4D42312E302E300022D0837A33303030525300C6BB4187C05445542F414900AF6EFDFBFF937EA47A5F3D65BFA5<CR><LF>

下面是我每 5 次得到 1 次的输出

14-Jun-16 15:41:32.596 [RX] - :010400000036C5<CR><LF>
14-Jun-16 15:41:32.602 [TX] - :01046C00009FDA740049FF000085066AEB1E0F00003AFE00007B1F00040000000B000400000000000000003F8000002B4DDEB375E0EEA0000000044E1DD31400001F1E4D42312E302E300022D0837A33303030525300C6BB4187C05445542F414900AF6EFDFBFF937EA47A5F3D65BFA5<CR><LF>
14-Jun-16 15:41:32.608 [RX] - 2E<NAK>ꢂ‚¢Ê2e<ENQ>‚‚‚ª‚²²<LF>
U%**<ENQ>2<ENQ>‚‚‚š<LF>
eU<LF>
‚‚‚º<DC2><NAK>2<ENQ>‚‚¢‚‚‚‚‚‚‚<DC2><ENQ>‚‚¢‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚š2…‚‚‚‚‚'<DC2>E"EUJjÓSS<DC4>¦TT(&LL˜˜00044E1DD31400001F1E4D42312E302E300022D0837A33303030525300C6BB4187C05445542F414900AF6EFDFBFF937EA47A5F3D65BFA5<CR><LF>

谁能帮帮我,我很困惑。我是否遗漏了任何配置设置或?

最佳答案

这看起来可能是以下任何问题:

串行缺相

驱动程序(或 HW 收发器)误解了串行传输的起始位,因此误解了数据。

成帧错误

驱动程序(或 HW 收发器)误解了传输的单个位。这会导致串行相位丢失。使用示波器测量上升时间和信号衰减,以了解这是否是您的问题。

杂散噪声

传输线上有短暂的噪音。这种噪声可能只在串行数据损坏之前或期间略有发生。如果您有记录示波器,则可以记录更长的波形并分析更长的传输。如果您没有记录示波器,调试它的一种 hacky 方法是修改用户空间或驱动程序代码,以便在看到错误数据后立即将 gpio 设置为高电平,然后您可以将此 gpio 连接到示波器触发器发生错误时卡住帧。然后,您可以使用手动解码技术来了解示波器上可见的波形是否正确构图。

驱动错误

有许多软件问题可能会导致驱动程序自行执行并破坏数据。

布线问题

你没写这是什么串口传输,但是接地很重要,一定要注意避免接地环路。

祝你好运!

关于linux - 有时串口读取给出转换后的值[垃圾值],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37809430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com