赤菟V307与Matlab的串口通信
赤菟V307与Matlab的串口通信
赤菟V307(CH32V307)是一款RISC-V内核的MCU,搭载的是沁恒自研RISC-V内核青稞V4F,最高主频144MHz,支持单精度浮点运算(FPU)。
Matlab支持串口通信,可以接收串口的数据,并进行数据处理,本文主要讲解赤菟V307与Matlab的串口通信,并进行快速傅里叶变换。
1、定义串口协议
为了更好的接收并处理串口数据,需要定制一定的传输协议:
每个数据以‘,’(ASCII:44)结束
整组数据以‘$’(ASCII:36)结束
浮点统一放大到整数
2、赤菟V307端程
赤菟V307发送一段信号,该信号由幅度为0.4的直流信号+幅度为0.5,频率为50Hz的信号+幅度为,频率为100Hz的信号+幅度为0.5,频率为150Hz的信号组成,采样率为1000Hz,一共发送1000个采样值。
#define PI 3.14
#define FS 1000 //Sampling frequency
#define L 1000 //Length of signal
#define MAGNI 1000000 //data magnification
int main(void)
{
Delay_Init();
USART_Printf_Init(115200);
// printf("SystemClk:%d\r\n",SystemCoreClock);
for(uint16_t i=0;i<L;i++)
{
//printf("%d,",(int32_t)(0.5*cos( 2*PI*150* i/FS)*MAGNI));
// f = 50 f = 100 f = 150
printf("%d,",(int32_t)( ( 0.4 + 0.5*cos( 2*PI*50* i/FS)+ 1*cos( 2*PI*100* i/FS)+0.5*cos( 2*PI*150* i/FS))*MAGNI));
}
printf("$\r\n");
while(1);
}
3、Matlab端程序设计
matlab支持串口接收数据,根据定义的协议,解析数据,支持正负整数。具体代码如下:
close all;
Fs = 1000; % Sampling frequency
L = 1000; % Length of signal
Magin = 1000000; % Data magnification
delete(instrfindall);
recData = zeros(1,20);
calcData = zeros(1,L);
delete(instrfindall);
scom = serialport("COM3",115200);
i = 1;
j = 1;
temp = 0;
while 1
recData(i) = read(scom,1,"uint8");
if recData(i) == '$'
break;
end
%数字
if recData(i)>='0' && recData(i)<='9'
recData(i) = recData(i)-'0';
end
if recData(i) ==','
%负数
if recData(1) == '-'
temp = 0;
for k=2:1:i-1
temp = temp + recData(k)*10^(i-k-1);
end
calcData(j) = temp*(-1)/Magin;
%正数
else
temp = 0;
for k=1:1:i-1
temp = temp + recData(k)*10^(i-k-1);
end
calcData(j) = temp/Magin;
end
i = 0;
j = j + 1;
end
i=i+1;
end
delete(scom); %
%plot(calcData);
Y = fft(calcData,L);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
plot(f,P1)
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')
drawnow;
4、结果验证
Matlab接收数据显示如下:

经过Matlab的快速傅里叶变换结果如下:

打通了赤菟V307和Matlab之间的“任督二脉”,后面可以愉快的验证赤菟V307的FFT以及相关的数字信号处理算法啦~~~~
赤菟V307与Matlab的串口通信的更多相关文章
- PC和FPGA间的串口通信实现
应用笔记 V1.0 2015/03/26 PC和FPGA间的串口通信实现 概述 本文将介绍PC和FPGA间的串口通信实现的基本思路和Verilog代码,对于通信而言,收发双方都要有相应的控制. ...
- .NET 串口通信
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...
- BluetoothChat用于蓝牙串口通信的修改方法
本人最近在研究嵌入式的串口通信,任务是要写一个手机端的遥控器用来遥控双轮平衡小车.界面只用了一个小时就写好了,重要的问题是如何与板子所带的SPP-CA蓝牙模块进行通信. SPP-CA模块自带代码,在这 ...
- Win10 IoT C#开发 4 - UART 串口通信
Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...
- 使用Java实现简单串口通信
最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...
- Java 串口通信
在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件. (1)win32com.dll 要放在jdk\jre\bin目录下. (2)comm.jar 和javax.comm.p ...
- .NET 串口通信中断接收,包含0X1A(作为EOF)
.NET串口通信中将`0X1A`当做EOF处理,.NET接收到EOF会触发一次接收中断,此时事件形参`SerialDataReceivedEventArgs`值为枚举 `Eof`,其他为`Chars` ...
- STC12C5A60S2 双串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...
- mfc 调用Windows的API函数实现同步异步串口通信(源码)
在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...
- VS2008基于对话框的MFC上位机串口通信(C++实现)简单例程
首先,在 vs2008 环境下创建 MFC 运用程序 设置项目名称为 ComTest(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...
随机推荐
- Centos7下areaDetector IOC的编译
准备: Centos7ministall的系统: root权限下: yum install -y epel-release yum install -y git wget gcc gcc-c++ au ...
- 把Excel自动转换Json格式
Excel表格转JSON 在实际工作中,我们常常使用Excel记录各种数据,但在各种应用系统传输数据却使用JSON格式,这就需要把Excel转为JSON.如果能把数据转换传输过程自动化就更完 ...
- (原创)【B4A】一步一步入门04:编译模式、打包为APK、私钥签名
一.前言 上篇 (原创)[B4A]一步一步入门03:APP名称.图标等信息修改 中我们将APP做成了标准的样子. 本篇文章会讲解如何将程序打包成APK文件以分发,同时讲解如何制作私钥并签名APP,以用 ...
- Python自动合并Word文件同时添加分页符的方法
本文介绍基于Python,实现对多个Word文档加以自动合并,并在每次合并时按要求增添一个分页符的方法. 现有多个Word文档文件,需将其按名称顺序合并为一个新的Word文件,且需保证每一次合 ...
- Jquery 点击弹窗,将弹窗内容赋值到各个项demo
<div class="qb"> <div class="box"> <div class="qtt f_16 fbd& ...
- 【深入浅出 Yarn 架构与实现】4-5 RM 行为探究 - 启动 ApplicationMaster
本节开始,将对 ResourceManager 中一些常见行为进行分析探究,看某些具体关键的行为,在 RM 中是如何流转的.本节将深入源码探究「启动 ApplicationMaster」的具体流程. ...
- vs2019 代码片段管理
工具/代码片段管理 上面地址是vs内部代码片段,可以参考写自定义片段 写好的模板保存为.snippet文件,放到固定文件夹中,然后使用添加,直接找到文件夹添加即可 <?xml version=& ...
- SQLServer 编程总结
case的用途 case语句有四个关键字,缺一不可,分别是:case when then end,另外还有一个else.case 后面跟字段名(当在when后面出现字段名时,case里不能写出来),w ...
- sql_server数据库
问题:如何在SQL SERVER中合并时间和日期? 解决方法1:使用+合并时间日期让我们运行以下命令:SELECT CAST(字段名 AS DATETIME) + CAST(字段名 AS DATETI ...
- 马哥Linux学习
VNC virtual network computing 共享桌面协议