我是靠谱客的博主 动人路人,最近开发中收集的这篇文章主要介绍ADC 获取数据(stm32),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

ADC 单通道获取 光敏传感器的数据(只是ADC采集不需要回调函数)

main.c

HAL_ADC_Start(&hadc1);//ADC开始获取
HAL_ADC_PollForConversion(&hadc1,100);//等待获取完成,
参数1:adc的地址,时间;
vola=HAL_ADC_GetValue(&hadc1);//将获取的数据放到变量中保存
int vola;
if(vola>=3000)//对数据进行判断并操作
{
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
if(i==0)
{
printf("灯打开 %d",vola);
i=1;
}
}
else{
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
if(i==1)
{
printf("灯关闭 %d",vola);
i=0;
}
}
HAL_ADC_Stop(&hadc1);//ADC结束获取;

ADC多通道扫描

GPIO.C

uint16_t Value[2];
int fputc(int ch,FILE *f)//重定向,向串口发送数据
{
while(!(USART1->ISR & 0X40)){};
USART1->TDR=ch;
}
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)//按键外部中断回调函数
{
if(GPIO_Pin==GPIO_PIN_8)
{
HAL_ADC_Start(&hadc1);//启动ADC采集
while(!(ADC1->ISR &1<<2)){};//判断第一个通道转换完成
Value[0]=HAL_ADC_GetValue(&hadc1);//将转换完成的ADC读出来
while(!(ADC1->ISR &1<<3)){};//判断通道转换结束
Value[1]=HAL_ADC_GetValue(&hadc1);//将转换完成的ADC读出来
HAL_ADC_Stop(&hadc1);
if((Value[1])>=2990 && (Value[1]<=3000))
{
printf("中");
}
if ((Value[1])>=2975 && (Value[1]<=2985))
{
printf("上");
}
if ((Value[1])>=2920 && (Value[1]<=2940))
{
printf("下");
}
if ((Value[1])>=2950 && (Value[1]<=2970))
{
printf("左");
}
else if (Value[1] > 3000)
{
printf("右");
}
}
}
//备注(真实电压公式): 2950*(3.3/4095);
2095(采集到的值 )(3.3/4095)(单份占比)

最后

以上就是动人路人为你收集整理的ADC 获取数据(stm32)的全部内容,希望文章能够帮你解决ADC 获取数据(stm32)所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部