STM32F4 HAL库控制AD9226:实现高达16MHz采样率的GPIO和DMA技术

文章目录

  • 图形化界面配置
  • 引脚配置
  • 定时器配置
  • 使用TIM8的原因
  • 基本配置
  • PWM的配置
  • DAM配置
  • 程序设计
  • 官方函数的修改
  • 中断回调
  • 主函数
  • 接线
  • 效果和问题
  • 波形跳变问题
  • 最大采样率

  • 这里使用的是STM32F407,主频168M。

    图形化界面配置

    引脚配置

    这里使用GPIOD,需要注意的是,所用的引脚要来自同一个端口。

    定时器配置

    使用TIM8的原因

    在STM32F4里,可以当DMA的触发源同时频率可以达到系统主频的定时器只有高级定时器(TIM8和TIM1)

    基本配置

    让TIM8产生上溢事件的的频率为主频的十分之一。
    开启PWM输出,为ADC提供时钟。

    PWM的配置

    PWM mode2:让PWM上升沿的时候产生一次上溢事件
    Pulse = 5:产生方波
    Fast Mode :加快输出PWM波的引脚的电平反转速度

    DAM配置

    程序设计

    官方函数的修改


    需要注意的是,这里开启DMA的函数(HAL_TIM_DMABurst_MultiReadStart)被我改过
    直接用是用不了的

    函数里面我改了红框的位置,那里原本放的是一个定时器的寄存器地址。

    中断回调

    DMA中断时默认开启的

    主函数

    接线

    AD9226的D11接到STM32的D0,D10接到D1·······以此类推,单片机与ADC上的引脚倒序相接。

    效果和问题

    波形跳变问题

    下图是用AD9226采集1MHz的三角波打点的波形。
    一个周期大约16~17个点,采样率达到要求

    不过在第35个点的位置上,出现了波形跳变,不管我采几次,怎么设置频率,改数组长度,都没有用

    然后我降低了采样率到1M,采集频率更低的信号

    然后波形跳变的问题就消失了
    目前还没找到原因

    最大采样率

    我试过将分频改为9,即采样率为168M的九分之一,依然可以工作,但偶尔会有漏采的情况。
    再高就会工作不稳定。如下图

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32F4 HAL库控制AD9226:实现高达16MHz采样率的GPIO和DMA技术

    发表评论