adc_raw_value[0] = HAL_ADC_GetValue(hadc);
时间: 2024-05-28 15:14:43 浏览: 14
这行代码是使用HAL库中的函数HAL_ADC_GetValue()从ADC转换器获取原始的转换值,并将其存储在数组adc_raw_value的第一个元素中。hadc是指向ADC句柄的指针,它用于指定要使用的ADC模块。在这个例子中,我们假设hadc指向正确的ADC模块,并且该模块已经初始化和配置完成。
相关问题
int16_t GET_ADC(uint8_t ch) { ADC_ChannelConfTypeDef sConfig = {0}; uint16_t adc_conv_var; if(ch==1) { sConfig.Channel = ADC_CHANNEL_4; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; HAL_ADC_ConfigChannel(&hadc,&sConfig); HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED); HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc,20);// ³¬Ê±20ms adc_conv_var = HAL_ADC_GetValue(&hadc); } else if(ch==2) { sConfig.Channel = ADC_CHANNEL_5; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; HAL_ADC_ConfigChannel(&hadc,&sConfig); HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED); HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc,20);// ³¬Ê±20ms adc_conv_var = HAL_ADC_GetValue(&hadc); } else if(ch==3) { sConfig.Channel = ADC_CHANNEL_6; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; HAL_ADC_ConfigChannel(&hadc,&sConfig); HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED); HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc,20);// ³¬Ê±20ms adc_conv_var = HAL_ADC_GetValue(&hadc); } else if(ch==4) { sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; HAL_ADC_ConfigChannel(&hadc,&sConfig); HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED); HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc,20);// ³¬Ê±20ms adc_conv_var = HAL_ADC_GetValue(&hadc); } HAL_ADC_Stop(&hadc); sConfig.Rank = ADC_RANK_NONE; HAL_ADC_ConfigChannel(&hadc,&sConfig); return adc_conv_var; }每一段翻译
int16_t GET_ADC(uint8_t ch) {
这是一个函数定义,函数名为GET_ADC,返回值类型为int16_t(16位整型),参数为一个8位无符号整型ch。
ADC_ChannelConfTypeDef sConfig = {0};
定义了一个ADC_ChannelConfTypeDef类型的结构体变量sConfig,并将其初始化为0。
uint16_t adc_conv_var;
定义了一个16位无符号整型变量adc_conv_var。
if(ch==1)
else if(ch==2)
else if(ch==3)
else if(ch==4)
这里通过判断参数ch的值来选择对应的ADC通道进行配置和采集,并且设置了20ms的采集时间。如果ch的值为1,则配置和采集ADC通道4的模拟量数据;如果ch的值为2,则配置和采集ADC通道5的模拟量数据;如果ch的值为3,则配置和采集ADC通道6的模拟量数据;如果ch的值为4,则配置和采集ADC通道1的模拟量数据。
HAL_ADC_ConfigChannel(&hadc,&sConfig);
HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED);
HAL_ADC_Start(&hadc);
HAL_ADC_PollForConversion(&hadc,20);
adc_conv_var = HAL_ADC_GetValue(&hadc);
这里是对ADC进行配置和采集的具体步骤。首先,使用HAL库对ADC通道进行配置,并启动ADC校准和转换。然后,使用HAL_ADC_PollForConversion函数等待20ms,直到转换完成。最后,使用HAL_ADC_GetValue函数获取转换结果并将其存储在变量adc_conv_var中。
HAL_ADC_Stop(&hadc);
sConfig.Rank = ADC_RANK_NONE;
HAL_ADC_ConfigChannel(&hadc,&sConfig);
这里停止ADC转换并清除配置,将sConfig的Rank成员设置为ADC_RANK_NONE,然后重新配置ADC通道,以便下一次采集。
return adc_conv_var;
函数返回变量adc_conv_var的值,即16位的ADC转换结果值。
if(adc_flag) { adc_flag=0; HAL_ADC_Start_IT(&hadc2); adc_value=(double)HAL_ADC_GetValue(&hadc2)/4096*3.3; height=adc_value/3.3*100; last_level=level;
这段代码用于获取ADC(模拟数字转换器)转换后的电压值,并根据电压值计算出相应的高度值。它首先检查一个名为adc_flag的标志位,以确保ADC已经完成转换。如果已完成,它将该标志位重置为0,并使用HAL_ADC_Start_IT函数开始新的ADC转换。然后,它读取ADC值并将其转换为电压值,再将其转换为高度值。最后,它将当前的高度值存储在名为height的变量中,并将上一个高度值存储在名为last_level的变量中。