STM32
直播中

李慎梓

7年用户 1401经验值
私信 关注
[问答]

怎样使用matlab的GUI编程去实现TCPIP与STM32的通信呢

怎样使用matlab的GUI编程去实现TCPIP与STM32通信呢?
TCPIP与STM32是如何连接起来的?

回帖(1)

甘满盛

2021-11-18 11:48:33
  面向对象
  程序使用ALIENTEK 战舰 V3STM32F1 开发板连接ATK-ESP8266 WIFI 模块,串口无线 AP(COM-WIFI AP)、串口无线 STA(COM-WIFI STA)和串口无线AP+STA(COM-WIFI AP+STA)这 3 个模式的测试,每个模式又包含 TCP服务器、 TCP 客户端和 UDP 这 3 个子模式。
  使用matlab的GUI编程,选用模式为 COM-WIFI AP+STA 的TCP服务器模式。
  TCPIP
  
  根据帮助文档编写代码,最终实现GUI图像:
  
  建立连接
  % --- Executes on button press in OpenServer.
  function OpenServer_Callback(hObject, eventdata, handles)
  % hObject handle to OpenServer (see GCBO)
  % eventdata reserved - to be defined in a future version of MATLAB
  % handles structure with handles and user data (see GUIDATA)
  port = get(handles.Text_Port,‘string’);%获得端口
  Port = str2num(port);
  ipdre1 = get(handles.IP1,‘string’);
  ipdre2 = get(handles.IP2,‘string’);
  ipdre3 = get(handles.IP3,‘string’);
  ipdre4 = get(handles.IP4,‘string’);
  fprintf(‘IP分部集合完毕n’);
  Ip = strcat(ipdre1+“。”+ipdre2+“。”+ipdre3+“。”+ipdre4);%获得ip地址
  fprintf(Ip);
  % 构造服务器端tcpip对象
  echotcpip(‘on’,Port); %启动一个TCPIP回响服务器
  t = tcpip(Ip,Port); %创建一个TCPIP
  global tcpiptext
  tcpiptext = t;
  N = 1024;
  set(t,‘InputBufferSize’,8*N); %设置输入缓存大小
  set(t,‘OutputBufferSize’,1024); %设置输出缓存大小
  % 打开连接对象
  fopen(t);
  fprintf(‘连接成功n’);
  %发送指令
  %SendText = get(handles.SendText,‘String’); %获取发送文本内容
  fwrite(t,‘sending test successful’,‘int8’) %向host写数据
  % 等待接收数据
  while(1)
  nBytes = get(t,‘BytesAvailable’); %在输入缓存区的值
  if nBytes 》 0
  break;
  end
  end
  recvRaw = fread(t,nBytes,‘char’); %从host读数据
  S = char(recvRaw‘); %转置
  %A = fread(t);
  % 断开连接
  fclose(t);
  fprintf(’读取完毕,内容如下:n‘);
  set(handles.State2View,’string‘,’连接成功!此时可发送命令至下位机,接收内容如下:‘); %在text文本中显示读取的数据
  set(handles.Data2View,’string‘,S); %在text文本中显示读取的数据
  disp(S); %在命令行中显示读取的数据
  echotcpip(’off‘); %停止TCPIP回响服务器
  fprintf(’echo tcpip链接已停止,此时可发送数据到下位机继续n‘);
  %guidata(hObject,handles);%保存配置
  断开连接
  % --- Executes on button press in CloseServer.
  function CloseServer_Callback(hObject, eventdata, handles)
  % hObject handle to CloseServer (see GCBO)
  % eventdata reserved - to be defined in a future version of MATLAB
  % handles structure with handles and user data (see GUIDATA)
  % Disconnect the TCPIP object from the host and stop the echo server.
  % 断开连接
  global tcpiptext
  t = tcpiptext;
  % 关闭和删除连接对象
  fclose(t);
  delete(t);
  echotcpip(’off‘);
  fprintf(’断开连接,请重新建立连接或退出!n‘);
  set(handles.State2View,’string‘,’断开连接,请重新建立连接或退出!‘); %在text文本中显示读取的数据
  % --- Executes on button press in quit.
  主要问题
  1.对matlab编程不熟悉;
  2.在tcpip连接时,使用fscanf(),fgets()等函数不能有效读取发送过来的数据,显示报错:无法获得任何tcpip的数据,根据帮助文档以及百度解决问题;
  3.初始没有设置输入输出缓存值,读取数据也是ASCII的值,解决方法:
  set(t,’InputBufferSize‘,8*N); %设置输入缓存大小
  set(t,’OutputBufferSize‘,1024); %设置输出缓存大小
  while(1)
  nBytes = get(t,’BytesAvailable‘); %在输入缓存区的值
  if nBytes 》 0
  break;
  end
  end
  recvRaw = fread(t,nBytes,’char‘); %从host读数据
  4.从fread读取的数据是一列,使用转置正确读取数据:
  recvRaw = fread(t,nBytes,’char‘); %从host读数据
  S = char(recvRaw’); %转置
  5.使用全局变量global,获得tcpip的链接:
  t = tcpip(Ip,Port); %创建一个TCPIP
  global tcpiptext
  tcpiptext = t;
举报

更多回帖

发帖
×
20
完善资料,
赚取积分