• 基于STM32 CubeMX 配置 ADC


    目标:循环接收一路0-3.3V电压信号,使用独立模式,使用DMA搬运至寄存器,采集触发使用TIM3定时器。

    材料:STM32F103C8

    STM32 ADC简介:  

      STM32的 ADC是 12位模拟数字转换器。STM32的 ADC最大的转换速率为 1Mhz,也就是转换时间为 1us(在 ADCCLK=14M,采样周期为 1.5个 ADC

    时钟下得到),不要让 ADC的时钟超过 14M,否则将导致结果准确度下降。STM32将 ADC的转换分为 2个通道组:规则通道组和注入通道组。规则通道相

    当于正常运行的程序,而注入通道相当于中断。在程序正常执行的时候,中断是可以打断正常程序进行执行。同这个类似,注入通道的转换可以打断规则通

    道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。

    1、时钟配置:

     

    对应STM32F103 ADC时钟不能超过12MHZ那么采样时间和转换时间怎么计算呢?
    如果采样时间设定为1.5个周期,ADC时钟的预分频设置为6,那么采样时间计算如下;
        APB2/4=ADC Clocks
        ADC Clocks/6=Fs
        Fs=采样频率
        72/6=12MHZ
    采样周期设置为1.5时,另外因为采样到值以后进行转换需要12.5周期,那么实际转换时间为;
        12MHZ /1.5 /12.5 = 640KHZ
    频率换算周期等于1的倒数;
        1s/640KHZ=1000 000us /640 000HZ =1.5625us
    实际采样转换时间为1.5625us

     3、配置ADC

    对应上图配置如下:

    Parameter Settings
    一、 ADCs_Common_Settings

    Mode: 设置ADC 工作模式(独立模式或多重模式)
    独立模式
    <1> Independent mode                      ADC1 和ADC2 工作在独立模式
    双重模式
    <2> Dual regular simultaneous + injected simultaneous mode     ADC1 和ADC2 工作在同步规则模式和同步注入模式
    <3> regular regular simultaneous + alternate trigger mode        ADC1 和ADC2 工作在同步规则模式和交替触发模式
    <4> Dual injected simultaneous mode only              ADC1 和ADC2 工作在同步注入模式
    <5> Dual regular simultaneous mode only               ADC1 和ADC2 工作在同步规则模式
    <6> Dual interleaved mode only                  ADC1 和ADC2 工作在交叉模式
    <7> Dual alternate trigger mode only                ADC1 和ADC2 工作在交替触发模式
    三重模式
    <8> Triple combined regular simultaneous + injected simultaneous mode       工作在同步规则模式和同步注入模式
    <9> Triple combined regular simultaneous + alternate trigger mode           工作在同步规则模式和交替触发模式
    <10> Triple injected simultaneous mode only                     ADC1 和ADC2 工作在同步注入模式
    <11> Triple regular simultaneous mode only                      ADC1 和ADC2 工作在同步规则模式
    <12> Triple interleaved mode only                        ADC1 和ADC2 工作在交叉模式
    <13> Triple alternate trigger mode only                      ADC1 和ADC2 工作在交替触发模式

    DMA Access Mode :(DMA)                         直接存储器存取访问模式(在多重模式下才有此项)

    Delay between 2 sampling phases:                        2个抽样阶段的延迟(在多重模式下才有此项)

    二、 ADCs _Settings
    <1> Clock Prescaler                                ADC的时钟分频数
    <2> Resolution                                  分辨率(意思是AD位数)
    <3> Data Alignment                                 ADC 数据向左边对齐还是向右边对齐
    <4> Scan Conversion Mode                              ADC工作在扫描模式(多通道)还是单次(单通道)模式。可以设置这个参数为ENABLE 或者DISABLE
    <5> Continuous Conversion Mode                            ADC模数转换工作在连续模式。可以设置这个参数为 ENABLE或者DISABLE
    <6> Discontinuous Conversion Mode                          ADC模数转换工作在不连续模式(单次模式)。可以设置这个参数为 ENABLE或者DISABLE
    <7> DMA Continuous Requests                           DMA连续请求
    <8> End of Conversion Selection                           转换选择结束

    三、 ADCs_Regular_ConversionMode                          (规则通道转换模式)

    <1> Enable Regular Conversions                       启用定期转换  ENABLE或者DISABLE
    <2> Number of Conversion                              ADC转换的通道数量  1
    <3> External Trigger Conversion Source                        ADC外部触发转换源    TIM3 更新事件
    <4> External Trigger Conversion Edge                          ADC外部触发转换边沿(意思是上升沿/下降沿触发)

    四、 Rank
    <1> Channel                                   ADC转换通道 1
    <2> Sampling Time                                ADC转换时间  1.5cyces

    五、 ADC_Injected_ConversionMode                       (注入通道转换模式)
    <1> Number of Conversion                            ADC转换的注入通道数
    注入通道数不为0时,才有下面的配置项
    <2> External Trigger Source                             ADC外部触发转换源
    <3> External Trigger Edge                             ADC外部触发转换边沿(意思是上升沿/下降沿触发)
    <4> Injected Conversion Mode                           ADC注入转换通道模式

    六、 Rank(ADC_Injected_ConversionMode的(Number of Conversion )        ADC转换的注入通道数不为0时,才能配置注入通道的其他参数)
    <1> Channel                                     ADC转换通道
    <2> Sampling Time                               ADC转换时间
    <3> Injected Offset                               ADC注入通道的偏值

    七、 WatchDog
    <1> Enable Analog WatchDog Mode

    以上蓝字为默认配置,红色在STM32 CuebeMX选择相关选项。

    3.1 ACD的DMA配置

      选择循环采集,地址不偏移,寄存器移位偏移。一个字节大小。

    4、配置TIM3 ADC触发转换定时器

      配置好ADC后还需要给ADC一个触发事件信号,这里通过定时器的上升沿触发转换,配置开启更新事件,相关分频设置转换速度为10KHZ,配置如下。

     至此ADC的单通道独立默认就配置好了,生成工程代码。

    5、使用

    创建一个数组用于存储ADC数据

    /* USER CODE BEGIN 0 */
    #define NPT 256									//样本数量
    uint32_t adc_buf[NPT]={0};			            //用于存储ADC转换结果的数组
    /* USER CODE END 0 */
    

      

    使能定时器触发转换,并用串口打印

      /* USER CODE BEGIN 2 */
    
        HAL_ADC_Start_DMA(&hadc1, adc_buf, NPT);  /*启动ADC的DMA传输,配合定时器触发ADC转换  12位的ADC对应0-4095 */
        HAL_TIM_Base_Start(&htim3);               /*开启定时器,用溢出时间来触发ADC*/
    
        //HAL_ADC_Stop_DMA(&hadc1);               /*停止ADC的DMA传输*/
        //HAL_TIM_Base_Stop(&htim3);              /*停止定时器*/
    
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
        printSwo("",adc_buf[0],LINE_FEED_EN);
        HAL_Delay(500);
    
      }
      /* USER CODE END 3 */
    

     

     增加一个DMA的回调函数用于转换完成后处理一些其它操作。

    /** 函数名称:void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
     * 功能描述:ADC的DMA回调函数
     * 参数:hadc --- adc结构体指针
     * 返回值:无
     */
    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
    {
        uint16_t flag;
    //	HAL_ADC_Stop_DMA(&hadc1);	//停止ADC的DMA传输
        flag = 1;					//标记ADC_DMA传输完成
    }
    

      

    参考链接:https://blog.csdn.net/qq_43225938/article/details/84098810

           https://blog.csdn.net/mc_li/article/details/81364766?spm=1001.2014.3001.5506

  • 相关阅读:
    Asp.net MVC3 Routing study
    Sharepoint 站点页面错误问题
    vc2010 学习笔记1
    UML类成员的困惑
    河道二维水流模拟高精度算法研究
    朱庆:真三维GIS技术进展
    map
    SIGGRAPH 2010: 一场视觉盛宴[转]
    新网站开张,欢迎大家
    获取其它进程内EDIT BOX内容的一种方法
  • 原文地址:https://www.cnblogs.com/siyun/p/14835662.html
Copyright © 2020-2023  润新知