MATLAB与STM32串口通信 - 01 串口设置

发布一下 0 0

众所周知,MATLAB是以数值计算见长的科学与工程计算语言。具备简洁的语法,强大的数学函数库,丰富的数据可视化能力,并通过数以百计的工具箱向各个专业领域不断延伸。基于MATLAB的工具箱可以搭建嵌入式系统开发环境。网上已有较多的文章专门讨论这一问题。本文仅限于讨论如何在MATLAB中通过串口从STM32收发数据,特比是如何向STM32发送指令来控制单片机的行为,例如休眠、唤醒、设置RTC时间/日期/闹钟等。

在MATLAB中列出可用端口

为了便于说明,这里以App Designer中创建串口为例,串口参数设置界面如图1所示。

MATLAB与STM32串口通信 - 01 串口设置

图1. 串口参数设置app界面示例

首先,需要用serialportlist函数列出计算机上可用的串口。示例代码如下:

%% Find the available serial ports on this computerallport = serialportlist("all");if ~isempty(allport)     app.DropDown_PortNumber.Items = allport;else %At least one serial port must be available      uialert(app.UIFigure,'未发现串口,请检查计算机设置。','无串口','Icon',"error");end

第一行代码获取可用串口列表并赋值给变量allport;如果allport非空,则把它赋值给名为DropDown_PortNumber的下拉列表的Items中;如果allport为空,则进行提示。如果不是app开发,程序中只需在allport中找出与单片机连接的端口即可。

创建串口对象

第二步是用serialport函数创建串口对象。示例代码如下:

spobj = serialport(app.DropDown_PortNumber.Value, ...    str2double(app.DropDown_BaudRate.Value),...    "DataBits",str2double(app.DropDown_DataBits.Value),...    "StopBits",str2double(app.DropDown_StopBits.Value),...    "Parity",app.DropDown_Parity.Value,"FlowControl","none",...    "ByteOrder","little-endian","Timeout",10);setDTR(spobj, true); %Assert the Data Terminal Ready pin. The DTE asserts the DTR pin to request that the DCE connect to the communication line.configureTerminator(spobj,"CR","CR/LF"); %读-回车;写-回车换行configureCallback(spobj,"terminator",@app.readSerialData);app.SerialPort = spobj;

在MATLAB中创建串口对象总共需要8个参数,创建串口时除了端口号和波特率必须指定外,其余参数如果用默认值可以不列出。这里为了便于说明,都列了出来。serialport后的括号中的参数依次为:

  1. 端口号Port 字符串,如"COM3",这里直接获取界面上下拉列表中选中的值,下同;
  2. 波特率BaudRate 数据传输速率;
  3. 数据位DataBits [8]/7/6/5,默认为8;
  4. 停止位StopBits [1]/1.5/2,默认为1;
  5. 校验位Parity ["none"]/"even"/"odd";
  6. 流控方式FlowControl ["none"]/"hardware"/"software";
  7. 字节顺序ByteOrder ["little-endian"]/"big-endian";
  8. 超时时限Timeout 大于零的数值,默认为10;

通信前需要将DTR引脚拉高,否则接收不到数据。对应如下语句:

setDTR(spobj, true); 

configureTerminator函数设置终止符,可以为"CR"(回车)、"LF"(换行)、"CR/LF"(回车换行)、或0-255间的任意整数。这相当于通信双方的一个协议。MATLAB接收数据时根据终止符来判断一行的结束,发送数据时会在最后将终止符发送出去。

configureCallback函数设置回调函数。回调函数的触发方式通过第二个参数设置:

  • "teminator" 读取到终止符时,触发回调函数;
  • "byte" 读取指定数量的字节时,触发回调函数。这种情况下,拟读取的字节数通过第4个参数设置;
  • "off" 不触发回调。

在前两种情况下,需将回调函数的句柄作为configureCallback的最后一个参数,来关联回调函数。本例中设置的是"terminator",并且为接收和发送设置了不同的终止符。

注意事项:

  • STM32属于ARM系列微处理器。The bytes are coded in memory in Little Endian format.
  • 通信双方的波特率、数据位、停止位、校验位设置必须完全一致。

指令发送方法

在MATLAB中,可以通过writeline函数发送指令到单片机。指令格式需要提前约定,并在STM32的驱动程序中进行适配响应(详见后文)。例如,我们约定指令为4个字符,指令后为参数。以时间设置为例,格式为TIMEhhmmss,其中"TIME"为指令,"214910"为参数,表示21:49:10。MATLAB中的指令为:

time = '214910'; %格式hhmmss,21:49:10writeline(app.SerialPort,['TIME',time]);

writeline函数在发送完[]中的字符后,还会发送约定的writeterminator,即"CR/LF"。



后文链接:

  • MATLAB与STM32串口通信 - 02 中断响应

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/177034.html