基于MATLAB App搭建STM32用户交互界面——MATLAB与STM32串口通讯的实现(虚拟串口VCP也支持)

本文介绍了如何在MATLABApp中实现与STM32单片机的串口通讯。作者遇到MATLABApp中串口回调函数无法正常工作的问题,最终通过使用serial函数结合轮询解决了问题。STM32发送数据需以 结尾,以便触发MATLAB的接收回调。
摘要由CSDN通过智能技术生成

        笔者重新更新了本片文章,解决Matlab APP中串口通讯的问题。

        最近几个月,DIY了块板子,选用STM32H743做为,该板子与上位机(电脑)的通讯方式有三种:①串口(115200波特率) ②USB虚拟串口(USB 2.0通讯)  ③网口(100Mbis全双工)。

        由于这块板子是用来学术研究的,数据需要在MATLAB中分析。因此需要实现MATLAB与STM32之间的通讯。

        本文主要介绍MATLAB与STM32串口通讯的实现过程,本人才疏学浅,如有错误,还请指正,废话不多说,直接上本人的移植记录。

一、 MATLAB App设计

        首先打开MATLAB软件,在命令行窗口输入“appdesigner” 打开MATLAB App,该界面还是很友好的,如下图所示,用“文本区域”、“下拉框”、“按钮”组件简单搭建了一个界面。

         网上有不少关于MATLAB与单片机的串口通讯介绍资料,讲的也很详细。MATLAB :【11】一文带你读懂serialport串口收发原理与实现_Alex-YiWang的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Alex497259/article/details/125922427

         调试时出现一个很奇怪的Bug,在 MATLAB App 中,不管是用 serial 还是 serialport 函数,串口始终跳不进回调函数,同样的代码在.m文件却可以正常运行。本人能力有限,哪位大佬知道原因还请告知。

        不断调试,最终选择了用 serial 函数加上轮询实现与单片机的交互,所设计的串口函数代码如下:

properties (Access = public)
        Comm_Obj       % 串口结构体
end 


methods (Access = private)
        
        %=========================串口初始化函数==========================
        function USART_InitSerial(app, ~)
             port = app.Comm_Device_DropDown.Value;      % 获取串口号
             baudrate = 115200;                          % 获取波特率(使用VCP该值无需设    置)    
            % -- 查找并关闭占用串口 --
            serialObjects = instrfind('Port', port);
            if ~isempty(serialObjects)
                 fclose(serialObjects);
            end

            % -- 建立串口连接 --
            app.Comm_Obj = serial(port, 'BaudRate', baudrate, "DataBits", 8, 'StopBits',1,'Parity','none');      % 创建串口对象

            set(app.Comm_Obj, 'InputBufferSize', 2048);                     % 设置接收缓存大小
            set(app.Comm_Obj,'BytesAvailableFcnMode','terminator');         % 接收到换行符时进入接收函数
            set(app.Comm_Obj,'BytesAvailableFcn',@app.readCommData);        % 指定回调函数
            set(app.Comm_Obj, 'Terminator', "CR/LF");                       % 设置回车符(0D 0A)作为接收数据的终止符
            fopen(app.Comm_Obj);                                            % 打开连接

        end

        %======================串口接收回调函数=======================
        function readCommData(app, src, event)
            data = fscanf(app.Comm_Obj);                        % 获取接收到的数据
            disp(data);    % 打印串口信息
        end

二、单片机程序设计

        单片机上的串口按正常流程调用串口初始化函数,和发送函数。

        注意:由于Matlab APP中是接收到回车符(0D 0A)时跳入接收回调函数。因此单片机发送的串口数据的结尾要加上“\r\n”做为换行符。

三、程序运行效果

        板子连接上电脑,选择好串口和波特率,点击连接,串口成功接收到了板子发送来的信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

河狸打捞员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值