0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CubeMX配置ADC实现几种方式AD转换

CHANBAEK 来源:博客园-lzh666 作者:博客园-lzh666 2023-02-15 14:02 次阅读

整理CubeMX配置ADC实现几种方式AD转换

(注 : 以STM32F429为例)

1. 轮询方式

HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc); //轮询模式,需放在循环中不断开启
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)       //获取转换结果
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)   /* 此函数只用于轮询模式,用于等待转换完成 */
HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc); //停止转换

(1)配置CumeMX,如下图,选择规则通道,设置好AD转换的模式,不扫描,连续转换。

(2)编程实现

** 2. 中断方式**

HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);//中断模式
 HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc);//中断

(1)配置CubuMX,在轮询的基础上,把中断勾选中,如图:

(2)编程实现:

编写中断回调函数,在里面设置一个标志位。

主循环中判断此标志位,注意需要调用 HAL_ADC_Start_IT。

3、DMA方式多通道转换

HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);//DMA模式
HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);

(1)CubeMX配置,勾选多个通道,然后配置ADC,使能连续转换和扫描模式,使能DMA请求,配置Rank,如下图:

(2)编程实现:

注: 如果没有转换,要注意时钟问题。

  1. 定时器触发+ADC中断实现单通道AD采集

(1)首先要了解,ADC要好几种触发方式,如下,这里我采用TIM8的事件更新来触发AD转换。

#define ADC_EXTERNALTRIGCONV_T1_CC1    0x00000000U
#define ADC_EXTERNALTRIGCONV_T1_CC2    ((uint32_t)ADC_CR2_EXTSEL_0)
#define ADC_EXTERNALTRIGCONV_T1_CC3    ((uint32_t)ADC_CR2_EXTSEL_1)
#define ADC_EXTERNALTRIGCONV_T2_CC2    ((uint32_t)(ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T2_CC3    ((uint32_t)ADC_CR2_EXTSEL_2)
#define ADC_EXTERNALTRIGCONV_T2_CC4    ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T2_TRGO   ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_T3_CC1    ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T3_TRGO   ((uint32_t)ADC_CR2_EXTSEL_3)
#define ADC_EXTERNALTRIGCONV_T4_CC4    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T5_CC1    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_T5_CC2    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T5_CC3    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2))
#define ADC_EXTERNALTRIGCONV_T8_CC1    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T8_TRGO   ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_Ext_IT11  ((uint32_t)ADC_CR2_EXTSEL)
#define ADC_SOFTWARE_START             ((uint32_t)ADC_CR2_EXTSEL + 1U)

(2)CubeMX配置TIM8与ADC1:

TIM8配置为1Hz,即1S触发一次AD转换。

ADC1配置如下:别忘了开启中断

(3)代码实现:实现的效果是1S打印一次AD转换的结果

1 //首先调用
2     HAL_ADC_Start_IT(&hadc1);
3     HAL_TIM_Base_Start(&htim8); 
4 
5 //编写AD转换完成处理函数
6 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
7 {
8     printf("%d\\r\\n",HAL_ADC_GetValue(&hadc1));
9 }
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • adc
    adc
    +关注

    关注

    97

    文章

    6291

    浏览量

    542384
  • STM32
    +关注

    关注

    2257

    文章

    10822

    浏览量

    352416
  • dma
    dma
    +关注

    关注

    3

    文章

    552

    浏览量

    99916
  • AD转换
    +关注

    关注

    3

    文章

    166

    浏览量

    45196
  • STM32F429
    +关注

    关注

    0

    文章

    40

    浏览量

    10518
