当前位置:   article > 正文

HAL库开发#06(中)——ADC数模转换_hal_adc_pollforconversion

hal_adc_pollforconversion

#06(中)——ADC数模转换

ADC基础开发

1.stm32 ADC资源

在这里插入图片描述

2.CubeMX ADC配置

在这里插入图片描述

3.HAL库相关函数【查询方式】【中断方式】【DMA方式】

tips:sprint函数在这里插入图片描述
在这里插入图片描述
【DMA下一篇】


[其他相关函数]
ADC启动与停止

//查询,阻塞方式,启动ADC
HAL_StatusTypeDef    HAL_ADC_Start(ADC_HandleTypeDef* hadc);
//查询,阻塞方式,停止ADC
HAL_StatusTypeDef    HAL_ADC_Stop(ADC_HandleTypeDef* hadc);
//中断,非阻塞方式,启动ADC
HAL_StatusTypeDef    HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);
//中断,非阻塞方式,停止ADC
HAL_StatusTypeDef    HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

ADC状态返回【转换好了为HAL_OK】

HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);

参数1:hadc,ADC实例指针。
参数2:Timeout,超时时间。
返回值:HAL_StatusTypeDef,函数执行状态。
  • 1
  • 2
  • 3
  • 4
  • 5

ADC转换结果读取

uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);

参数1:hadc,ADC实例指针。
返回值:uint32_t,ADC转换结果。
  • 1
  • 2
  • 3
  • 4

实训

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

void UR1_Send_Info()
{
    sprintf((char *)str_buff,"采样值:%d,电压值:%d.%d%dV\r\n",ADC0_Value,ADC0_Volt/100,(ADC0_Volt%100)/10,ADC0_Volt%10);
    HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
}
  • 1
  • 2
  • 3
  • 4
  • 5

1.【查询方式-阻塞】
在这里插入图片描述

void Get_ADC_Value()
{
    HAL_ADC_Start(&hadc1);
    LED1_ON();
    if(HAL_OK == HAL_ADC_PollForConversion(&hadc1,10))
    {
        ADC0_Value = HAL_ADC_GetValue(&hadc1);
	    ADC0_Volt = ADC0_Value * 330 / 4096;
    }
    UR1_Send_Info();
    LED1_OFF();
    HAL_ADC_Stop(&hadc1);
}
********************************************************************
********************************************************************
//在mian()函数中添加以下代码:
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    Get_ADC_Value();        //启动一个阻塞式的ADC转换并读取数据
    UR1_Send_Info();        //向上位机发生采样值和电压值
    HAL_Delay(500);         //延时0.5秒,再进行下一次ADC采样
   /* USER CODE END WHILE */
   /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

2.【中断方式-非阻塞】
在这里插入图片描述

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    if(hadc->Instance == ADC1)
    {
	ADC0_Value = HAL_ADC_GetValue(&hadc1);    //读取ADC转换结果
	ADC0_Volt = ADC0_Value * 330 / 4096;      //将采样值换算成电压值
	UR1_Send_Info();                          //向上位机发生ADC采样信息
	LED1_OFF();                               //关闭LED1采样指示灯
    }
}
********************************************************************
********************************************************************
//在mian()函数中添加以下代码:
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    HAL_ADC_Start_IT(&hadc1);   //启动一个非阻塞式的ADC转换并读取数据
    LED1_ON();                  //点亮LED1采样指示灯
    HAL_Delay(500);             //延时0.5秒,再进行下一次ADC采样
   /* USER CODE END WHILE */
   /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在这里插入图片描述

注:
这是我的学习笔记。 

来自B站视频(av号:av87017878)
这个UP的原博客为:https://www.xmf393.com/2020/02/10/20200210/
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/473747
推荐阅读
相关标签
  

闽ICP备14008679号