单片机
返回首页

STM32 f407 3ADC 交替 实现 7.2Msps 采样率

2020-03-16 来源:eefocus

想用CUBE配置然后用HAL库实现F407 3ADC交替采样实现7.2MSPS采样率,网上查了很多资料,3adc交替采样的资料很少,有用寄存器配置的,但是用HAL库的基本上没有找到,只能自己摸索。


首先是Pinout,值得注意的是3ADC 交替通常用到一样的通道,我用的是0通道。

ADC Pinout

然后是时钟的配置ADC最快时钟是36MHz,所以系统最快只能在144MHz,要做相应的更改

ADC Clock tree

然后是ADC设置,这里面要选择模式是Triple interleaved Mode, DMA mode 2, delay设置为5cycle,ADC采样3cycle,Clock 要选择div2,这样能才能达到最快速度。

ADC Setting

ADC2,3 配置相类似就略过

然后是DMA配置,只需要配置ADC1的DMA就可以了。

长度要选WORD, mode注意了我选的是Normal,因为选了circule 之后数据不对,估计是中断时时候数据还没有处理完数据就已经被覆盖了。没有细究。

DMA Setting

然后主程序里面添加以下关键代码


HAL_ADC_Start(&hadc3);

HAL_ADC_Start(&hadc2);

HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)ADC123_Buff, 1024);


DMA中断处理数据,注意数据的高低字节,一个WORD里面有2个ADC数据。


void DMA2_Stream0_IRQHandler(void)

{

  if(DMA2->LISR & 0x00000010) //完成中断

  {  

     DMA2->LIFCR |= 0x00000010;  //clear flag

     //data processing...

  }

}


但是这样的话DMA搬一次之后就停止了,尝试过很多种方法,函数都无法让DMA重新传输,最终发现通过反初始化ADC1再初始化ADC1,然后开ADC2,ADC3,然后开交替ADC可以实现,这样就可以等数据处理完了之后开始下一次的DMA 传输。


通过对信号发生器100khz信号的采样测试,证实能达到7.2MSPS,丝毫不差!!!

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章