STM32F0单路采集电压普通方式+STCUBEMX一些专业英语翻译

209 阅读1分钟

参考www.cnblogs.com/xingboy/p/1…

用DMA采集单路电压总是出错,就用了定时器和中断的方式

开启定时器HAL_TIM_Base_Start_IT(&htim17);//timer

10ms定时器中断到了,开启电压采集,进行电压判断(注意这是上一次采集的电压,所以会有10ms延时)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//10ms
{
uint32_t ad_temp;
if (htim->Instance == htim17.Instance)
{
/* Toggle LED */
HAL_ADC_Start_IT(&hadc);
if(ADC_num < 2048)
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
else HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);


}

AD采集完成中断,停止AD采集,停止定时器,获取电压值,开启定时器

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)    
{
HAL_ADC_Stop_IT(hadc);       
HAL_TIM_Base_Stop_IT(&htim17);    
ADC_num = HAL_ADC_GetValue(hadc);    
HAL_TIM_Base_Start_IT(&htim17);      
}

多通道DMA方式参考www.stmcu.org.cn/module/foru…

 

注意!!!ADC配置中,由于时钟是48MHz,所以ClockPrescaler为Synchronous clock mode divided by 4,这样ADC的时钟为12MHz(ADC时钟不能超过14MHz)

 

cube英文翻译blog.csdn.net/yxiaobo163/…