糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Matlab 与stm32单片机之间的串口通信

Matlab 与stm32单片机之间的串口通信

时间:2018-08-18 17:53:47

相关推荐

Matlab 与stm32单片机之间的串口通信

Matlab 与stm32单片机之间的串口通信

在我们用stm32做信号处理时,我时常需要用到Matlab对我们采集的数据进行分析,拟合。按照传统的方法,我们一般都会先将数据通过串口助手打印出来,再导入Matlab。这样做会比较繁琐,我接下来要介绍的方法是stm32通过串口直接将数据导入matlab中并画图。

我们都知道,串口是一个字节一个字节发送的,但是我们用stm32采集数据时,一般都是浮点型数据,而浮点型是32位的,也就是4个字节,所以我们需要对我们的数据进行数据转换。对于单片机来说有一种很简单的数据转换法,那就是使用共同体。共用体有时也被称为联合或者联合体,共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

union{struct{uint8_t com[4];}ComInfo;float data;}D_data;

所以你只要把数据赋给data,再把com发送出去就行了。

D_data.data=input[i];

HAL_UART_Transmit(&huart1,, 4, 0xffff);

Matlab的代码

delete(instrfindall); %删除串口所有信息,方便下次使用 s=serial('com8') %选择串口号 set(s,'BaudRate',115200,'StopBits',1,'Parity','none');%设置波特率 停止位 校验位 fopen(s);%打开串口fwrite(s,100,'uint8');%向单片机发送握手信号 for i = 1:1000 %循环读取 ,1000个数据out=fread(s,4,'uint8');%读取 数据个数 与 类型 a(i)=typecast(fliplr(uint8([out(4) out(3) out(2) out(1)])), 'single'); %将4个8位整形和成一个浮点型pause(0.01);%延时一小段时间,放在接受过快,数据丢失 i=i+1;endplot(a);%画图hold on;%使下次画的图不被覆盖,方便与上次图形进行对比axis([0,500,-3,3]);%设置x,y轴坐标范围 fclose(s) ;%关闭串口

stm32代码

for(int i=0;i<1000;i++){input[i]=sin(2*i*PI*5/1000);//正弦波信号}while (1){HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,1);// 串口持续接受信号if(aRxBuffer[0]==100)// 判断握手信号是否到来{for(int i=0;i<1000;i++){D_data.data=input[i];//将数据赋给共同体HAL_UART_Transmit(&huart1,, 4, 0xffff);//将4个字节发送出去HAL_Delay(5);}aRxBuffer[0]=1;// 清空标志位}

这是matlab接受到数据后画的图。

你可以双击右上角的a查看你接受的数据。

如果你没有引用dsp库里的#include "arm_math.h"那么sin那里将会报错,你可以用其他数据代替,在matlab那里查看你的数据是否正确。还有你发送的数据个数要达到matlab接受的个数,不然matlab无法画图。

如果觉得《Matlab 与stm32单片机之间的串口通信》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。