#include "stm32f10x.h"

#define ADC_CHANNEL 0 #define ADC_THRESHOLD_HIGH 2000 #define ADC_THRESHOLD_LOW 1000

void WWDG_IRQHandler(void) { // 超出阈值警戒范围的处理 // ...

// 复位看门狗计数器
WWDG_SetCounter(0x7F);

}

void ADC1_IRQHandler(void) { uint16_t adc_value = ADC_GetConversionValue(ADC1);

if (adc_value > ADC_THRESHOLD_HIGH || adc_value < ADC_THRESHOLD_LOW) {
    // 超出阈值警戒范围,开启看门狗
    WWDG_Enable(0x7F);
} else {
    // 在阈值警戒范围之内的处理
    // ...
}

}

int main(void) { // 初始化 ADC1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_InitTypeDef adc_init; ADC_StructInit(&adc_init); adc_init.ADC_ContinuousConvMode = DISABLE; adc_init.ADC_DataAlign = ADC_DataAlign_Right; adc_init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; adc_init.ADC_Mode = ADC_Mode_Independent; adc_init.ADC_NbrOfChannel = 1; adc_init.ADC_ScanConvMode = DISABLE; ADC_Init(ADC1, &adc_init); ADC_Cmd(ADC1, ENABLE); ADC_RegularChannelConfig(ADC1, ADC_CHANNEL, 1, ADC_SampleTime_239Cycles5); ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE); NVIC_EnableIRQ(ADC1_IRQn);

// 初始化看门狗
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
WWDG_SetPrescaler(WWDG_Prescaler_8);
WWDG_SetWindowValue(0x7F);
WWDG_Enable(0x7F);
NVIC_EnableIRQ(WWDG_IRQn);

while (1) {
    // 主循环
}
给出stm32F103C8T6ADC的模拟看门狗的使用要求在主函数里实现在超出阈值警戒范围的处理和在阈值警戒范围之内的处理例如模拟看门狗检测adc1的通道0当检测到超出高阈值或低于低阈值在看门狗中断里进行处理处理完成后进入到对正常范围之内的处理过程

原文地址: https://www.cveoy.top/t/topic/deTE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录