最近几个月,DIY了块板子,选用的芯片是STM32F407,该板子与上位机(也就是电脑)的通讯方式有两种,一是用串口发送程序进程数据,二是用网口发送原始数据。在调试时,需要用XCOM接收串口信息、用XNET接收网口信息。由于这块板子是用来学术研究的,数据每次都要拷到MATLAB中分析,非常的不方便。于是想一步到位,使用 MATLAB App 制作一个GUI实现与单片机的交互。
本系列文档将记录该用户界面的搭建过程,本人才疏学浅,如有错误,还请指正,废话不多说,直接上本人的移植记录。
一、 MATLAB App设计
首先打开MATLAB软件,在命令行窗口输入“appdesigner” 打开MATLAB App,该界面还是很友好的,如下图所示,用“文本区域”、“下拉框”、“按钮”组件简单搭建了一个界面。
网上有不少关于MATLAB与单片机的串口通讯介绍资料,讲的也很详细。MATLAB :【11】一文带你读懂serialport串口收发原理与实现_Alex-YiWang的博客-CSDN博客https://blog.csdn.net/Alex497259/article/details/125922427
但有一个很奇怪的Bug,在 MATLAB App 中,不管是用 serial 还是 serialport 函数,串口始终跳不进回调函数,同样的代码在.m文件却可以正常运行。本人能力有限,哪位大佬知道原因还请告知。
不断调试,最终选择了用 serial 函数加上轮询实现与单片机的交互,所设计的串口函数代码如下:
properties (Access = public)
USART_SerialObj % 串口结构体
end
methods (Access = private)
%=========================串口初始化函数==========================
function USART_startSerial(app, ~)
delete(instrfindall); %删除串口
app.USART_SerialObj = serial('COM4','BaudRate',115200,'StopBits',1,'Parity','none'); %新建串口
fopen(app.USART_SerialObj); %打开串口
fprintf(app.USART_SerialObj, '%s', 'USART_OK'); %发送握手信息
end
%======================串口接收回调函数轮询=======================
function USART_readSerial(app,~)
while app.USART_SerialObj.BytesAvailable == 0 % 循环检查串口是否有新数据
pause(0.1);
end
data = fread(app.USART_SerialObj, app.USART_SerialObj.BytesAvailable, 'char'); % 读取串口接收到的数据
app.USART_Rev_Data.Value = [app.USART_Rev_Data.Value;convertCharsToStrings(char(data'))]; % 显示接收到的数据 读者根据自身代码修改
app.USART_readSerial(); % 继续循环读取数据
end
end
二、单片机程序设计
单片机上的串口按正常流程调用串口初始化函数,这里我添加的了一个握手信号,握手程序的代码如下:
u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15, 接收完成标志
//bit14, 接收到0x0d
//bit13~0, 接收到的有效字节数目
u16 USART_RX_STA = 0; //接收状态标记
#define PHY_USART_PC_HANDSHAKE "USART_OK" //定义上位机握手信号
//串口上位机握手
unsigned char PhyUart_PC_handshake(void)
{
u8 len,t;
char data_Rev[16];
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
for(t = 0;t<len;t++)
data_Rev[t] = USART_RX_BUF[t];
for(t = len;t<16;t++)
data_Rev[len] = '\0';
if(strcmp(data_Rev,PHY_USART_PC_HANDSHAKE) == 0) //与上手机握手验证
{
USART_RX_STA=0;
return 1;
}
else
{
USART_RX_STA=0;
return 0;
}
}
}
三、程序运行效果
板子连接上电脑,选择好串口和波特率,点击连接,串口成功接收到了板子发送来的信息。文章来源:https://www.toymoban.com/news/detail-696764.html
文章来源地址https://www.toymoban.com/news/detail-696764.html
到了这里,关于基于MATLAB App搭建STM32用户交互界面(1)——MATLAB与STM32串口通讯的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!