其实软件层面的过压欠压保护,就是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);
}
}