赤菟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(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...
随机推荐
- Vue 注册全局组件的方式
一.语法:Vue的实例.component("组件名称",组件) 1.方式一:这个组件就是 vue文件 import { createApp,h } from 'vue' //引入 ...
- 安卓逆向HOOK 3.系类HOOK
package xphok; import java.lang.reflect.Method; import java.security.MessageDigest; import java.text ...
- 代码随想录算法训练营day04 | leetcode
基础知识 记录一下栈实现及操作 public class ArrayDequeStack { public void main() { ArrayDeque stack = new ArrayDequ ...
- 代码随想录算法训练营day01 | leetcode 704/27
前言 考研结束半个月了,自己也简单休整了一波,估了一下分,应该能进复试,但还是感觉不够托底.不管怎样,要把代码能力和八股捡起来了,正好看到卡哥有这个算法训练营,遂果断参加,为机试和日后求职打下一个 ...
- Integer使用==比较的问题
Integer使用==比较的问题 new一个对象 public Integer(int value) { this.value = value; } 自动装箱 public static Intege ...
- mongodump导出mongodb中的数据
如果数据量小,用navicat或者其它客户端可以很方便的导出数据,但如果数据量比较大的话,建议用mongo官方工具 mongodump 下载地址: https://www.mongodb.com/tr ...
- Android Studio连接SQLlite
1. MainActivity.java package com.example.dbproject;import android.database.sqlite.SQLiteDatabase;imp ...
- thinkphp5框架使用总结
因为采用了mvc模式,所以理解上为了简便,把控制中心作为一个浏览对象去处理,其他不要去考虑只把它们当做附属物 一.路径访问方式 http://网址/index.php/模块/控制器/操作.html 其 ...
- ASP.NET Core 部署在Docker容器当中(1)
一.前言 在公司新项目中,果断选择使用asp.net core,通过实践学习一系列技术栈:docker.docker-nginx.docker-compose.Jenkins,本文主要是介绍如何将项目 ...
- replace 常用积累
1.替换有,或者.为: obj.keyword.replace(/,|./g,';') 2.替换元素标签类似于<em>文字</em>这种 let name=item.name. ...