STM32F4 HAL库使用DMA进行ADC采样实时发送波形到串口显示(包含傅里叶变换)

news2024/11/15 10:41:46

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:
        #FFT
        temp = []
        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
显示的结果为,去平均值后(无直流信号)
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大厂齐出海:字节忙种草,网易爱社交

配图来自Canva可画 随着国内移动互联网红利逐渐触顶,互联网市场日趋饱和,国内各互联网企业之间的竞争便愈发激烈起来。在此背景下,广阔的海外市场就成为了腾讯、阿里、字节、京东、拼多多、百度、网易、快手、B站等互联网公司关注和争夺的重…

算法--前缀和技巧 (蓝桥杯123-灵能传输--求和)

文章目录 什么是前缀和用途什么时候用java的前缀和例题[蓝桥杯 2022 省 A] 求和题目描述思路代码 [蓝桥杯 2021 国 ABC] 123题目描述思路代码 [蓝桥杯 2019 省 B] 灵能传输(蓝桥杯96%,洛谷ac)题目描述思路代码 什么是前缀和 如果一个数组a的元素为 a 1 , a 2 , a 3…

Springboot +Flowable,详细解释啥叫流程实例(一)

一.简介 上一篇中学习了Flowable 中的流程模板(流程定义)的部署问题,这一篇来学习什么叫流程实例。 部署之后的流程模板,还不能直接运行,例如我们部署了一个请假流程,现在 张三想要请假,他就需…

WhatsApp多开攻略,低成本高效率多开账号聊单的方法献上~

WhatsApp多开攻略!低成本高效率多开账号聊单的方法献上~ WhatsApp多开是指在同一台设备上同时登录多个WhatsApp账号,这种技术通常被跨境电商从业者用于在不同的WhatsApp账号之间切换,以便更好地管理跨境电商业务。 图中工具: ss客…

lazada按关键字搜索商品API接口

lazada按关键字搜索商品 API接口,在 lazada上搜索产品,如果只需要搜索单个产品的话,那么直接在搜索框输入“关键字”即可,如果需要多个产品,那么则需要进行关键字扩展。 lazada按关键字搜索商品 API接口分为两部分&am…

AI 这是要杀疯啦!

ChatGPT 是基于 GPT 系列大模型开发出来的一个对话场景的 Demo,它已经让我们见识到了大模型的威力。 但有些开发者的胃口不满足于此,已经开始尝试“突破” AI 的边界了,本文推荐 5 个人工智能的开源项目。其中前两个项目,让人细思…

《港联证券》股票必须持仓多久才能卖?股票买入多久显示持仓?

有的新手股民在炒股的时候,对股票的了解是不多的,就会在网上搜索材料来进行学习,那么股票有必要持仓多久才干卖?股票买入多久显现持仓?港联证券为我们预备了相关内容,以供参阅。 股票有必要持仓多久才干卖&…

ADAS辅助驾驶之:BSD盲区监测功能

摘要: 盲点监测系统从技术上主要分为影像和雷达2种,2种技术路线各有优劣。 目录 1、车辆盲区监测系统的定义 2、车辆盲区监测系统原理 3、车辆盲区监测系统硬件安装及标定 4、车辆盲区监测系统发展 1、车辆盲区监测系统的定义 盲区监测系统&#x…

【算法题】2368. 受限条件下可到达节点的数目

题目: 现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。 给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数…

接到“女儿”求救电话 亲妈差点被AI仿声骗了

听到电话里女儿的求救声,慌乱的母亲差点给“绑匪”打钱,但绑匪是假的,女儿的声音也是克隆的。借助最新的AI技术,骗子只要拿到他人3秒的语音,就能快速复制出一模一样的声音,甚至方言和语气也能模仿。 当人们…

vulnhub之AI-Web-1.0

vulnhub之AI-Web-1.0 一、信息收集 1.主机发现 nmap 172.25.0.0-255发现了靶机IP:172.25.0.13 2.端口扫描 nmap -A -sS -sV -Pn -O -p- 172.25.0.13发现80端口是开放的。 3.目录扫描 sudo dirb http://172.25.0.13/发现了robots.txt文件 在对其进行目录二次…

神奇的饼状图:如何用最简单的方式呈现复杂的数据

简介 饼状图顾名思义就是形如圆饼状的图形,它是一种常用的图表类型,通常用于展示数据的占比关系。饼状图通过将一个圆形区域划分为多个子区域,反应出不同子类数据之间的的对比关系以及子类数据在大类中的百分比。饼状图将一个数据集按照每个…

全景丨0基础学习VR全景制作,平台篇第13章:热点功能-总览介绍

全景丨0基础学习VR全景制作,平台篇第13章:热点功能-总览介绍 大家好,欢迎观看蛙色VR官方——后台使用系列课程! 一、热点功能概览 热点,指在全景作品中添加各种类型图标的按钮,引导用户通过按钮产生更多的…

你知道C语言函数调用的2种方式吗?传值调用 传址调用

本篇博客会讲解C语言函数调用的2种方式,分别是:传值调用和传址调用。这2种函数调用方式有什么区别呢?为什么会有不同的效果呢?分别有哪些用途呢?下面我会一一展开。 区别 传值调用,即通过传递变量的值来调…

4个python内存性能检测工具:memory_profiler、timeit、line_profiler、heartrate的使用案例

这里总结了4个比较好的python性能检测工具,包括内存使用、运行时间、执行次数等方面。 1、memory_profiler查看内存的使用情况 memory_profiler可以用来测量python进程的内存使用情况。可以按行查看内存的使用情况。 memory_profiler 是一个监控进程内存消耗的模…

基于cv2的手势识别-计算机视觉

闲的无聊做的一个小玩意,可以调用你的计算机相机,识别框内的手势(剪刀、石头和布),提供一个判决平台,感兴趣的可以继续完善。 用到的参考小文献: 具体实现结果如下 并且我另写了一个框架平台&…

风雨30年,电子表格惊人跨越,excel用户:表格都能生成软件了

电子表格,绝不是你看到的样子! 你知道电子表格的前世今生吗? 它绝不只是你现在看到Excel或者WPS的模样。 不同的时代,有着不同的样子 DOS时代没有什么“可见可得”。什么都是靠想象力的,就是屏幕上文档的显示和打印…

供应商管理怎么做?供应商管理办法及流程介绍

阅读本文你将了解:1、供应商管理的重要性(供应商管理的痛点);2、供应商管理具体流程;供应商管理系统有什么作用。 一、供应商管理的重要性(供应商管理的痛点) 供应商管理是组织中至关重要的一环…

锂溶液净化和提纯

锂离子电池是一种充电电池,依靠锂离子在正极和负极之间移动来工作,广泛应用在便携式设备、卫星、储备电源、电动汽车等领域,具有替代各种二次电源的潜力。 近年来国家大力提倡和发展的新能源产业,锂离子电池的需求量的不断攀升&a…

三维实景模型在线浏览平台,在线编辑、在线分享各类地理空间数据

很多行业用户在获取了大量的三维实景模型数据后,想要进行在线浏览或者分享给他人查看,以往只能通过人工手动将模型压缩,不但耗时费力,效果还难以达到预期。 其实,只需要通过四维轻云地理空间数据云管理平台就能轻松实…