概述
#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基础开发所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复