STM32配置ADC2(DMA)进行采集 DAC 输出-2

这篇具有很好参考价值的文章主要介绍了STM32配置ADC2(DMA)进行采集 DAC 输出-2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0. 一定要先看上一节:STM32配置ADC2(DMA)进行采集 DAC 输出-1

1. 实验目标

在上一节的基础上,我们把 DAC(三角波)给集成进来,实现按下按键输出三角波,通过串口发送数据给电脑,分析然后画出电压的波形并且展示出来
开发板:正点原子探索者STM32F407ZG

2. STM32部分

2.1 DAC部分

这里我们采用实验22-2 DAC输出三角波实验的例程,查看主函数找中和 DAC 相关的代码,发现下图红框中的函数只出现在了 DAC.c 中,于是我们将 DAC.c 添加到上一节的项目中,此时还不够,因为我们采用的是 HAL 库编程,还需要引入官方提供的和 DAC 相关的库函数才可以使用。
STM32配置ADC2(DMA)进行采集 DAC 输出-2
全部添加完成后,文件结构如下图所示
STM32配置ADC2(DMA)进行采集 DAC 输出-2
此时我们分析一下代码,发现在需要输出三角波的时候,只需要调用dac_triangular_wave即可,于是我们可以把这个函数放在按键的中断处理中去。

2.2 按键外部中断

和上面类似的方式打开实验4 外部中断实验,然后添加相关的文件到项目中,如下图所示
STM32配置ADC2(DMA)进行采集 DAC 输出-2
然后在按键中断函数部分,我们需要先开启 ADC 的采集,然后发送三角波,这样可以最大程度的保证采样的完整,下面是完整代码
STM32配置ADC2(DMA)进行采集 DAC 输出-2

2.3 串口发送

串口集成的过程不再赘述,这里主要是在 ADC 使用 DMA 采集到指定的点数后,会产生一次DMA中断,我们可以在 DMA 中断函数中将采集到的数据发送给电脑,下面是完整代码
STM32配置ADC2(DMA)进行采集 DAC 输出-2
到这里STM32部分就已经完成了,再放上一个主函数的图,主要就是各种初始化部分
STM32配置ADC2(DMA)进行采集 DAC 输出-2

3. Python处理程序

#%%
import numpy as np
import matplotlib.pyplot as plt
#%%

yt = np.array([])
file_obj = open("ADCdata.txt", encoding="utf-8")
lines = file_obj.readlines()
#%%
for line in lines:
    line = line.replace("\n", "")
    if len(line) :
    # print(line.replace("\n", "").split(' ')[1])
    # print(line.replace("\n", "").split(' ')[0])
        try:
            # original_vol = int(line.replace("\n", "").split(' ')[1])*256+int(line.replace("\n", "").split(' ')[0])
            # real_vol = original_vol * (3.3 / 4096); 
            real_vol = int(line) * (3.3 / 4096); 
            yt = np.append(yt,real_vol)
            # print(real_vol)
        except Exception as e:
            print(e)
print(yt)
file_obj.close()
# %%
xt = np.arange(0,yt.shape[0],1)
fig1 = plt.figure(figsize=(8, 6))
plt.plot(xt,yt,'.')
plt.plot(xt,yt)
plt.show()
# %%

yt = yt-np.mean(yt)
fig2 = plt.figure()
plt.plot(xt,yt,'.')
plt.plot(xt,yt)
yfft = np.fft.fft(yt)
# plt.plot(abs(np.fft.fftshift(yfft)))
fig3 = plt.figure(figsize=(8, 6))
xf = np.linspace(0,yfft.shape[0]*10000,140)
plt.plot(xf,20*np.log10(abs((yfft))))
# plt.plot((yfft))
plt.show()
# %%

4. 具体操作流程

将 STM32 的 PA4(DAC) 和 PA5(ADC2) 用杜邦线连接起来,然后按下 key0 根据我的程序是会发出两个三角波,按下 key1 是会发出 10 个三角波。我们先打开 STM32 然后打开串口助手连接到 STM32 ,按下 key0 后串口会收到如下的数据STM32配置ADC2(DMA)进行采集 DAC 输出-2
我们把这里的数据全部给拷贝到ADCdata.txt中,然后运行上面的 Python 程序可以得到如下的结果(因为我设置的采样点很多,所以后面的都是噪声,但是确实是有两个三角波的波形,于是实验是成功的)
STM32配置ADC2(DMA)进行采集 DAC 输出-2
如法炮制,我们可以得到按下 key1 的波形,如下图所示,我们可以清楚的看到有10个三角波,实验成功
STM32配置ADC2(DMA)进行采集 DAC 输出-2

