手树 2023-07-22 10:54 采纳率: 0%
浏览 19

STM32U5单通道ADCDMA配置

以下是我的cubemx配置图,我想做4M系统时钟配置10M采样频率,ADC用的时钟是锁相环2,配置140M。开启ADC电源后,单独使用ADC_start可以从寄存器读取ADC的值,但使用ADC_start_DMA这个就完全不运行,但是主循环里的串口打印一直有,求解(ADC4因为要配置IN16使用了不可完全设置ADC这个选项!)

img

img

在使用了下面开启电源并打开adc dma后,打印adc value的数据


 HAL_PWREx_EnableVddA();
  HAL_PWREx_EnableVddIO2();
  if (HAL_ADCEx_Calibration_Start(&hadc4, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
  {
    /* Calibration Error */
    Error_Handler();
  }
HAL_ADC_Start_DMA(&hadc4, (uint32_t *)&adc_Value, 16);
……
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc4), HAL_ADC_STATE_REG_EOC))
     {     
    for (int i = 0; i < 50; i++)
      printf("%d ", adc_Value[i]);
     }
    printf("\n");

打出来全是空格,表明ADC没转换完成。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-22 12:03
    关注
    • 这篇博客: 【STM32+cubemx】0008 HAL库开发:ADC的四种用法:轮询、中断、DMA、定时器触发中的 4)定时器触发ADC采样 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 顾名思义,就是由定时器设定时间,到点就启动ADC采样,这样可以精确控制采样率。

      首先设置定时器的计时参数,这里设置为1s(可以不开启定时器中断):

      ADC的设置中,要关闭连续转换模式,并且设置为定时器触发:

      这里如果连续转换不关闭,会自动连续运行,不受定时器触发的控制。所以要disable。

      最后,还要开启ADC中断。

      设置好之后就可以生成工程代码了。

      在keil中打开工程,重写ADC中断的回调函数,以指示ADC转换好:

      main函数中添加如下代码,检测是否转换好,并读取AD值回传:

      下载到板子运行,可以看到每1s输出一个ad值,说明实现了定时器触发adc转换的功能。

      好了,这一节的内容基本讲完了。

      欢迎关注我的公众号,可留言“资料”获取相关资料和软件:

    评论

报告相同问题?

问题事件

  • 创建了问题 7月22日

悬赏问题

  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 关于移动机器人坐标计算
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题