收藏 人收藏

    评论

    相关推荐

    想在PWM的中点触发ADC采样,使用Cubemx配置一直实现不了,为什么?

    您好! 我现在遇到个问题,就是想在PWM的中点触发ADC采样,使用Cubemx配置一直实现不了,还请大神指点
    发表于 06-03 07:47

    转:STM32CubeMX系列教程7:模数转换(ADC)

    本章通过两个例程介绍STM32的模数转换器(ADC),第一个通过ADC采集内部温度传感器通道电压,然后得出MCU内部温度。第二个通过DMA的方式采集两个
    发表于 07-02 17:03

    STM32CubeMX ADC规则通道轮询转换

    1.打开STM32CubeMX建立工程,(这里只介绍ADC配置,其他的不作介绍)。2.ADC3的通道配置
    发表于 07-04 07:58

    STM32CubeMX配置ADC模拟看门狗实现掉电保存——基于(STM32G070+STM32CubeMX+HAL库+ADC模拟看门狗) 精选资料分享

    实验目的:通过STM32CubeMX进行简单配置生成HAL库实现ADC模拟看门狗,以达到单片机掉电保存Flash。一、STM32CubeMX
    发表于 08-02 06:05

    通过CubeMx实现ADC多通道扫描采集DMA方式

    项目简介任务:通过CubeMx实现ADC多通道扫描采集DMA方式(无中断)采集内部温度传感器的温度通道:采集A0、A1、A2、B0、B1端口电压,采集内部温度传感器通道16、内部电压通
    发表于 08-11 08:14

    STM32 HAL库 CUBEMX配置 ADC采集 精选资料分享

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录STM32 HAL库 CUBEMX配置 ADC采集软硬件型号1.单通道不定时任意时刻采集信号CUBEMX
    发表于 08-11 07:46

    如何对STM32cubemxADC进行配置

    DMA的中断方式有哪几种呢?如何对STM32cubemxADC进行配置呢?
    发表于 12-01 07:39

    如何使用STM32CubeMx配置ADC

    如何使用STM32CubeMx配置ADC
    发表于 02-09 06:31

    CubeMX配置ADC出错请大神指教

    将工作解决方案从 STM32L031 移植到 STM32G0B1 我尝试在 CubeMX配置 ADC。这是一个非常简单、典型的设置。3 个通道通过 DMA 以“一次性”模式转换,由
    发表于 12-16 08:02

    STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA)

    STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA)
    发表于 11-24 13:51 84次下载
    STM32<b class='flag-5'>CUBEMX</b><b class='flag-5'>配置</b>教程(十二)STM32的定时器触发的固定频率<b class='flag-5'>ADC</b>采样(使用DMA)

    STM32CubeMX配置ADC模拟看门狗实现掉电保存——基于(STM32G070+STM32CubeMX+HAL库+ADC模拟看门狗)

    实验目的:通过STM32CubeMX进行简单配置生成HAL库实现ADC模拟看门狗,以达到单片机掉电保存Flash。一、STM32CubeMX
    发表于 12-03 09:36 10次下载
    STM32<b class='flag-5'>CubeMX</b><b class='flag-5'>配置</b><b class='flag-5'>ADC</b>模拟看门狗<b class='flag-5'>实现</b>掉电保存——基于(STM32G070+STM32<b class='flag-5'>CubeMX</b>+HAL库+<b class='flag-5'>ADC</b>模拟看门狗)

    2.使用cubemx配置stm32(二)__核心配置

    文章目录使用cubemx配置stm32(二)__核心配置cubemx工程搭建实现单片机点灯程序CubeM
    发表于 12-27 18:48 0次下载
    2.使用<b class='flag-5'>cubemx</b><b class='flag-5'>配置</b>stm32(二)__核心<b class='flag-5'>配置</b>

    STM32 HAL库 CUBEMX配置 ADC采集

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录STM32 HAL库 CUBEMX配置 ADC采集软硬件型号1.单通道不定时任意时刻采集信号CUBEMX
    发表于 12-27 18:57 25次下载
    STM32 HAL库 <b class='flag-5'>CUBEMX</b><b class='flag-5'>配置</b> <b class='flag-5'>ADC</b>采集

    STM32 HAL库 CubeMX教程(七)ADC电压采集串口输出

    STM32 HAL库 CubeMX教程(七)ADC电压采集ADC简介CubeMX配置ADC初始化
    发表于 01-12 20:24 44次下载
    STM32 HAL库 <b class='flag-5'>CubeMX</b>教程(七)<b class='flag-5'>ADC</b>电压采集串口输出

    CubeMX配置RTC实现日历和闹钟实验

    CubeMX配置RTC实现日历和闹钟实验
    的头像 发表于 02-15 14:05 1651次阅读
    <b class='flag-5'>CubeMX</b><b class='flag-5'>配置</b>RTC<b class='flag-5'>实现</b>日历和闹钟实验