大家好,现在需要使用 ADC+DMA采样,每次采样300个数据: HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Sample,300); //开始采样 //转换结束后,关闭ADC void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { HAL_ADC_Stop_DMA(&hadc1); } 现遇到的问题如下: ADC时钟设置为4M或8M时,可以正常采样。但是当ADC时钟设置为12M 或更高时,发现无法进入 HAL_ADC_ConvCpltCallback 中断函数,调试发现只有完成几个数据的转换(ADC_Sample 数组中只有几个ADC数值) 请问可能是什么原因造成?谢谢 |
另外ADC的采样频率也是有最大值的,印象中是5.33MHz。
如果超过了最大值肯定是转换不出结果的。
谢谢
我调试看了,DMA里的CNDTR数值是289,也就是只有(300-289=11)个ADC的数据
谢谢
我用的是STM32L431 ,使用cubeMX给ADC配置时钟频率的 。如果是ADC时钟频率是16M的话, 采样一次按照15个时钟节拍来,那么采样频率是 16/15=1.067 MHz
估计是这个问题,你系统时钟设那么低,是为了省电? 为什么不首先全速运行,80MHz,等功能正常以后再考虑降速省电等问题。
偶然发现,STM32L43x,外设ADC超快,驱动频率最高80MHz!!!!
其他各种STM32都比较低,G431 - 60MHz,H750/F767/F407等等 - 36MHz,F103只有14MHz。
参考这个看一看:
https://github.com/bungernut/STM32_ADCTriggerScope
功耗有要求,所以频率选择了4M ,但ADC工作时,是正常模式,没有进入低功耗模式
嗯,选择4M是为了省电,功耗有要求现在。
我再研究确认下,改下系统频率确认下,谢谢