matlab经典编程例题分析 matlabgui设计实例语言信号( 二 )


2.2串行接口电路
接口电路采用CP2102芯片设计而成 。CP2102集成度高,内置USB2.0全速功能控制器、USB收发器、晶体振荡器、EEPROM及异步串行数据总线(UART) 。与其他电平转接电路的工作原理类似,CP2102通过驱动程序将PC的USB口虚拟成COM口以达到扩展的目的 。电路原理如图3所示 。

matlab经典编程例题分析 matlabgui设计实例语言信号


3软件设计
3.1STM32数据传输流程
将摄像头的场中断信号送入单片机,当单片机捕捉到场中断信号时,拉高WEN管脚电平,之后整幅图像的数据就会存入FIFO 。当单片机再次捕捉到场中断时,表明一幅图像已经送入FIFO,此时关闭场中断,拉低WEN电平,防止摄像头数据再次写入FIFO 。当上位机发送握手信号之后,开始读取FIFO数据到内存缓冲区,根据采集到的图像做应用处理,并通过串口发送至上位机,发送完成后,再次开启场中断,当再次捕捉到场中断时,再次拉高WEN管脚电平,继续让摄像头数据存入FIFO,完成后单片机等待上位机握手信号,如此循环 。
3.2串行通信实现
MATLAB软件的设备控制箱(Instrument Control Toolbox,ICT)提供了对RS232串口通信的正式支持 。首先调用设备控制工具箱中的serial类函数,创建用户自定义的串口设备对象 。再通过自定义的文件句柄,以文件操作的方式,达到对PC串行口读写操作的目的 。
在进行通信之前,需对控制器进行配置,包括设置通信模式(全双工、半双工等)和串行口的通信参数(波特率、数据位、停止位等),使通信设备拥有相同的通信模式和串行通信参数 。从通信的建立到结束通信主要包括如下5个基本步骤[6]:
(1)为应用程序创建串口对象 。
(2)连接打开串口 。
(3)设置或者修改串口通信参数 。在能够有效地进行串口通信前,必须设置正确的串口通信参数 。
(4)从串口读写数据 。在前面三个步骤正常完成后,既可以从串口读数据也可以向串口写数据,也就是接受或者发送数据 。实现读串口功能的函数有多个,根据到达串口数据的类型选择合适的读函数 。
(5)关闭串口以及释放串口对象在工作空间中占用的存储空间 。
基本步骤中参数的设置需要在回调函数中提前初始化,对于不同的STM32程序,需要找到回调函数相应位置进行修改,较为不便,本文中通过对用户的选择值进行读取,从而初始化串口参数,同时添加了中断函数以及数据转换函数 。数据传输流程如图4所示 。

matlab经典编程例题分析 matlabgui设计实例语言信号


首先对用户设置的参数进行读取,设置并初始化串口,接着打开串口,发送握手信号0xff 。当单片机接收到相应的握手信号后,开始图像传输 。当MATLAB接收到终止符 ‘\n’ 时,表明已成功接收一帧图像,从而触发中断 。由于MATLAB接收到的数据是ASCII码字符形式,所以需要将从缓冲区读取到的数据进行格式转换:根据用户设定的像素数M×N,将数据转换成M×N的整形图像矩阵 。最后以JPEG图像格式存储于工作区空间中 。具体代码如下:
a_temp = [0,0,0,0,0];%定义一个像素值临时存储矩阵
b_count_flag = 1;
c_count_flag = 0;
data = https://www.jinnalai.com/fenxiang/zeros(M,N);%定义图像存储矩阵,M,N为像素数
n = s.BytesAvailable;%读取缓存区中当前图像大小
out = fread(s,n,char);%读取图像
out = char(out);
for a = 1:n
if out(a) ~= 13%判断是否是一帧图像终止符
if out(a) ~= 10%判断是否是单个像素终止符
a_temp(b_count_flag) = int16(out(a) – 48);

推荐阅读