文章中若有错误,请在评论区留言,谢谢大家
STM32H7系列教程(6)ADC模数转换
设置STM32cubeMX
这里使用ADC1的17通道
ADC的时钟频率不超过36MHz
使用默认设置生成代码
在adc.c文件中添加///或者在main函数下面
/* USER CODE BEGIN 1 */
/**
* @brief 获得 ADC 转换后的结果
* @param ch: 通道值 0~19,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_17
* @retval 返回值:转换结果
*/
uint32_t adc_get_result(uint32_t ch)
{
HAL_ADC_Start(&hadc1); /* 开启 ADC */
return HAL_ADC_GetValue(&hadc1); /* 返回最近一次 ADC1 常规组的转换结果 */
}
uint32_t adc_get_result_average(uint32_t ch, uint8_t times)
{
uint32_t temp_val = 0;
uint8_t t;
for (t = 0; t < times; t++) /* 获取 times 次数据 */
{
temp_val += adc_get_result(ch);
HAL_Delay(10);
}
return temp_val / times; /* 返回平均值 */
}
/* USER CODE END 1 */
//在main函数里面添加
//先设置两个变量
uint16_t adcx;
float temp;
while (1)
{
adcx = adc_get_result_average(ADC_ADCX_CHY, 10);
temp = (float)adcx * (3.3 / 65536);
printf("ADC1电压值:%fV\r\n",temp);
HAL_Delay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
将代码上传到开发板
读取光照传感器的电压
打开串口获取电压
正常光照条件下
在强光条件下
在弱光条件下,电压接近模拟电压