这段程序中是一段业务代码,有关于一个智能饮水机的主控板程序,此段程序在长按冷水键+童锁键后,运行到排气状态,只有把IWDG_Enable(看门狗使能)注释掉后断点调试才正常,蜂鸣器响3声。如果是把看门狗打开的话,蜂鸣器在进入这段程序后会一直响,相当于是程序跑飞了?那应该具体怎么去做? 也就是看门狗关闭后,也就是把IWDG_Enable的那行注释掉,然后全速运行,蜂鸣器依然被触动,但是在断点调试时把狗关了,却是好的,所以 IWDG_Enable + RUN = 排气状态下 beep 持续响 ----> 不正常 去掉IWDG_Enable + RUN = 排气状态下 beep 持续响 -----> 不正常 IWDG_Enable + 断点调试 = 排气状态下 beep 持续响 ------> 不正常 去掉IWDG_Enable + 断点调试 = 排气状态下 beep 响3声 ---->正常 如何在全速跑时让其正常响3声,而不是持续响??? if(scold==1 && child==1) //按下冷水键和童锁键10s处于排气过程 (问题点???) { System_Sta.s.clean_self_cmd = FLAG_OFF;//自排水标志位turn off vent_flag = 1; scold = child = 0; Save_Data.s.self_clean_flag = 0;//保存掉电前自排水完成状态 System_Sta.s.Vent_Flag = FLAG_ON;//自排气标志位打开 System_Data.Cold_Water_G_Tick = 0;// System_Sta.s.Cold_Water_G_Flag = FLAG_OFF; System_Data.Normal_Water_H_Tick = 0; System_Sta.s.Normal_Water_H_Flag = FLAG_OFF; // System_Data.cold_water_time += System_Data.cold_water_flag_tick/1000; // System_Data.cold_water_flag_tick = FLAG_OFF; // System_Sta.s.cold_water_timer_flag = TIMER_RESET; // System_Sta.s.cold_water_on_flag = FLAG_OFF; // System_Data.Normal_Water_H_Off_Time += System_Data.Normal_Water_H_Tick/1000; // System_Data.Normal_Water_H_Tick = FLAG_OFF; // System_Sta.s.normal_water_timer_flag = TIMER_RESET; // System_Sta.s.normal_water_on_flag = FLAG_OFF; // i2cWriteBuffer1(AT24C02_ADDR,AT24C02_REG,sizeof(SAVE_DATA_UNION),(u8*)&Save_Data);/*写入数据*/ // for (int i = 0; i < sizeof(STA_UNION); i++) // { // System_Sta.sta = 0; // } // // memset((void *)(&System_Data),0,sizeof(DATA_STRUCT)); /* 蜂鸣器连续响3声 */ System_Sta.s.beep_timer_flag = TIMER_RUN; Block_Timer(50);//阻塞时间50ms System_Sta.s.beep_timer_flag = TIMER_RESET; Block_Timer(200);//阻塞时间200ms System_Sta.s.beep_timer_flag = TIMER_RUN; Block_Timer(50);//阻塞时间50ms System_Sta.s.beep_timer_flag = TIMER_RESET; Block_Timer(200);//阻塞时间200ms System_Sta.s.beep_timer_flag = TIMER_RUN; Block_Timer(50);//阻塞时间50ms System_Sta.s.beep_timer_flag = TIMER_RESET; /* 蜂鸣器的定时器标志位关闭 */ System_Sta.s.beep_timer_flag = TIMER_END; /* 把定时器的标志位结束 */ //System_Sta.s.timer_flag = TIMER_END; System_Data.flash_water_flag[0]='0'; System_Data.flash_water_flag[1]='2';/*停止清洗*/ Trans_dat_append(STATE_23);//整机自清洗指令 Vent_Work(); /* while(vent_flag) { IWDG_ReloadCounter();//reload }; */ } |
【MCU实战经验】基于STM32F103C8T6的hart总线调试器设计
求教STM32F103进入STOP模式后用外部中断唤醒的问题
基于STM32F103RCT6的无源蜂鸣器音乐播放(生日快乐歌)
STM32F103c8t6有没有DAC 功能?
STM32F103x中文数据手册
新手求教,为何在我电脑上找不到STM32F1Xx.h文件
金龙107例程汇总(STM32F107)
万利STM32F107VC 原理图
STM32F103 ADC多通道检测必须要DMA吗?
【官方例程】STM32F107以太网官方例程
前面的是放在if整个括号里面的条件做判断,后面的是if里面两个相&做判断,但是这个和解开这个问题有没有什么联系呢?
STM32F103的独立看门狗一旦开启是关不掉的,只有烧上关掉看门狗的程序,并重新上电,才能保证看门狗不开启。
总的来说,还是那句话,先调程序,最后开看门狗。看门狗只有及时喂狗就可以了。
“&&”运算符好像优先于“==”
但是我在断点调试时,关掉看门狗,然后断点调试,蜂鸣器响3声正常。但是在全速运行后,打开看门狗,蜂鸣器持续的响。还没有查到时什么原因