STM32F4 HAL库使用DMA进行ADC采样实时发送波形到串口显示(包含傅里叶变换)
1.总体逻辑
按下STM32F4的KEY0按键,通过外部中断的方式对按键进行检测,然后开启一次带DMA的固定点数的ADC采集,采集完成后在DMA的中断发送采集到的数据,然后清空数据区准备下一次的按键中断。电脑接受到串口数据后对数据进行简单处理和傅里叶变化,然后实时显示在电脑上。
开发板:正点原子探索者STM32F407ZG
2.STM32
源工程文件
可以拿着正点原子的官方例程进行修改,这里只展示部分重要代码
1.外部中断处理函数

DMA传输完成中断函数

DMA缓存区大小设置
在ADC.h中设置

主函数

采样率的计算
目前是21M的时钟,一个时钟周期是0.047us,采集3个周期,转化12.5个周期就是15.5个周期
采样时间:0.047x15.5=0.7285us
采样率为:1/0.714=1.37268M
理论最高采集0.6863M信号,即686.3K信号
3.Python实时显示
这里的傅里叶变化只会显示最后的 POINT 个点的傅里叶变化情况
import serial
import matplotlib.pyplot as plt
import numpy as np
import time
LINE = 1 # 是否用线的方式连接
OFFSET = 1 # 是否减去偏置值
POINT = 140 # 这里设置的大小和STM32中DMA缓存区的大小要一致count = 0
# 设置画布大小
fig, (ax1, ax2) = plt.subplots(1, 2)
line1, = ax1.plot([], [])
line2, = ax2.plot([], [])
ax1.set_xlim(0, 100)
ax2.set_xlim(0,POINT*10000)
ax1.set_ylim(0, 5)
ax2.set_ylim(0, 100)
ax1.set_title('Time Domain')
ax2.set_title('Frequency Domain')# 初始化数据
x = []
y = []
yfft = []
xfft = np.linspace(0,POINT*10000,POINT)# 创建曲线对象
if LINE:line1, = ax1.plot([], [])line2, = ax2.plot([], [])
else:line1, = ax1.plot([], [],'.')line2, = ax2.plot([], [],'.') # 开始绘图
start_time = time.time()
ser = serial.Serial('COM3', 115200) # 根据自己的情况进行更改# 循环读取串口数据并绘图
while True:count+=1# 读取串口数据if(ser.inWaiting()):line = ser.readline()ser.flush()if len(line) : real_vol = int(line) * (3.3 / 4096)print(real_vol)else:real_vol = 0# 实时更新x轴t = time.time() - start_time# 更新数据x.append(t)y.append(real_vol)if count>POINT:#FFTtemp = []xfft = np.linspace(0,POINT*10000,POINT)if OFFSET:yfft = np.fft.fft(y[-POINT:]-np.mean(y[-POINT:]))else:yfft = np.fft.fft(y[-POINT:])line2.set_data(xfft, abs(yfft))# 更新曲线数据line1.set_data(x, y)ax1.set_xlim(max(0, t - 5), t)# 重新绘制图形fig.canvas.draw()fig.canvas.flush_events()plt.pause(0.01) # 控制循环速率
4.结果展示
输入信号:400KHz正弦波,幅度1V,偏置1V
显示的结果为,去平均值后(无直流信号)


