使用MATLAB作为TCP Server连续接收单片机数据

  1. 项目背景

简单介绍一下本人目前在做的项目,是关于电阻抗成像设备硬件系统研发。原理如下图所示:通过电极注入电流,再采集各电极之间的电压,通过计算阻抗进而实现成像。

下位机采用STM32F407+LAN8720A,基于LWIP实现TCP Client通讯,将通过网口持续向上位机传输电压信息(每秒20帧,一帧包含208个电压数据)。本文将介绍如何让MATLAB充当TCP Server实现数据连续接收。本人才疏学浅,如有错误还请指正。

  1. Matlab代码

先上Malab代码。程序的运行效果是Malab作为TCP服务端不断接收TCP数据帧,并使用plot()实时显示采集的电压数据。

clc,clear,close all;
% TCP连接
t_server=tcpip('192.168.6.110',9999,'NetworkRole','server','ByteOrder','littleEndian');     % 建立TCP Server
set(t_server, 'RemoteHost', '192.168.6.5');      % 配置client IP 
fopen(t_server);        % 打开服务器,直到建立一个TCP连接才返回;

try_Frames_times = 100;      %接收的帧数
% 数据读取
for i=1:try_Frames_times      % 建立连接后读取数据
    pause(0.5);    % 每次读取之前等待0.5s,可设置为任意值
    try   
        data_recv=fread(t_server,t_server.BytesAvailable);      %从缓冲区读取数字数据
    catch
        t_server.ValuesReceived     % 查看读取出的数据数量,如果没有读到,返回0;
    end
    plot(data_recv);        %绘制接收的数据
end

补充

讲一下几个注意的点:

  1. 网络连接设置:本地IP、远端IP、端口号这一些要与Matlab代码中的设置一致;

  1. 由于本人在STM32板子上移植的LWIP没有实现网线的热插拔功能,程序运行时可能会卡在fopen(t_server),本人的解决措施是先运行Matlab代码,然后复位单片机,重新初始化网卡建立TCP连接。

  1. 单片机使用小端模式,电脑使用的是大端模式,数据传输时要注意大小端的转换。如在本文在函数tcpip()中,将数据模式设置为小端模式('ByteOrder','littleEndian');

  1. 关于在STM32移植LWIP实现TCP通讯,网上由很多的教程,这里就不展开介绍,有时间再写一下。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河狸打捞员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值