当前位置:   article > 正文

【STM32+HAL】ADC+DMA采集(单通道+多通道)_stm32对音频信号adc采集

stm32对音频信号adc采集

一、准备工作


有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置

二、所用工具


1、芯片: STM32F407ZGT6

2、STM32CubeMx软件

3、IDE: MDK-Keil软件

4、STM32F4xxHAL库

三、实现功能

ADC采集波形并通过上位机显示(单通道+多通道)

四、单通道ADC

1、HAL库开启ADC通道1  

       配置为软件触发模式

 至此,CUBEMX配置完成

2、main.c

      为方便阅读,下附代码仅保留了关键部分代码,删去了冗长的注释,请读者自行将代码填写在对应位置。

  1. #define SAMP 1
  2. uint16_t adc1[SAMP]={0};
  3. int main(void)
  4. {
  5. /* USER CODE BEGIN 2 */
  6. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
  7. HAL_Delay(300);
  8. /* USER CODE END 2 */
  9. /* Infinite loop */
  10. /* USER CODE BEGIN WHILE */
  11. while (1)
  12. {
  13. /* USER CODE END WHILE */
  14. /* USER CODE BEGIN 3 */
  15. }
  16. /* USER CODE END 3 */
  17. }
  18. /* USER CODE BEGIN 4 */
  19. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) //DMA采集完成中断服务函数
  20. {
  21. HAL_ADC_Stop_DMA(&hadc1);//关闭DMA的ADC采集
  22. printf("%d\r\n",adc1[0]);
  23. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
  24. }
  25. /* USER CODE END 4 */

五、多通道ADC

1、HAL库开启ADC通道1、2、3

Scan Conversion Mode:开启扫描转换模式

Number Of Conversion:设置转换通道为3个

Rank:传入顺序

配置每个Rank的通道号 

2、main.c
  1. #define SAMP 3
  2. uint16_t adc1[SAMP]={0};
  3. int main(void)
  4. {
  5. /* USER CODE BEGIN 2 */
  6. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
  7. HAL_Delay(300);
  8. /* USER CODE END 2 */
  9. /* Infinite loop */
  10. /* USER CODE BEGIN WHILE */
  11. while (1)
  12. {
  13. /* USER CODE END WHILE */
  14. /* USER CODE BEGIN 3 */
  15. }
  16. /* USER CODE END 3 */
  17. }
  18. /* USER CODE BEGIN 4 */
  19. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) //DMA采集完成中断服务函数
  20. {
  21. HAL_ADC_Stop_DMA(&hadc1);//关闭DMA的ADC采集
  22. printf("%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2]);
  23. HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
  24. }
  25. /* USER CODE END 4 */

六、VOFA+上位机配置

至此,只要在主函数中写printf("%d,%d\n",xx1,xx2);即可输出数据

七、巨人之肩

【STM32】HAL库 STM32CubeMX教程九---ADC

ADC采样时间、采样周期、采样频率计算方法

STM32CubeMX学习笔记(8)——ADC接口使用

STM32 DSP库的使用方法

STM32 ADC多通道采集

八、源码提供

资源【STM32+HAL】ADC采集波形实现(单通道+多通道)

九、拓展

因STM32自带ADC仅能采样0-3.3V的电压,无法采集更高的电压值。若要采集更高的电压值,可采取分压电路。

具体详见【STM32+HAL】读取电池电量

十、结语

本人能力有限,代码未必是最优解,若有可改进之处望在评论区留言,采纳有赏~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/737476
推荐阅读
相关标签
  

闽ICP备14008679号