相关文章:
STM32F4 HAL库使用DMA进行ADC采样实时发送波形到串口显示(包含傅里叶变换)
1.总体逻辑 按下STM32F4的KEY0按键,通过外部中断的方式对按键进行检测,然后开启一次带DMA的固定点数的ADC采集,采集完成后在DMA的中断发送采集到的数据,然后清空数据区准备下一次的按键中断。电脑接受到串口数据后对数据进行简单…...
ChatGPT 平替天花板:HuggingFace 版 ChatGPT 来了,无需魔法无需等待直接起飞 ~
文章目录 ChatGPT 平替天花板:HuggingFace 版 ChatGPT 来了,无需魔法无需等待直接起飞 ~HuggingFace 简介HuggingChat 登场展望 ChatGPT 平替天花板:HuggingFace 版 ChatGPT 来了,无需魔法无需等待直接起飞 ~ 二话不说上链接 htt…...
桐乡学会计实操—小规模纳税人征收率的汇总帖来啦!
上元会计—会计实操—小规模纳税人征收率的汇总帖来啦!一文了解 小规模纳税人发生应税行为适用简易计税方法计税。那么小规模纳税人增值税的征收率到底有几档?很多人以为小规模纳税人适用的征收率只有3%,但是有没有其他征收率呢,…...
权威学者、企业CFO荟聚上海国家会计学院,共探「智能会计 价值财务」
4月21日,由用友主办的「智能会计 价值财务」2023企业数智化财务创新峰会在上海国家会计学院圆满举办。学院权威教授、业内专家与来自央国企、行业领先企业的财务先锋,线下云端共聚一堂,数万人共探大型企业财务数智化的全新价值主张。 会议伊始…...
根据cadence设计图学习硬件知识day06 了解一些电源转化芯片和 稳压器 和 开关芯片
1. TPL920 (高精度线性稳压器) 1.1.TPL920 介绍 TPL920系列产品是2A大电流、6μVRMS低噪声、高PSRR、高精度线性稳压器,通常具有在2A负载条件下的110 mV超低电压降。这TPL920系列产品同时支持固定输出电压范围从0.8伏到3.95伏,输出电压可调范围为0.8V至…...
简单理解内存分页机制
文章目录 1.CPU寻址方式2.段式内存访问的缺点3.80386两级页表4.PAE三级页表5.x64四级页表6.虚拟内存 思考一个问题:如果没有这样的分页机制时应用程序是怎么访问物理内存地址? 1.CPU寻址方式 Effective Address Base (Index * Scale) Displacement …...
如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量
如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量 提高三维模型从OSGB格式转换为3DTILES格式的转换速度和数据质量,可以从以下几个方面进行优化: 1、选用高效的转换工具:选择高效的转换工具是提高转换速度和数据质量的关键。目前市…...
智现未来面试(部分)
容器化有哪些好处和坏处? 部分Answer by newBing:容器化的好处有很多,包括: 可移植性:应用程序容器会创建一个从主机操作系统提取出来的可执行软件包,使得应用程序可以在不同的环境中运行,而不需要重新配置…...
最值得学的编程语言是哪个?
如果让我推荐的话,我肯定首选是python啦! 编程语言是一个计算机的概念,在我们有了计算机以后,想让它帮助我们做事情,就要通过计算机语言和它进行对话、交互,计算机语言能够被计算机所执行,完成…...
研读Rust圣经解析——Rust learn-16(高级trait,宏)
研读Rust圣经解析——Rust learn-16(高级trait,宏) 高级trait关联类型Type为什么不用泛型而是Type 运算符重载(重要等级不高)重名方法消除歧义never typecontinue 的值是 ! 返回闭包 宏自定义宏(声明宏&…...
html,Javascript,css前端面试题汇总免费
html,Javascript,css前端面试题汇总免费 下载地址: html,Javascript,css前端面试题汇总免费.docx下载—无极低码 一,html与css 1,页面导入样式,使用link与import有什么区别? (1) 从属关系:link是html标签…...
HFSS—RCS测量
RCS 引言单位仿真步骤新建工程建立待测物体模型设置边界条件设置入射波添加分析可行性分析和仿真结果输入引言 雷达散射截面是隐身技术中的重要指标。用于衡量目标物体在电磁波照射下产生回波强度,也就是散射的强度。 一方面,雷萨散射截面可以用入射电磁场的强度和散射电磁场…...
QUARTZ 石英框架
QUARTZ 石英框架 1.Quartz的概念 Quartz就是一个基于Java实现的任务调度框架,用于执行你想要执行的任何任务。 Quartz是OpenSymphony开源组织在Job scheduling(定时调度)领域的开源项目,它可以与J2EE和J2SE应用程序相结合也可以…...
基于centos7:Harbor-2.7.2部署和安装教程
基于centos7:Harbor-2.7.2部署和安装教程 1、软件资源介绍 Harbor是VMware公司开源的企业级DockerRegistry项目,项目地址为https://github.com/vmware/harbor。其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry…...
Windows上使用CLion配置OpenCV环境,亲测可用的方法(一)
一、Windows上使用CLion配置OpenCV环境,亲测可用的方法: Windows上使用CLion配置OpenCV环境 教程里的配置: widnows 10 clion 2022.1.1 mingw 8.1.0 opencv 4.5.5 Cmake3.21.1 我自己的配置: widnows 10 clion 2022.2.5 mingw 8.…...
代码随想录算法训练营第四十三天
代码随想录算法训练营第四十三天| 1049. 最后一块石头的重量 II,494. 目标和,474. 一和零 1049. 最后一块石头的重量 II494. 目标和474. 一和零 1049. 最后一块石头的重量 II 题目链接:最后一块石头的重量 II 重点: 本题其实就是…...
如何在 Mac 和 Windows 上恢复未保存或删除的 PDF
Adobe Acrobat PDF 是一种常用格式。我们可能会在不同的 PDF 编辑器中编辑和保存 PDF 文件。但是,如果不保存 PDF 文件或不小心将其删除,那将是一种令人不安的体验。 保持冷静!首先,尽可能多地停止运行应用程序,这样它…...
windows开机不自动挂载磁盘的方法
本人的电脑系统为win11 写作时间20230430 开机不挂载某块磁盘的理由 1.本人电脑上有个仓库盘是机械硬盘,并不是每次开机都要用到,开机不挂载也许有利于增加数据盘的寿命 2.挂载了数据盘,有时候打开文件页面会比较慢,不够丝滑 …...
5 款 AI 老照片修复工具的横向比较
在大语言模型和各类 AI 应用日新月异的今天,我终于下定决心,趁着老照片们还没有完全发黄褪色、受潮粘连抑或损坏遗失,将上一代人实体相册里的纸质胶卷照片全部数字化,并进行一次彻底的 AI 修复,好让这些珍贵的记忆能更…...
2023企业服务的关键词:做强平台底座
作者 | 曾响铃 文 | 响铃说 4月下旬,软件行业相关的大会紧锣密鼓地开了好几场,不仅有政府主办的2023中国国际软件发展大会、中国软件创新发展大会,也有用友、浪潮等服务商举办的品牌活动,让软件业的话题一直保持热度。 以用友为…...
OpenClaw浏览器自动化实战:百川2-13B驱动的智能信息检索系统
OpenClaw浏览器自动化实战:百川2-13B驱动的智能信息检索系统 1. 为什么需要自动化信息检索 作为一名技术研究者,我每天需要跟踪大量行业动态和论文进展。传统的手动搜索-阅读-摘录流程效率极低,经常出现以下痛点: 重复劳动&…...
ANIMATEDIFF PRO新手避坑指南:常见问题与解决方案全解析
ANIMATEDIFF PRO新手避坑指南:常见问题与解决方案全解析 1. 前言:为什么选择ANIMATEDIFF PRO 如果你正在寻找一款能够生成电影级质量AI视频的工具,ANIMATEDIFF PRO可能是目前最强大的选择之一。基于AnimateDiff架构和Realistic Vision V5.1…...
AcousticSense AI作品分享:识别不同音乐流派的频谱图展示
AcousticSense AI作品分享:识别不同音乐流派的频谱图展示 1. 当AI学会"看"音乐:频谱图里的流派密码 你有没有想过,AI是如何像人类一样理解音乐的?传统方法往往依赖复杂的音频特征提取,而AcousticSense AI选…...
FedProto:跨异构客户端的原型联邦学习实践指南
1. 从零理解FedProto的核心思想 第一次听说FedProto时,我正被一个医疗影像分析项目搞得焦头烂额。五家医院的数据就像五个方言区——同样的病症在CT影像上呈现的特征分布天差地别。传统联邦学习就像让这些医院用各自的方言写报告,再强行翻译成标准语&…...
PyTorch Vision模型微调终极指南:从零到精通的迁移学习实战
PyTorch Vision模型微调终极指南:从零到精通的迁移学习实战 【免费下载链接】vision pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。 项目地址: https://gitcode.com/…...
Java 设计模式・策略模式篇:从思想到代码实现
一、行为型模式 在面向对象的世界里,如何优雅地组织对象间的交互、分配职责,是每一位开发者都会反复思考的问题。直接硬编码交互逻辑固然简单,但当业务复杂度上升、对象协作关系变得错综复杂时,这种方式就会让代码变得僵化、难以…...
如何让鼠标和触控板和平共处:Scroll Reverser实现设备独立控制的效率革命
如何让鼠标和触控板和平共处:Scroll Reverser实现设备独立控制的效率革命 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 在多设备协同办公成为常态的今天࿰…...
别再死记ResNet结构了!用PyTorch手搓一个ResNet-50,从零理解残差连接
从零构建ResNet-50:用PyTorch拆解残差网络的秘密 深度学习领域最令人着迷的突破之一,莫过于残差网络(ResNet)的诞生。2015年,何恺明团队提出的这一架构不仅横扫ImageNet竞赛,更彻底改变了我们对深度神经网络…...
工业质检避坑指南:手把手教你根据数据成本选择异常检测模型(RGB/PCD/多模态实战)
工业质检实战:如何基于数据成本选择最优异常检测方案 在工业质检领域,算法工程师常面临一个现实困境:实验室里刷榜的模型往往需要昂贵的数据采集设备,而工厂产线上可能只有最基础的RGB相机。我曾参与过多个工业质检项目࿰…...
嵌入式开发工具选择与效率提升实践
1. 嵌入式开发者的工作状态与开发工具选择1.1 程序员工作场景分析嵌入式开发者在家庭办公环境中往往表现出独特的工作状态。通过观察典型的工作场景,我们可以总结出几个关键特征:专注度提升:家庭环境减少了办公室干扰,开发者更容易…...
