我是靠谱客的博主 悦耳鸡翅,最近开发中收集的这篇文章主要介绍HAL库开发#06(中)——ADC数模转换#06(中)——ADC数模转换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%dVrn",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/

最后

以上就是悦耳鸡翅为你收集整理的HAL库开发#06(中)——ADC数模转换#06(中)——ADC数模转换ADC基础开发的全部内容,希望文章能够帮你解决HAL库开发#06(中)——ADC数模转换#06(中)——ADC数模转换ADC基础开发所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部