Matlab 与stm32单片机之间的串口通信项目实战
前言
当我们用STM32做一些DSP运算时(比如傅里叶变化,小波变换,卡尔曼滤波等算法),我们想知道自己所码出来的程序是不是按照自己预期的运算结果来或者说检验程序的鲁棒性,那我们就需要检验每个关键步骤和最终的运行结果。而matlab是一个很好的算法仿真工具。我们只需要在matlab中编写出想在单片机实现的算法程序,然后将STM32运行后的结果也导入到matlab中,然后subplot一下两者,就可以拟合曲线是不是你预期的了,如果不是,那就可以继续修改STM32代码调参了。下面我就讲讲如何实现两者串口通信的代码。
正文
一、STM32部分(stm32f407)
先上主代码:
for(int i=0;i<1000;i++)
{input[i]=sin(i*3.14*2/100);//正弦波信号
// input[i] = (float)(i);}
while(1){while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);if(USART_ReceiveData(USART1)==10)// 判断握手信号是否到来{ delay_ms(10);for(int i=0;i<1000;i++){D_data.data=input[i];//将数据赋给共同体UART1_Send_float(D_data.com);//将4个字节发送出去
// printf("第%d个\r\n",i);} }}
再讲知识点:
1.握手信号
一般用于指示串口是否处于忙线状态,这里是为了能让matlab能接收到完整的数据。
2.联合体
我们都知道,串口是一个字节一个字节发送的,但stm32的DSP运算结果一般都是浮点型数据,而浮点型是32位的,也就是4个字节,所以我们需要对我们的数据进行数据转换。对于单片机来说有一种很简单的数据转换法,那就是使用共同体。共用体有时也被称为联合或者联合体,共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
union
{uint8_t com[4];float data;}D_data;
所以你只要把数据赋给data,再把com发送出去就行了。
D_data.data=input[i];//将数据赋给共同体UART1_Send_float(D_data.com);//将4个字节发送出去
二、matlab部分
先上主代码:
close all
clear alldelete(instrfindall);
s=serial('com5') %选择串口号
set(s,'BaudRate',115200,'StopBits',1,'Parity','none');%设置波特率 停止位 校验位
fopen(s);%打开串口fwrite(s,10,'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;
end
plot(a);%画图
hold on;%使下次画的图不被覆盖,方便与上次图形进行对比
axis([0,1000,-3,3]);%设置x,y轴坐标范围
fclose(s) ;%关闭串口
再讲知识点:
1.delete (instrfindall) : 删除所有串口信息,在程序结束后没有删除串口信息,可能会导致串口被占用,下一次程序无法使用串口或者其他软件无法使用串口
2.fliplr:将数组从左向右翻转。
3.typecast(X,type) :在不更改基础数据的情况下转换数据类型。”single“是转换成单精度浮点数类型。这里是将STM32从浮点数拆分发送 的4 个字节重新组合还原成原来的浮点数。
三、通讯结果
matlab接收到数据后生成的图形
查看接收到的数据
文章到此为止,有疑问的可以评论区留言,我看到就会回复。
Matlab 与stm32单片机之间的串口通信项目实战相关推荐
- Matlab 与stm32单片机之间的串口通信
Matlab 与stm32单片机之间的串口通信 在我们用stm32做信号处理时,我时常需要用到Matlab对我们采集的数据进行分析,拟合.按照传统的方法,我们一般都会先将数据通过串口助手打印出来,再导 ...
- 手机APP开发之MIT Appinventor详细实战教程(一),利用通过蓝牙控制单片机,以及实现单片机与android设备之间的串口通信
目录 (一)前期软件准备和硬件准备 ( 二 ) 实现的思路和操作原理 ( 三) 具体的操作方法 MIT Appinventor 是编程领域较为受欢迎且适用的编程软件 ,因其操作流程和使用方法简单,一直 ...
- 单片机 多机通讯c语言,单片机多机串口通信.doc
单片机多机串口通信 摘要 本文详细介绍了基于RS-485总线的单片机与多台单片机间的串行通信原理.实现方法和相应的通信硬件.软件设计.该设计是由单片机与单片机组成的主从控制系统,其中单片 关键词: 单 ...
- 单片机红外通信c语言,基于C语言的计算机与多单片机红外无线串口通信的实现.doc...
基于C语言的计算机与多单片机红外无线串口通信的实现 基于C语言的计算机与多单片机红外无线 串口通信的实现 黄文亮 信息学院 电子信息工程专业 指导教师 刘传菊 摘要:计算机与一台或多台单片机的通信系统 ...
- STM32平台的USART串口通信
本文目的是编写stm32串口通信程序,实现stm32上电自动循环发送hello LYJ!!!,并可通过上位机控制stm32串口发送与否.通过亲自做一下USART串口通信实验,学习如何使用stm32平台 ...
- 基于串口助手的STM32与计算机进行串口通信
基于串口助手的STM32与计算机进行串口通信 序 言 一. 串口通信概述 二.项目说明 三.实战过程 1)实现stm32向上位机发送字符 2)实现stm32发和收 3)Keil中针对stm32系统进行 ...
- 51单片机入门——UART串口通信
文章目录 前言 1.什么是串行通信 2. USB转串口通信 3. IO 口模拟 UART 串口通信 4 UART串口通信的基本应用 4.1 通信的三种类型 4.2 UART模块 4.3 UART 串口 ...
- 树莓派与电脑之间的串口通信编程
树莓派与电脑之间的串口通信编程 数据通信的三个方式介绍 单工通信 半双工通信 全双工通信 串口通信 编程步骤 数据通信的三个方式介绍 单工通信 只支持数据在一个方向上传输,又称为单向通信.如无线电广播 ...
- 基于51单片机的双机串口通信排队叫号系统(LCD显示)设计
基于51单片机的双机串口通信排队叫号系统(LCD显示)设计 1 开发环境 视频讲解 2 功能说明介绍 3 仿真图 4 程序 5 原理图 6 视频讲解 7 设计报告 7.1 设计目的 7.2 设计要求及 ...
最新文章
- 地区省份城市sql信息
- 分类(category)是门学问
- shell获取ip的值
- 常用七大经典排序算法总结(C语言描述)
- c++和java哪个好学_【技术科普】C语言和java语言有些什么区别?
- 【观点】Ruby优于Python之处(面向hackers)
- IDEA中使用SQLite数据库
- 使用jQuery.form插件,实现完美的表单异步提交
- idea启动日志在哪里_艹,我的日志被Intellij IDEA 控制台给“吃”了!
- nest 设置密码_如何设置Nest Cam
- Ubuntu 安装 CURL 过程
- AI笔记: 数学基础之齐次与非齐次线性方程组解的结构定理
- Vue在线客服系统【开源项目】
- 大名鼎鼎的SEO,有哪些发展方向?
- 存储过程常用开关(set命令解析)
- Django 基于类的通用视图详解
- 从SDN鼻祖Nicira到VMware NSX 网络虚拟化平台的简单探讨
- 目标检测 TP\FP\FN\TN如何理解?FN和TN无意义
- 解决安卓手机不能看chm文件的一种思路
- 24V转5V,24V转3.3V稳压芯片的电路图,PCB和BOM
热门文章
- JAVA 爬虫 抖音视频
- 【数字信号】基于DTMF双音多频电话拨号仿真(电话号码归属地匹配功附matlab代码...
- 数据结构 作业答案 第1章 绪论
- [iOS @2x @3x pt px 分辨率]
- 应届生改派、派遣证、报到证、户口接收函(进京函)--人社部渠道
- 视频教程-PMP@第六版项目管理视频课程项目整体管理-项目管理
- 【React】React全栈脚手架搭建-苹果篮子示例
- 生成一个袁金龙的2022年年度报告
- ACM-ICPC 2018 南京赛区网络预赛(ABCDEFGHIJKL所有题题解大全)
- 浅谈电气防火限流式保护器在火灾预防中的应用