我希望有人能帮助我。我正在尝试在 ARM 中进行串行端口通信(我正在使用 Linux)。问题是我在 Windows 中使用名为终端的程序,我用它来查看输出。
我有两条电缆从我的 ARM 连接到我计算机的 USB。我所做的是打开两个终端程序窗口,然后连接各自的串口,直到这里一切正常。
现在在其中一个窗口中我有 ARM 控制台(这是 ttymxc1 串行端口),我在其中写了例如“echo hello >/dev/ttymxc2”(ttymxc2 是其他窗口中的另一个端口)。当我执行它时,出现了一些东西,像这样:“<0><0><0><0><0><0><0>”。我正在阅读,发现这通常是波特率问题,所以我将“ttymxc2”的波特率更改为 115200,就像“ttymxc1”一样,两者的速度相同。一旦我这样做了,我试图再次发送相同的回声,出现这个:<0>©::*ë<0> 所以,somethig 正在改变。
我得到了两个串口的所有参数,它是输出:
stty -a -F /dev/ttymxc1
speed 115200 baud;stty: /dev/ttymxc1
line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ^J;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl echoke
stty -F /dev/ttymxc2 115200
stty -a -F /dev/ttymxc2
speed 115200 baud;stty: /dev/ttymxc2
line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
而且我不知道可以更改哪个参数,我在终端程序中使用两个窗口中的 115200 8n1 无握手配置。
还有当我执行这个
setserial /dev/ttymxc2 -v autoconfig
/dev/ttymxc2, UART: undefined, Port: 0x0000, IRQ: 60
和
setserial /dev/ttymxc0 -v autoconfig
/dev/ttymxc0, UART: undefined, Port: 0x0000, IRQ: 58
所以我被调查了,我知道我必须设置这样的东西:
setserial /dev/ttymxc2 uart 16550A
这是输出:
setserial: can't set serial info: Invalid argument
但我不确定这是不是问题所在,因为 ttymxc1 端口也是未定义的,我可以看到 ARM 输出非常好,所以我很茫然,我希望有人能帮助我。
希望解释清楚
非常感谢
dmesg 的输出 | grep tty:
Kernel command line: noinitrd loglevel=7 no_console_suspend console=ttymxc1,115200
fec_mac=00:05:51:07:B3:B5 mtdparts=gpmi- nand:512k(NBoot)ro,2m(UBoot)ro,256k(UBootEnv),256k
(UserDef),6m(Kernel)ro,-(TargetFS) gpmi_debug_init enable_wait_mode=off ubi.mtd=TargetFS root=ubi0:rootfs rootfstype=ubifs rootwait rw
bootconsole [ttymxc1] enabled
imx-uart.0: ttymxc0 at MMIO 0x2020000 (irq = 58) is a IMX
imx-uart.1: ttymxc1 at MMIO 0x21e8000 (irq = 59) is a IMX
console [ttymxc1] enabled, bootconsole disabled
imx-uart.2: ttymxc2 at MMIO 0x21ec000 (irq = 60) is a IMX
/proc/tty/driver 的输出
/dev/tty /dev/tty 5 0 system:/dev/tty
/dev/console /dev/console 5 1 system:console
/dev/ptmx /dev/ptmx 5 2 system
/dev/vc/0 /dev/vc/0 4 0 system:vtmaster
rfcomm /dev/rfcomm 216 0-255 serial
IMX-uart /dev/ttymxc 207 16-23 serial
pty_slave /dev/pts 136 0-1048575 pty:slave
pty_master /dev/ptm 128 0-1048575 pty:master
pty_slave /dev/ttyp 3 0-255 pty:slave
pty_master /dev/pty 2 0-255 pty:master
unknown /dev/tty 4 1-63 console
我点击这个 cat/proc/tty/driver/IMX-uart,这是输出:
0: uart:IMX mmio:0x02020000 irq:58 tx:0 rx:0 DSR|CD
1: uart:IMX mmio:0x021E8000 irq:59 tx:12075 rx:358 RTS|DTR|DSR|CD
2: uart:IMX mmio:0x021EC000 irq:60 tx:0 rx:0 DSR|CD
0>0>0>0>0>0>0>0>0>最佳答案
根据 /proc/tty/driver/IMX-uart 测试的积极结果和收到的垃圾数据,可以安全地假设您的 ARM 板上的 Linux 正在发送输出,当您发出 shell 命令 echo hello >/dev/ttymxc2。我们知道您在主机 PC 和串行控制台 /dev/ttymxc2 之间有良好的串行连接。
第 Ia 部分
通常,第一个要检查的项目是 imx-uart.2 在电路板上的连接器上的输出。您将需要一个示波器,并可以确认逻辑电平或 RS-232 电压是否正常。此检查还用于确认您已连接到正确的 PIN 码。
第 Ib 部分
在您所描述的设置和结果(到目前为止)中,您有一个工作串行链路和另一个未知条件的串行链路。工作串行链接是:
<PC COM port_A> ----------(cable_A)-----------<imx-uart.1>
另一个串行链路包括:
<PC COM port_B> ----------(cable_B)-----------<imx-uart.2>
此测试假设所有四个串行端口都配置为 115200 8n1。
通过选择性替换到工作链接中,您可以验证第二个链接的组件是否正常工作。
例如,第一个替代品可能是更换电缆:
<PC COM port_A> ----------(cable_B)-----------<imx-uart.1>
如果到控制台的链接仍然有效,那么下一个替换可能是交换 PC 端口连接:
<PC COM port_B> ----------(cable_B)-----------<imx-uart.1>
然后另一个串行链接现在将包含
<PC COM port_A> ----------(cable_A)-----------<imx-uart.2>
所以现在第二个串行链路由以前已知的工作组件和一个未知组件组成,即 ARM 板上的端口。
重做你的测试。
第二部分
如果您仍然无法从交换中获得积极的结果,那么您需要提供有关您的设置的更多详细信息。 你提到了一些关于 USB 的事情。那么显然 PC COM port_A 和 PC COM port_B 都是 USB 端口和某种 RS-232 转 USB 适配器的组合?
请提供imx-uart.1 和imx-uart.1 电路板连接的详细信息。
这些接口(interface)是 RS-232 电压还是逻辑电平?
如果是逻辑电平,那么你用什么来转换成 RS-232?
如果您使用的是 FTDI USB 转 TTL 串行“电缆”,那么这可能是个问题。我在连接到一个 SoC 的 FTDI“电缆”时遇到了问题,该 SoC 的波特率和转换率都比较慢。问题是接收到的数据总是完全是垃圾字符。用 USB 到 RS232 适配器和 MAX3232 转换器(RS-232 到 3.3V 逻辑)替换 FTDI“电缆”解决了这个连接问题。
与 Sparkfun 板和 FTDI“电缆”(及其变体和仿制品)相比,我建议使用真正的 TTL 到 RS232 转换器(使用 MAX3232 或类似芯片)以提高可靠性。只有在您或其他人确认设置确实有效后,才能使用 Sparkfun 开发板或 FTDI“电缆”。
在我遇到的那种情况下,一个串行端口(在 SoC 上)固定为 115200 波特。
但是您可以完全控制自己的情况。
因此,当您收到垃圾数据时,可以尝试的一项测试是将波特率(在串行链路的两端)降低到 9600 甚至 1200。
关于linux - Linux下两个串口之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041776/
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年
我从用户Hirolau那里找到了这段代码:defsum_to_n?(a,n)a.combination(2).find{|x,y|x+y==n}enda=[1,2,3,4,5]sum_to_n?(a,9)#=>[4,5]sum_to_n?(a,11)#=>nil我如何知道何时可以将两个参数发送到预定义方法(如find)?我不清楚,因为有时它不起作用。这是重新定义的东西吗? 最佳答案 如果您查看Enumerable#find的文档,您会发现它只接受一个block参数。您可以将它发送两次的原因是因为Ruby可以方便地让您根据它的“并行赋
由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A