其实软件层面的过压欠压保护,就是ADC功能中的模拟看门狗
所以在配置ADC的参数时,打开指定的功能就可以了
/** 配置ADC看门狗*/ADC_AnalogWDGConfTypeDef AnalogWDGConfig = {0};AnalogWDGConfig.WatchdogMode = ADC_ANALOGWATCHDOG_SINGLE_REG;AnalogWDGConfig.HighThreshold = VBUS_HEX_MAX;AnalogWDGConfig.LowThreshold = VBUS_HEX_MIN;AnalogWDGConfig.Channel = VBUS_ADC_CHANNEL;AnalogWDGConfig.ITMode = ENABLE;if (HAL_ADC_AnalogWDGConfig(&ADC_Handle, &AnalogWDGConfig) != HAL_OK){while(1);}
配置好了 ADC 模拟看门狗的溢出上下限,使能中断,就可以使用 ADC 模拟看门狗外设对电路电压进行异常检测了。当电路异常时,看门狗会触发中断回调,我们通过编写中断回调函数就可以对异常进行一定处理。
/*** @brief 在非阻塞模式模拟看门狗回调* @param hadc: ADC 句柄.* @retval 无*/void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc){flag_num++; // 电源电压超过阈值电压if (vbus_adc_mean > VBUS_HEX_MIN && vbus_adc_mean < VBUS_HEX_MAX)flag_num = 0;if (flag_num > ADC_NUM_MAX) // 电源电压超过阈值电压10次{set_bldcm_disable();flag_num = 0;LED1_ON;printf("电源电压超过限制!请检查原因,复位开发板在试!\r\n");while(1);}}
