STM32 HAL库开发教程(三)- ADC模拟信号采集

ADC目录

  • ADC转换模式
  • ADC采集范围
  • ADC配置
  • ADC相关函数说明
  • 代码部分
  • ADC转换模式

    1. 单次转换,每次触发,ADC只执行一次转换就结束;
    2. 连续转换,触发后会一直执行转换;
    3. 扫描模式,
    4. 间断模式,

    ADC采集范围

  • 电压范围是0v-3.3v
  • 12位ADC,最大值4095
  • ADC配置

    ADC获取双轴摇杆的值
    1个ADC实现2个通道的同步读取。可以使用间隔模式轮询或者扫描模式DMA转运。
    这里我们选择扫描模式DMA转运。
    首先配置两个adc引脚,adc1的2个通道。

    配置时钟,6分频。配置高了这里会报错。

    由于配置2个通道,这里会自动选择扫描模式。也不用开启自动,我们手动按次触发。

    配置DMA自动转运。

    在循环里按次开启adc采集,dma会自动转运数据到指定的地址。

    重写HAL_ADC_ConvCpltCallback函数,方便读出数据。

    ADC相关函数说明

    校准函数

  • HAL_ADCEx_Calibration_Start
  • 3个启动函数,分别是启动、中断启动、DMA启动

  • HAL_ADC_Start
  • HAL_ADC_Start_IT
  • HAL_ADC_Start_DMA
  • 获取ADC转换值

  • HAL_ADC_GetValue
  • 等待转换结束

  • HAL_ADC_PollForConversion
  • 中断回调函数

  • HAL_ADC_ConvCpltCallback
  • 配置通道和看门狗

  • HAL_ADC_ConfigChannel
  • HAL_ADC_AnalogWDGConfig
  • 代码部分

    // gpio中断回调
    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    {
    	if (GPIO_Pin == EXIT_Button_Pin){
    		OLED_ShowString(3, 1, "EXIT_COMING");
    	 }
    	__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    }
    
    // adc转换回调
    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
    	if(hadc == &hadc1){
    		// todo
    	}
    }
    
    uint16_t ADC_Value[2]; // ADC转换的值
    HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_Value, sizeof(ADC_Value) / sizeof(ADC_Value[0])); // adc带dma启动
    
    // pwm输出
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, Angle / 180 * 2000 + 500);	
    
    

    作者:ckvsok8

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 HAL库开发教程(三)- ADC模拟信号采集

    发表回复