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

#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);

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

HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);

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

ADC转换结果读取

uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);

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

实训

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

在这里插入图片描述

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.【查询方式-阻塞】
在这里插入图片描述

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 */

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 */

在这里插入图片描述

注:
这是我的学习笔记。 

来自B站视频(av号:av87017878)
这个UP的原博客为:https://www.xmf393.com/2020/02/10/20200210/
  • 27
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值