J斌(´・ω・`)  

配置ADC1双通道采样

STM32CubeMX配置

1. 配置GPIO为ADC模式

以PC0和PC1为例,是ADC1的通道10和通道11,如下图:

2.ADC1参数配置

进入ADC1的【Parameter Settings】

① ADCs_Common_Settings

Mode | Independent mode ADC1工作在独立模式

②ADC_Settings

Data Alignment | Right alignment 数据向右边对齐
Scan Conversion Mode | Enabled ADC工作在扫描模式(多通道)
Continuous Conversion Mode | Enabled
Discontinuous Conversion Mode | disabled ADC模数转换工作在连续模式。

③ADCs_Regular_ConversionMode(规则通道转换模式)

Enable Regular Conversions | Enable 使能规则通道转换模式
Number of Conversion | 2 ADC转换的通道数量

④Rank

Channel | Channel 10 ADC转换通道
Sampling Time | 1.5Cycles ADC转换时间

1)先设置规则转换通道的转换通道数为2,【Scan Conversion Mode】扫描模式自动Enable。
2)Rank 1 设置为Channel 10,Sampling Time设置为1.5 Cycles. Rank 2 设置为Channel 11,Sampling Time设置为1.5 Cycles.
3)根据需要使能【Continuous Conversion Mode】连续模式,开启后自动会转换,不需要转换后再次开启。此次开启该功能。

3.添加并设置DMA

①点开DMA设置界面
②添加DMA
③选择ADC1
④DMA模式选择为循环模式

4.ADC1时钟配置


此次用外部 8M 晶振当时钟源,经过上图的倍频分频设置,ADC1的时钟源为12M.

配置完生成代码后,修改和调用函数

1.ADC实验例程

uint16_t usADCBuf[2];

int main(void)
{
    /* Run the ADC calibration */
    if (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)
    {
        /* Calibration Error */
        Error_Handler();
    }

    /* Start ADC conversion on regular group with transfer by DMA */
    if (HAL_ADC_Start_DMA(&hadc1, (uint32_t *)usADCBuf, 2) != HAL_OK)
    {
        /* Start Error */
        Error_Handler();
    }

    while(1)
    {
        printf("Channel 10 ADC value is %d", usADCBuf[0]);
        printf("Channel 11 ADC value is %d", usADCBuf[1]);
        HAL_Delay(1000);
    }
}

2.关闭DMA中断(看情况)

在调用时发现,DMA传输完成后会进入中断,可能是由于usADCBuf[2]size为2小,导致太频繁进入中断,所以我在STM32CubeMX生成的DMA初始化代码里,将DMA初始化内容屏蔽

/** 
  * Enable DMA controller clock
  */
static void MX_DMA_Init(void) 
{

  /* DMA controller clock enable */
  __HAL_RCC_DMA1_CLK_ENABLE();

  /* DMA interrupt init */
#if 0 //ADC DMA interrupt close
  /* DMA1_Channel1_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
#endif

}
posted on 2021-01-09 16:48  J斌(´・ω・`)  阅读(1533)  评论(0编辑  收藏  举报