赤菟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的串口通信的更多相关文章

  1. PC和FPGA间的串口通信实现

    应用笔记 V1.0 2015/03/26 PC和FPGA间的串口通信实现   概述   本文将介绍PC和FPGA间的串口通信实现的基本思路和Verilog代码,对于通信而言,收发双方都要有相应的控制. ...

  2. .NET 串口通信

    这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...

  3. BluetoothChat用于蓝牙串口通信的修改方法

    本人最近在研究嵌入式的串口通信,任务是要写一个手机端的遥控器用来遥控双轮平衡小车.界面只用了一个小时就写好了,重要的问题是如何与板子所带的SPP-CA蓝牙模块进行通信. SPP-CA模块自带代码,在这 ...

  4. Win10 IoT C#开发 4 - UART 串口通信

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...

  5. 使用Java实现简单串口通信

    最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...

  6. Java 串口通信

    在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件. (1)win32com.dll 要放在jdk\jre\bin目录下. (2)comm.jar 和javax.comm.p ...

  7. .NET 串口通信中断接收,包含0X1A(作为EOF)

    .NET串口通信中将`0X1A`当做EOF处理,.NET接收到EOF会触发一次接收中断,此时事件形参`SerialDataReceivedEventArgs`值为枚举 `Eof`,其他为`Chars` ...

  8. STC12C5A60S2 双串口通信

    STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...

  9. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

  10. VS2008基于对话框的MFC上位机串口通信(C++实现)简单例程

    首先,在 vs2008 环境下创建 MFC 运用程序 设置项目名称为 ComTest(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...

随机推荐

  1. 【源码】RapidJSON 源码剖析(0):关于 RapidJSON

    RapidJSON 源码剖析(0):关于 RapidJSON 为什么会有<RapidJSON 源码剖析>系列博文? 之前转载的 Technique to Read Source Code ...

  2. JZOJ 4313. 【NOIP2015模拟11.4】电话线铺设

    题目 思路 先求只用王牌电缆的最小生成树 再选一条李牌电缆替换王牌电缆 使答案最小就完了 假如要替换的李牌电缆两端点是 \(u,v\) 那么生成树中 \(u \Longrightarrow lca(u ...

  3. JZOJ 1038. 【SCOI2009】游戏

    题目 自己找 思路 大致过程见 JZOJ 3232. [佛山市选2013]排列 而本题改成种类数 那么我们不需要 \(ln\) 这个东东 直接转移 \(f\) 改成种类数 对于可能转移过来的状态,直接 ...

  4. Mybatis优化

    Mybatis优化 log4j日志显示 在pom.xml中的<dependencies>标签中加入 <!--log4j日志 --> <dependency> < ...

  5. k8s网路策略

    Network Policy(网络策略) 默认情况下,k8s集群网络是没有任何限制的,Pod可以和任何其他Pod通信,在某些场景下需要做网络控制,减少网络面的攻击,提高安全性,就会用到网络策略(Net ...

  6. JavaSE总结(1)

    Java发展历史.HelloWorld.常量.变量类型转换.运算符.方法(函数)1.jdk版本:    jdk1.2---J2EE/J2SE/J2ME    jdk1.5---JavaSE/JavaE ...

  7. csp201503-1(矩阵逆时针九十度旋转)

    //矩阵变换的题,要找出两个矩阵各元素横纵坐标之间的关系 #include<bits/stdc++.h> using namespace std; int main() { int a[1 ...

  8. vue实现图片上传且实时预览

    <div class="up-img"> <div class="imgList"> <ul> <li v-for=& ...

  9. Mac 远程 屏幕共享 screen sharing

    ​ 屏幕共享可以用于在局域网中控制另一台 Mac,也能通过 iMessage 在广域网环境下创建彼此的连接,用来指导和解决问题非常方便. 通过 Apple ID 来创建连接 1,Command+空格键 ...

  10. JavaScript 静态方法

    JavaScript 静态方法 静态方法是使用 static 关键字修饰的方法,又叫类方法,属于类的,但不属于对象,在实例化对象之前可以通过 类名.方法名 调用静态方法. 静态方法不能在对象上调用,只 ...