Tag: 串口

串口重定向或拆分

我正在寻找一本关于如何进行串口重定向或端口拆分的书籍或代码示例。 我编写了很多com端口应用程序,并希望编写一个监视器应用程序,以便我可以看到应用程序和设备之间的串行端口。 所以我希望能够将串口重定向到另一个端口,这样我就可以监控端口之间的数据流。 我理解在某些情况下,这必须在内核级别完成。 (在USB情况下) 我在C#中使用system.IO.Ports编写了监视器应用程序。 如果我必须调用一个很好的C ++ / C程序集。 谢谢 乔

以独立于平台的方式访问串行端口

我有一项任务是创建一个程序,通过桌面工作站通过RS-232控制设备。 目前我正处于规划阶段,需要一些一般帮助选择语言和问题的整体方法。 该程序应在32位和64位Intel处理器上在Linux(主要是Ubuntu)和Windows(XP,7)下构建和运行。 工作站可能有物理COM端口或(更可能)USB-RS232转换器。 目前我最好的选择是C ++程序,有条件地使用CMake构建。 是否有某种方式,使用某种语言,配置和访问串行端口(包括通过USB模拟),这是独立于平台的? 如果不是,这个问题的好方法是什么? 建议至今 : * 带有Boost的C ++ * python with pySerial

在C中使用linux串口,无法获取完整数据

我正在使用用C编写的Linux串口。下面是我的UART设置 int fd; struct termios tty_attributes; fd = open(comport, O_RDWR | O_NOCTTY | O_SYNC | O_NONBLOCK ); if(fd < 0) { perror("open comport error.\n"); exit(EXIT_FAILURE); } else { if(tcgetattr(fd, &tty_attributes) == -1) { perror("tcgetattr termios function error.\n"); exit(EXIT_FAILURE); } tty_attributes.c_lflag = 0; tty_attributes.c_oflag = 0; tty_attributes.c_iflag = 0; tty_attributes.c_cflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); tty_attributes.c_cflag |= CS8; tty_attributes.c_cflag […]

如何从C中的串行(SPI)连接读取数据?

我正在尝试编写一个程序,该程序将安装在Linux MCU(Raspberry Pi)上,该程序将读取从另一个MCU(我将自己构建的本地产品)的串行数据。 我已经研究过如何做到这一点,并认为我有“大局”,但仍然缺少一些东西。 首先,我需要启用内核模块并让自己访问设备: sudo modprobe spi_bcm2708 sudo chown `id -u`.`id -g` /dev/spidev0.* 从那里我可以使用这个着名的C文件来测试SPI连接。 所以现在连接就在那里,但我仍然需要从中读取串行数据。 根据这个问题的答案,我只需要: …打开相关端口进行读取,并使用read()获取数据。 然而,该答案中的代码片段似乎是通过设备驱动程序而不是通过SPI打开端口。 我的理解是我可以使用SPI从连接的MCU设备读取数据,并且我不需要为该设备编写自己的设备驱动程序。 这是真的? 如果是这样,我将如何从SPI连接中读取,以及该代码与上面链接的问题的答案中的代码有何不同? 如果我的理解不正确,并且我确实阅读了“通过”设备驱动程序,为什么我首先需要驱动程序? 这不是SPI希望绕过的吗? 提前致谢。

UART ISR Tx Rx架构

