写在前面
最近做了一个康复辅助设备的小项目,其中一部分设计串口通信及其对应知识,也是整个项目挺重要的一部分,故单独摘出来写成笔记以加强记忆。如有错误之处望诸君指正。
串口通讯初始化
串口通讯的第一步便是初始化,即配置串口参数与打开串口。
在matlab中,我们可以通过调用几个简单的指令来实现这一步骤。
首先是配置串口参数:
一般来讲,串口参数包括:串口名、波特率、奇偶校验位(起始位)、数据位、停止位这几项。
串口名是指:串口在系统中的名称,一般以COM加数字命名。如:COM2、COM11。
波特率是指:上位机与下位机通讯时的传输速度。常见的波特率有9600、14400、115200等,其单位为波特/秒,即b/s。
需要注意区分的一点是波特率不是比特率,比特率的单位是比特/s,即bit per second-bps/s;波特率中的波特与比特存在这样的关系,如果发送的内容有1位起始位、1位终止位、8位数据位,那么1波特便等于10比特。
如果下位机的采样频率过快(数据小于等于8位),比如达到了10kHZ,那么就要求在1秒以内上传10000个数,需要10000个波特,在这种情况下9600的波特率就不满足要求了,我们便需要更大的波特率。
另外顺便区分一下比特bit与字节Byte,在一般情况下1Byte=2^8bit,即一个字节由256个比特组成。在串口通讯中,如果设置数据位为8,那么我们一个波特所能携带的数最大便为11111111,因此对超过8位的数据我们需要将其拆分成高低位发送。
奇偶校验位(起始位)、数据位、停止位是指:每一个波特中所含的这些有不同含义的数的位数。一般奇偶校验位为0,数据位为8,停止位为1。
以上配置串口参数的过程可以用简单的matlab语句实现:
s=serial("COM8");%设置串口的句柄
set(s,'BaudRate',14400,'DataBits',8,'StopBits',1,'Parity','none');
%配置串口参数 波特率14400 无起始位 1终止位 8数据位
其次是打开串口:
在matlab中可用简单语句实现:
fopen(s);%配置并打开串口
这样,便完成了串口通讯的初始化,接下来便是发送数据和接收数据了。
串口发送数据
在matlab中,发送数据的函数有fprintf、fwrite、fsc