本帖最后由 feiante 于 2015-9-21 16:28 编辑 今天打算试用下ADC的模拟看门狗的功能,使用的板子是stm32f051,模拟看门狗的设置如下: /**Configure the analog watchdog */ AnalogWDGConfig.WatchdogMode = ADC_ANALOGWATCHDOG_SINGLE_REG; AnalogWDGConfig.Channel = ADC_CHANNEL_3; AnalogWDGConfig.ITMode = ENABLE; AnalogWDGConfig.HighThreshold = 3000; AnalogWDGConfig.LowThreshold = 1000; HAL_ADC_AnalogWDGConfig(&hadc, &AnalogWDGConfig); 其中断函数void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc)能够进入, 但是如何判断ADW的状态呢,比如超过了HighThreshold值:3000,ADW为1,就点亮一个灯,如果没有超过了,即ADW为0,就熄灭灯 我在中断服务程序是这样: void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc) { if (HAL_ADC_STATE_AWD1) { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET); } } 但是当没有超出范围时,就不能检测到。 |
这样只能在超出范围加反转了。每次超出范围反转一下IO口。还有就是通过外部程序读取对应的标志位或者寄存器,判断当前是否溢出。 |
问题好奇怪 |
本来我是想用读状态的函数,但是好像使用不对,不知道怎么用了,呵呵 |
慢慢解决,先尝试读取寄存器。 |