问题标签 [serial-port]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
9791 浏览

python - 用于 python 的 XMODEM

我正在编写一个需要使用 XMODEM 从传感器设备传输数据的程序。我想避免编写自己的 XMODEM 代码,所以我想知道是否有人知道是否有任何地方可用的 python XMODEM 模块?

0 投票
4 回答
3914 浏览

c - 您如何在内存非常有限的嵌入式系统上处理大量数据传输?

我有一个微控制器,它必须从 PC 串行端口(115200 波特)下载一个大文件,然后通过 SPI(~2 MHz)将其写入串行闪存。闪存写入必须在 256 字节块中,前面有写入命令和页面地址。系统上可用的总 RAM 为 1 kB,堆栈大小为 80 字节。

这目前是通过从 UART 填充一个 256 字节缓冲区然后乒乓到另一个 256 字节缓冲区来工作的,该缓冲区由 RX 缓冲区就绪信号上的中断填充,同时使用忙写入写入闪存。重复缓冲区交换,直到操作完成。

我更愿意为在单独的循环缓冲区上运行的 SPI 和 UART 端口设置 TX/RX 中断处理程序。因此,我可以简单地填充 TX 缓冲区并启用中断或检查缓冲区是否有传入数据,而不是轮询新字节并等待操作完成。这将为实际工作提供更多时钟周期,而不是等待外围设备。

在使用 128 字节循环缓冲区实现 IRQ 后,我轮询 UART RX 缓冲区中的数据并立即将其放入 SPI TX 缓冲区以进行文件传输。我使用这种方法遇到的问题是我没有足够的 RAM 用于缓冲区,并且 PC 接收缓冲区的填充速度比我将数据传输到闪存传输缓冲区的速度要快。显然,传输速度不是问题(115.2 kHz 输入和 2 MHz 输出),但在传输每个 256 字节页面后有一个写周期等待。


似乎频繁的 SPI 中断阻塞了一些 UART 中断并导致字节丢失。我选择的解决方案是为 UART 接收中断使用一个环形缓冲区,并将数据馈送到一个 256 字节的页面缓冲区,该缓冲区通过轮询字节传输和写入完成来发送到串行闪存。一个 128 的环形缓冲区足够大,可以防止 SPI 写入期间的溢出。

0 投票
2 回答
381 浏览

terminal - 自定义串口终端

我正在尝试开发一个具有内置串行端口终端的自定义应用程序,但它将能够挂起终端并以自定义命令和数据格式执行一些 I/O。

例如,当我单击“获取数据”按钮时,软件将发送一些二进制命令并获取一些二进制数据作为回报,然后对数据进行处理。并且终端将忽略所有这些事务。

正如我刚刚了解到的,仅仅从 /dev/ttyxx 写入()和读取()对于正确的终端连接是不够的。

在我的应用程序中包含一个简单终端的最简单方法是什么?我不想使用外部终端应用程序。我目前正在检查cutecom的源代码以从头开始实现它,但也许有一种更简单的方法。

注意:请不要建议使用 xmodem/ymodem 软件,我必须使用自定义命令。

0 投票
2 回答
1493 浏览

visual-c++ - VC++中的串口通信

通过串口读取数据时

什么是BSTR k;,你是什么意思k=data.bstrVal?是什么bstrVal

0 投票
2 回答
1361 浏览

serial-port - 是否有任何处理串行端口通信的设计模式?

我们正在使用一些新的切割工具,它们可以通过串行端口而不只是控制面板来更改其硬件参数。

当硬件参数发生改变时,硬件将需要几秒钟来重新配置自身,然后发出信号表明它已准备好使用。

我们在此之前的设置涉及操作员单击切割板或零件命令。该软件将显示一个对话框,允许操作员更改与运动相关的任何内容(速度、延迟等),并显示硬件应采用的配置。操作员验证所有内容后,单击“确定”,机器开始切割。

对于新硬件,如果我们传输有更改,我们会提取当前配置,并弹出一个对话框,显示新配置是什么以及显示硬件是否准备就绪的指示器。并非所有事情都是通过串行端口自动完成的,因此有时对话框必须停留在那里,直到操作员单击“确定”。其他时候,当硬件发出正确信号时,它可以自行卸载。

