gpt4 book ai didi

c - 使用 mbed 写入 Matlab 和 C 之间的串行端口时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:28 24 4
gpt4 key购买 nike

我一直在尝试使用 Matlab 中的代码写入串口。但是,我首先尝试的所有操作都会导致错误消息,然后导致 Matlab 认为该端口不可访问。

我使用的matlab代码如下:

function test()

TIMEOUT = 5; %time to wait for data before aborting
XPOINTS = 50; %number of points along x axis

%create serial object to represent connection to mbed
mbed = serial('COM18','BaudRate', 9600, 'DataBits', 8); %change depending on mbed configuration

%set(mbed,'Timeout',TIMEOUT); %adjust timeout to ensure fast response when mbed disconnected

fopen(mbed); %open serial connection
input = 1;
fprintf(mbed, input);
x=0;
while (x == 0)
values = fscanf(mbed, '%d');
disp(values);
end

fclose(mbed);

end

出现的错误信息是

Error using serial/fprintf (line 144)
Error: An error occurred during writing.

Error in test (line 14)
fprintf(mbed, input);

我的主要问题是,根据我在网上可以找到的所有内容,似乎说 fprintf 命令应该有效。我也试过这条线

fwrite(mbed, input);

它给出了本质上相同的错误消息。

一旦我尝试了这个,我收到的下一条错误消息是:

Error using serial/fopen (line 72)
Open failed: Port: COM18 is not available. Available ports: COM1.
Use INSTRFIND to determine if other instrument objects are connected to the requested device.

Error in test (line 12)
fopen(mbed); %open serial connection

我似乎只能通过保存我的程序然后打开完全相同的程序来解决这个问题。 mbed 在尝试时肯定已连接到正确的 com 端口。

我的问题是 fprintf 行哪里出错了?这是与串行端口或 mbed 通信的正确方法吗?

最佳答案

串行端口写入失败的原因并不多:

  • 如果串行端口消失(例如通过拔下 USB->串行适配器)
  • 如果内核写入缓冲区已满(您以比数据流出端口更快的速度写入大量数据)
  • 如果数据根本没有流出端口,由于流量控制,并且超时已过

您需要检查您的流量控制选项,如果您的设备不支持 RTS/CTS,但您的代码启用硬件握手,通信将失败。

关于c - 使用 mbed 写入 Matlab 和 C 之间的串行端口时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33221021/

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