5. 完整的工程代码和实验数据可以在这里进行下载

STM32配置ADC2(DMA)进行采集 DAC 输出文章来源地址https://www.toymoban.com/news/detail-430232.html

到了这里,关于STM32配置ADC2(DMA)进行采集 DAC 输出-2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeMX教程18 DAC - DMA输出自定义波形

    开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 一台示波器 逻辑分析仪nanoDLA 使用STM32CubeMX软件配置STM32F407开发板的 DAC OUT1实现输出0-3.3V 周期为12.8ms的正弦波形 由于STM32F407的两个DAC输出通道只能自动

    2024年01月19日
    浏览(50)
  • STM32 ADC采集 DMA中断处理

    //============================================ //函数名称:ADC1_Mode_Config(void) //功能描述:配置ADC1的工作模式为MDA模式 //输入:无 //输出:无 //============================================ void ADC1_Mode_Config(void) {         DMA_InitTypeDef DMA_InitStructure;         ADC_InitTypeDef ADC_InitStructure;              

    2024年02月14日
    浏览(47)
  • STM32Cubemx——ADC采集+DMA传输

    STM32F407VE核心板 STM32Cubemx 版本 6.0.1 Keil 版本 5.31 杜邦线 ST-Link 12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左

    2023年04月24日
    浏览(57)
  • STM32-单通道ADC采集(DMA读取)实验

    关于ADC的一些原理和实验我们已经有了2篇笔记,链接如下: 关于ADC的笔记1_Mr_rustylake的博客-CSDN博客 STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客 实验要求:通过ADC1通道1(PA1)采集电位器的电压,并显示ADC转换的数字量和换算后的电压值。 我们通过下表可以知道DMA1通道

    2024年02月16日
    浏览(50)
  • STM32-微项目10-ADC多通道采集+DMA数据转移

    一、微项目实现目标: 由于ADC多通道采集在规则组中只有一个寄存器CR,实际上在多通道采集时刻,需要把每一个同都的数据及时传出,否则上一个通道的数据会被当前通道的数据给覆盖掉。 二、微项目硬件配置需求:  stm32F103C8T6核心板一块 0.96寸OLED显示,用于显示计数 三

    2024年02月16日
    浏览(58)
  • STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx

    本文主要讲解定时器触发ADC去采集交流信号,DMA把数据搬移到内存。 所需工具: 开发板:STM32F103C8T6 STM32CubeMX IDE: Keil-MDK 相关文章: STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx(二) STM32cubemx ADC+TIM+DMA超频采样 ADC+TIM+DMA采集交流信号是电赛中使用范围最为广泛的一个技术。这个模

    2024年02月03日
    浏览(49)
  • 定时器(PWM输出)触发ADC采样(DMA)——STM32CubeMX

    我用的单片机是STM32F103CBTX 定时器:使用PWM输出的模式 ADC:使用DMA的模式 (在不使用DMA的情况下,定时器控制ADC进行数据采集只能是单通道!如果开启了多通道,读取到的ADC采集值只会是最后一个通道的值!所以,要想使用定时器控制ADC采集 多通道 , 必须使用DMA !)  看

    2024年04月10日
    浏览(50)
  • 【STM32F407 ADC+DMA采集压力变送器数据(HAL库)】

    之前项目中需要对麦克传感器的mpm480隔爆压力变送器(4-20ma输出)的数据进行实时采集,使用STM32F407作为控制器,使用信号转换模块将压力变送器4-20ma的输出转换为0-3.3v的信号量,输入到STM32F407板子的ADC1的通道10,并使用DMA2通道0数据流0将采集的多个值从外设直接存入存储器

    2024年02月16日
    浏览(64)
  • STM32采集4-20mA传感器,以及ADC+DMA出现的问题及解决

    STM32只能采集0-3.3V的数据,如果需要采集0-5V和4-20mA的数据需要在电路中进行相关设计: 0-5V采集电路 4-20mA采集电路 本文主要讲述4-20mA采集电路采集 电路输入4-20mA,作用在120欧姆电路(后面面是电压跟随电路,并联),对应输入电压0.48~2.4V STM32103ZET6为例,内部ADC采集12bit,0

    2024年04月12日
    浏览(33)
  • STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

    12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定

    2024年02月06日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包