赤菟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(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...
随机推荐
- 【源码】RapidJSON 源码剖析(0):关于 RapidJSON
RapidJSON 源码剖析(0):关于 RapidJSON 为什么会有<RapidJSON 源码剖析>系列博文? 之前转载的 Technique to Read Source Code ...
- JZOJ 4313. 【NOIP2015模拟11.4】电话线铺设
题目 思路 先求只用王牌电缆的最小生成树 再选一条李牌电缆替换王牌电缆 使答案最小就完了 假如要替换的李牌电缆两端点是 \(u,v\) 那么生成树中 \(u \Longrightarrow lca(u ...
- JZOJ 1038. 【SCOI2009】游戏
题目 自己找 思路 大致过程见 JZOJ 3232. [佛山市选2013]排列 而本题改成种类数 那么我们不需要 \(ln\) 这个东东 直接转移 \(f\) 改成种类数 对于可能转移过来的状态,直接 ...
- Mybatis优化
Mybatis优化 log4j日志显示 在pom.xml中的<dependencies>标签中加入 <!--log4j日志 --> <dependency> < ...
- k8s网路策略
Network Policy(网络策略) 默认情况下,k8s集群网络是没有任何限制的,Pod可以和任何其他Pod通信,在某些场景下需要做网络控制,减少网络面的攻击,提高安全性,就会用到网络策略(Net ...
- JavaSE总结(1)
Java发展历史.HelloWorld.常量.变量类型转换.运算符.方法(函数)1.jdk版本: jdk1.2---J2EE/J2SE/J2ME jdk1.5---JavaSE/JavaE ...
- csp201503-1(矩阵逆时针九十度旋转)
//矩阵变换的题,要找出两个矩阵各元素横纵坐标之间的关系 #include<bits/stdc++.h> using namespace std; int main() { int a[1 ...
- vue实现图片上传且实时预览
<div class="up-img"> <div class="imgList"> <ul> <li v-for=& ...
- Mac 远程 屏幕共享 screen sharing
屏幕共享可以用于在局域网中控制另一台 Mac,也能通过 iMessage 在广域网环境下创建彼此的连接,用来指导和解决问题非常方便. 通过 Apple ID 来创建连接 1,Command+空格键 ...
- JavaScript 静态方法
JavaScript 静态方法 静态方法是使用 static 关键字修饰的方法,又叫类方法,属于类的,但不属于对象,在实例化对象之前可以通过 类名.方法名 调用静态方法. 静态方法不能在对象上调用,只 ...