Tag: 串口

从读取设备数据流中丢失流量控制数据(0x13)

我编写了一个Linux应用程序,通过模拟串行端口的USB端口读取和写入二进制数据到远程设备。 当我从设备读取数据时,我有一个USB嗅探器,显示这样的二进制数据流(0x01,0x0A …… 0x13),但是当我的程序读取字节时,0x13不在字节流中 – 这是XOFF char,但我没有使用XON / XOFF流控制(我认为)。 尝试打开读取和写入,以及在二进制模式下fopen fread和fwrite,同样的结果。 有任何想法吗?

从c中的串口读取会破坏线路

我正在尝试用C编写一个小程序,它将使用select命令从串口读取,以便它阻塞并等待输入。 它正在工作,除了它不断分裂线,我不知道为什么。 该设备的编程不会破坏线路,并且可以与实际的终端程序一起使用。 我之前从未在C中进行过串口通信,而且我在Mac上,所以这对我来说都是新手。 我真的不知道在哪里可以找到出错的地方。 我有一些代码可以找到并列出串口。 为了简单起见,我会把它留下来,所以如果有一个没有意义的变量,那可能就是原因。 以下是打开端口,设置属性并尝试从中读取的代码,以及来自Apple网站的复制注释(对不起): /* this is based on a combination of http://stackoverflow.com/questions/6947413/how-to-open-read-and-write-from-serial-port-in-c * and https://developer.apple.com/library/mac/documentation/DeviceDrivers/Conceptual/WorkingWSerial/WWSerial_SerialDevs/SerialDevices.html */ static int OpenSerialPort(const char *deviceFilePath, int speed) { int fileDescriptor = -1; struct termios options; memset(&options, 0, sizeof(options)); // init it // Open the serial port read/write, with no controlling terminal, // and don’t […]

CreateFile()和CreateFileA()有什么区别?

我按照这里的教程与串口通信 打开然后关闭串口的主要代码如下: HANDLE hComm; hComm = CreateFileA((LPCSTR)”COM8″, //port name GENERIC_READ | GENERIC_WRITE, //Read/Write 0, // No Sharing NULL, // No Security OPEN_EXISTING,// Open existing port only 0, // Non Overlapped I/O // FILE_FLAG_NO_BUFFERING, // copied from the MFC version NULL); // Null for Comm Devices if (hComm == INVALID_HANDLE_VALUE){ DWORD err = GetLastError(); printf(“Error in […]

将Windows串行程序移植到Linux

我没有得到任何答案我的上一个问题( 在Debian Gnu / Linux中的Usb-serial编写和读取数据问题 )所以我现在正在尝试不同的方法。 我将我的仪表插入Windows,运行专有程序并检查COM端口设置设置是否在这里 。 然后我根据这篇文章写了一些代码。 这就是我所拥有的 #include #include #include #include #include #include #define DEVICE “/dev/ttyUSB0” #define WRITE_SPEED B1200 #define READ_SPEED B1200 #define PARITY ~PARENB #define STOPBITS ~CSTOPB #define DATASIZE CS8 #define HARDWARE_FLOW_CONTROL ~CRTSCTS #define RECEIVER CREAD #define MODEM_CONTROL_LINES CLOCAL #define START_STOP_INPUT_CONTROL IXON #define START_STOP_OUTPUT_CONTROL IXOFF #define ANY_CHARACTER_RESTORE_STOPPED_OUTPUT ~IXANY #define CANONICAL_MODE ~ICANON […]

从C读取串行数据(OSX / dev / tty)

我正在尝试使用C从蓝牙条码扫描器(KDC300)读取数据。这是我到目前为止的代码,程序成功建立了与扫描仪的蓝牙连接,但是当扫描条形码时,没有输入显示屏幕(最终将完成更多的数据,但我们必须先让它工作,对吧)。 这是程序: #include #include #include #include #include #include #include #include int main (int argc, const char * argv[]) { // define vars int STOP = 0; //char buf[255]; if(argv[1]) { int fd = open(“/dev/tty.KDC1”, O_RDONLY); if(fd == -1) { printf(“%s”, strcat(“Unable to open /dev/tty.”, argv[1])); } int res; while(STOP == 0) { while((res = read(fd,buf,255)) […]

在串行通信中获取错误数据

我正在制作一个简单的C程序,以便从串行设备串行获取数据。 数据采用hex格式。 在编写代码之前,我在cutecom中检查了它,我收到了25 54 00 1e ,这是正确和准确的值。 但是当我编写代码然后我收到这个错误数据的BFE50A14 。 我不知道我在哪里弄错了,请帮忙。 谢谢。! 码: #include #include #include #include #include #include #include #include #define portname “/dev/ttyUSB0” int set_interface_attribs (int fd, int speed, int parity) { struct termios tty; memset (&tty, 0, sizeof tty); if (tcgetattr (fd, &tty) != 0) { // error_message (“error %d from tcgetattr”, errno); printf(“error […]

RaspberryPi RS-232麻烦

我在Pi上使用RS-232线与激光测距仪进行通信。 我已经使用minicom以19200的波特率测试了两者之间的通信(因为这是LRF的波特率并且无法更改),并且它工作正常。 虽然写下LRF任何命令(由单个字符组成并按’enter’)可能需要多次尝试才能生效,但双向通信效果很好。 但是,当我开始使用C代码编程以使用RS-232进行读写时,它的一半工作。 这是我正在使用的代码: #include #include #include #include //SETUP UART0 int main(){ int uart0_filestream = -1; int loop; int i; int isError=1, rx_length; unsigned char rx_buffer[256]; useconds_t micro=3000; uart0_filestream = open(“/dev/ttyAMA0”, O_RDWR | O_NOCTTY | O_NDELAY); if(uart0_filestream == -1) printf(“ERROR: Unable to open UART\n\n”); else printf(“UART open\n\n”); struct termios options; tcgetattr(uart0_filestream, &options); options.c_cflag = […]

当硬币插入时,ccTalk硬币接收器没有反应

我编写了应该处理硬币插入的Linux应用程序(让我们说现在我需要在应用程序中识别插入了什么硬币)。 我使用SCA1 Coin Acceptor(ICT)。 我需要使用波兰硬币(货币 – 波兰兹罗提)。 我能够让PC和Coin Acceptor之间的通信工作,但我有一些问题。 我的设置的简要说明: PC通过cc232协议通过RS232(+ USB转换器)连接到Coin Acceptor。 开关座1:全部关闭,但对于第10个开关,设置为ON(根据文档) 开关座2:全部关闭 我设置禁止状态以允许所有(来自手动文档) 我设置主禁止状态以启用设备(来自手动文档) 我能够从Coin Acceptor获取有关序列号,软件修订等的数据。简单的民意调查也可以。 唯一的问题是关于插入硬币的实际信息。 我发送“读缓冲信用或错误代码”(Header 229)命令 – 根据文档 – 每500ms左右,每次我得到结果0(字节等于0x00),结果都正确返回,它只是看起来就像我没有插入任何硬币一样。 我试图使用抛光硬币以及10美分硬币。 所有硬币都被“拒绝”,被拒绝我的意思是Coin Acceptor似乎不会处理这些硬币(只是返回它们),另一方面,当我发送命令以获得被拒绝的硬币数量时,我再次获得0。 所以现在问你,你知道任何其他设置,以使其工作(最好用波兰硬币)? 此外,默认情况下(假设硬币接收器未连接到PC,但是已通电)硬币接受器应如何对插入的硬币做出反应? 只是返回它们(就像在我的情况下)或“处理”它们然后返回它们或将它们放入“银行”? 我想我发布代码没有意义。 我创建了两个不同的应用程序,问题是一样的。 一个在python中,我采用了https://github.com/Baldanos/ccTools的冒险,第二个应用程序是用C编写的,类似于: https : //github.com/BitCoding/cctalk 。 设备坏了是值得怀疑的,因为我试图使用其他设备没有区别。 此外,这些设备是全新的。 任何建议都会有所帮助。 先感谢您。

可以写入,但无法从linux C程序中读取串口ttyS0

我正在尝试学习如何使用C对Linux中的ttyS0串口进行编程。我的另一台机器连接到我的串口,每隔两秒钟发送5f和6f的交替hex值。 我已经与其他端口监控应用程序validation了这些值是否出现在端口上。 在我的代码中,我使用阻塞read()到10个字符长度的缓冲区中。 即使我的其他机器仍在发送数据, read()也会永久阻止。 如果我包括行fcntl(fd,F_SETFL,FNDELAY); 将read()设置为非阻塞read()始终返回值为-1,这意味着UART缓冲区中没有数据,而我的for循环代码只打印出缓冲区中的随机值。 所以简而言之,我的假设是我的代码不是读取ttyS0而我不知道为什么。 下面是我的代码,希望有人会看到导致我的问题的原因并让我直截了当。 顺便说一下,我使用的是Scientific Linux,我相信ttyS0是com端口1,就像在RedHat和Fedora中一样。 以下是我运行代码时的输出。 它似乎是写入COM端口没有问题,但对于读取它说它不可用。 另外很明显,我打印出来的缓冲区只是随机值,而不是已读入的数据。谢谢 控制台输出 hello world hi again write error: : Success wrote 4 bytes number of bytes read is -1 read error:: Resource temporarily unavailable 4 8 120 -99 -73 -65 41 -120 4 8 should of put something out 码 #include #include […]

快速串口从处理写入Arduino

我需要一些帮助来加速写入串口。 我发现了一些类似的问题,但没有涉及处理语言或Java,所以我希望有人可以帮我解决这个问题。 编辑 正如John在下面指出的那样,看起来串行的速度还不够快,无法以我想要的速度发送这么多数据。 有谁知道其他可用的arduino接口? 结束编辑 我正在使用arduino来控制我连接的400个RGB LED的网格。 为了向arduino发送命令,我在Processing中编写了一个小程序来操作代表LED的大型数组。 然后我尝试通过串行发送800字节的数据,每隔20分钟以115200波特率向arduino发送更新网格。 每20ms调用的处理代码是: noStroke(); int dataPos = 0; // position in LED data array byte[] dataLedGrid = new byte[400*2]; // array for bytes to send for(int j=0; j<LEDS_TALL; j++) { for(int i=0; i<LEDS_WIDE; i++) { int pos = j*20+i; int r = ledGrid[LEDS_WIDE-i-1][LEDS_TALL-j-1][0], g = ledGrid[LEDS_WIDE-i-1][LEDS_TALL-j-1][1] ,b […]