我的问题(和疑问)是通过串行端口执行此操作非常缓慢。这也是我们第一次做这种类型的工作。我担心我错过了一些解决方案来使整个事情更具响应性。由于我们从第三方购买切割硬件,因此不能选择使用串行的替代品。

我想做的另一件事是可以选择显示状态对话框并让它继续运行,而不会让串行通信陷入系统的其余部分。

我正在寻找有关 Win32 API 或 .NET 的提示。

0 投票
6 回答
4406 浏览

winapi - 如何使用 Windows API 将空字符发送到串行端口?

我正在开发一个 Windows 实用程序,它使用标准 COM 端口与一些自定义硬件进行通信。通信协议(我无法控制)要求我发送和接收原始 8 位数据字节。

我目前正在使用以下 Windows API 函数将数据发送到 COM 端口:

wherehFile是对正确打开的 COM 端口的引用,并且lpBuffer是我存储在内存中的字节数组。在需要将空字符(ASCII 零)发送到设备之前,该代码运行良好。WriteFile一旦检测到空字符就停止发送,因为它假定它已到达字符串的末尾。即使我设置numberOfBytesToWrite正确,也会发生这种情况。

如何使用 Windows API 将原始数据发送到 COM 端口?我更愿意使用类似于 的标准 API 调用WriteFile,但我愿意接受建议。

我目前正在使用RapidQ来构建实用程序,但它所做的只是直接调用 Windows API 函数。

编辑:我的设置包括通过串行端口连接到自定义硬件模块的 Windows PC。该模块有一个小屏幕,我可以在上面查看传输的字符。我已经用另一个第三方实用程序测试了这个设置。我能够使用这个第三方程序与模块通信,并且空字符正确显示。在我自己的程序中,当我使用 时WriteFile,传输流中任何位置的空字符都会停止发送流的其余部分。

0 投票
3 回答
5435 浏览

java - Java中串口参数的含义?

我是Java的初学者。我正在从串口读取数据。我有

和的含义是9600什么?DATABITS_8,STOPBITS_1PARITY_NONE

0 投票
2 回答
4755 浏览

c# - c#中的极点显示问题

我在我的 POS c# 应用程序中使用了极显示(E POS)。我有两个主要问题,1. 我不能完美地清除显示。2. 无法设置光标位置。

代码 :-

0 投票
1 回答
2522 浏览

windows-vista - Vista上的锁定串行端口

我正在开发一个与串行端口对话的应用程序,在我的开发机器上,我正在运行 Vista,并且该串行端口是蓝牙连接。有时,串行端口会陷入我的应用程序无法再连接到它的状态。在 .net 中,我收到一条 IOException,其中显示一条消息“未找到元素”。

我尝试重新启动应用程序,连接其他应用程序(如 HyperTerm 之类的通信客户端),但没有任何帮助。我找不到任何更具体的错误消息,并且没有任何内容记录到机器的事件日志中。设备管理器告诉我端口“工作正常”。

有没有办法找出哪个进程和/或 .dll 拥有串行端口,和/或强制关闭端口?

如果有什么不同的话,我的 App 是用 C# 编写的,但是在结构上,使用“using”语句打开和关闭端口并不方便。

谢谢,安迪

0 投票
1 回答
910 浏览

serial-port - 使用 POSIX 访问半双工串口

我被要求使用 POSIX 调用读取和写入半双工串行连接(更具体地说,在 Linux 2.6.x 上用 C 语言编写)。我在查找有关该特定模型的详细信息时遇到了一些麻烦(大多数页面都集中在全双工上),并且由于阅读时出现轻微异常,我想检查一下我是否在这里做错了。

使用半双工串行连接,我只能读或写。这不是问题,因为线路上没有未经请求的传入数据 - 唯一一次将任何包裹发送给我(供阅读)是我事先要求它们时。

所以我的代码所做的就是在需要发送某些东西时将其写入()到端口。如果这些数据导致响应(我事先知道的),我只需读取()。我没有调用特殊函数 - 但也许我应该调用?这种方法正确吗?即当线路空闲时写?