ADC轮询方式读取电压值/DMA方式多通道采集/DAC数模转换
- ADC轮询方式读取电压值
- DMA方式多通道采集
- DAC数模转换
ADC轮询方式读取电压值
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);//启动ADC装换
HAL_ADC_PollForConversion(&hadc1, 50);//等待转换完成,第二个参数表示超时时间,单位ms.
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC)){
AD_Value = HAL_ADC_GetValue(&hadc1);//读取ADC转换数据,数据为12位
printf("[\tmain]info:v=%.1fmv\r\n",AD_Value*3300.0/4096);//打印日志
}
}
/* USER CODE END 3 */
}
DMA方式多通道采集
while (1){
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(500);
for(i = 0,ad1 =0,ad2=0; i < 100;){
ad1 += ADC_Value[i++];
ad2 += ADC_Value[i++];
}
ad1 /= 50;
ad2 /= 50;
printf("\r\n********ADC-DMA-Example********\r\n");
printf("[\tmain]info:AD1_value=%1.3fV\r\n", ad1*3.3f/4096);
printf("[\tmain]info:AD2_value=%1.3fV\r\n", ad2*3.3f/4096);
}
DAC数模转换
//开启DAC转换
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
// 设置DAC的大小
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048);