我让事情复杂化了吗? 我正在设计我的代码,通过UART从8051微型到外围设备进行通信。 外设响应来自主机的命令,并且一次只能响应一个命令。 这是一个简单的发送和接收协议。 (tx1,rx1,tx2,rx2,tx3,rx3)每个TX消息以CR终止,每个响应以>终止。 在收到对最后一个的回复之前,我无法发送新消息。 如果我启用该选项,响应也可以在回显打印原始TX消息(但这会导致更多流量) 一个示例消息是: 德克萨斯:你好 RX:世界!> 或者使用echo选项…… 德克萨斯:你好 RX:你好\ rWorld!> 选项A getHello等函数由发送和接收组成。 并行ISR例程将收集传入的字节,并在收到“>”字符时抛出一个标志。 char* getHello(char * buf){ sendMsg(“Hello\r”); delay(10ms); //wait a little bit //wait for receive to come in or timeout to occur while(!receiveFlag || !timeoutFlag); //thrown by ISR receiveMsg(buf); //parse the message and do some other stuff return buf; } […]

使用usbser.sys冻结SerialPort.Open / DeviceIoControl / GetcommState

我有一个C程序,它打开COM端口的句柄,向它写入一些字节,读取一些字节,然后关闭句柄并退出。 但是,当我连续运行10次这样的程序时,它开始花费很长时间来完成GetCommState函数并陷入SetCommState函数。 在C#中使用简单的SerialPort对象SerialPort发生同样的事情。 我能找到的唯一解决方法是将设备重新连接到端口。 是否有一些更优雅的方法摆脱这种冻结? 它可能只是一些PC配置错误? 更新 我重写了代码,使其使用DeviceIoControl而不是SetCommState 。 但是,这里的问题完全相同。 device = CreateFileW( L”\\\\.\\COM3″, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); static int SetBaudRate (HANDLE device) { int error = 0; int success = 0; OVERLAPPED overlapped = {0}; overlapped.hEvent = CreateEvent(NULL, TRUE, 0, NULL); if (overlapped.hEvent) { SERIAL_BAUD_RATE baudRate = {0}; baudRate.BaudRate = […]

如何在PC上访问我的9位数据串口?

我开发了一种嵌入式解决方案,通过Multi Drop Bus进行通信,现在我想开发一个基于PC的应用程序来监控总线上的流量。 MDB supports true 9 data bits (plus start/stop/parity – and *no fudging* by using the parity bit as a 9th data bit)而标准Windows和Linux库提供最多8个数据位。 我有一个支持9位数据的StarTech PCI2S950 PC串口卡,但我不确定如何编写我的监控应用程序并且搜索了很多东西,但没有用。 我更喜欢用C(或Delphi,或C ++)编写代码。 我对Cygwn略有偏好,但我愿意使用简单的Windows或Linux。 通过该PC串行端口卡读取/写入9个数据位的任何内容。 有人可以帮忙吗?

通过RS232串口将数据发送到条形码扫描器

我有一个条形码扫描仪,通过RS232串口连接。 我需要编写一个程序来将该设备与PC连接并传输数据。 我已经写了一些初始化通信链接的基本方法,并尝试通过向设备发送BEEP命令进行测试,但它没有按预期发出蜂鸣声。 所以我认为我的源代码有问题。 请有人帮我完成源代码。 以下是书面源代码 01)DeviceRS232.h #ifndef DEVICERS232_H #define DEVICERS232_H extern “C” { #include #include #include #include #include #include #include #include #include } #include #define MAX_SERIAL_PORT_NO 30 class DeviceRS232 { public: DeviceRS232(); virtual ~DeviceRS232(); int fdRS232; // file descriptor for the serial port void setSerialPort(std::string sp); void setBaudRate(long baud); void setDataBits(int dataBit); void setStopBits(int […]

device_register和driver_register之间的区别

我正在写一个UART驱动程序。 我在第14章.Linux设备模型中遇到了两个函数。 int device_register(struct device *dev); int driver_register(struct device_driver *drv); 由于UART是一个char驱动程序,我使用( alloc_chrdev_region)动态创建了主要数字,并使用cdevadd()将设备添加到内核。 我在omap-serial.c中遇到了uart_register_driver()和platform_driver_register() 。 我可以使用platform_driver_register()映射driver_register ,但是uart_register_driver与tty相关函数映射。因为我是初学者,我不想使用tty相关函数。 uart_register_driver与uart_register_driver device_driver()吗? 请解释。

C:跨平台的RS-232串口库?

我正在寻找一个开源的跨平台库,用于处理C语言中的串行端口,这就是令人敬畏的PySerial库(不幸的是我必须在这个应用程序中使用C)。 我只发现了这个: http : //www.teuniz.net/RS-232/ ,而且似乎没有提到OS X的兼容性。