完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近改了一个程式如下,调试时发现运行M_LowBatteryPower时,第一次可以有LED闪烁,led灯灭之后开不了机,必须断电重来。
void main(void) { u8 button_test=1; /*! 2.1) // 1.875/20190417 ADCBatteryFirstOK = 0; batterylow_flg = 0; }; while(1) { KeyNo = GetKey(); Get_Battery_Ultrasound_ADC(); // 1ms get battery adc *20 = 20ms 1ms get ultsound adc*20 = 20ms GetBattery_Level_Process(Run_Mode); Get_Battery_ADC(); BatteryIndicator_Process(Run_Mode,Dischargeindicator_stage); if(batterylow_flg) Run_Mode = M_LowBatteryPower;//0421 switch(Run_Mode) { case M_WaitKey: // check key = enter or 3s enter { // workingtime.Tcut_flg = disable; t1secstop = 1750; t25minstop = T25MIN_STOP; offsetcut = 0; // t10secstop = 5000; LED_3(OFF); LED_4(OFF); if(KeyNo == KEY_ENTER) Run_Mode = M_Standard; else if(KeyNo == KEY_3SENTER) Run_Mode = M_Inverse; } break; case M_Inverse: // M_Inverse mode { POWER(ON); // power latch LED_3(ON); LED_4(ON); EN_Inverse = 1; // disable no water auto stop if(t1secstop == 0 KeyNo == NO_KEY) Run_Mode = M_Standard; } break; case M_Standard: // standard mode { while(button_test) { POWER(ON); LED_3(OFF); LED_4(ON);// power latch TIM2_PWM_Init(); //Ultrasound PWM init button_test = 0; // workingtime.Tcut_flg = enable; /* for(n=0;n<30;n++) { wt.buff1[n] = 0; wt.buff2[n] = 0; wt.buff3[n] = 0; } */ wt.ost_gap = 0; wt.ost_old = 0; wt.ost_new = 0; } if(scan_ultrasound_PWM) // ultrasound { scan_ultrasound_PWM = 0; UltSound_Scanfrequency_process(Dischargeindicator_stage); } if(KeyNo != NO_KEY) Run_Mode = M_PowerOFF; } break; case M_LowBatteryPower: { if(lowpowercut >= 5) { //SetUltrasound_PWM(0);//放在这里闪烁5次灯,只有才不喷雾 //Run_Mode = M_PowerOFF; SetUltrasound_PWM(0); } else //{ if(lowledstep == 0) // Red On { if(tLowbatteryshutter == 0) { tLowbatteryshutter = 500; //LED_1(OFF); //LED_2(OFF); LED_3(ON); LED_4(OFF); //LED_5(OFF); lowledstep = 1; } } else if(lowledstep == 1) //Red Off { if(tLowbatteryshutter == 0) { tLowbatteryshutter = 500; //LED_1(OFF); //LED_2(OFF); LED_3(OFF); LED_4(OFF); //LED_5(OFF); lowledstep = 0; lowpowercut++; } } //} } break; //////////////////////////////////////////////////////////////////////////////////////////// default: case M_PowerOFF: { // workingtime.Tcut_flg = disable; SetUltrasound_PWM(0); LED_3(OFF); LED_4(OFF); POWER(OFF); Run_Mode = M_WaitKey; button_test = 1; scan_step = 0; t25minstop = T25MIN_STOP; BatteryLV = 0; wt.adc_old = 0; wt.cut = 0; wt.tTemp = 0; wt.adc_gap = 0; wt.adc_new = 0; wt.n = 0; offsetcut = 0; EN_Inverse = 0; batterylow_flg = 0;//0421 // t10secstop= 5000;//0417 } break;[/td] |
|
相关推荐
1个回答
|
|
从您提供的代码片段来看,问题可能与低电量模式和LED闪烁有关。在STM8S微控制器中,当电池电量不足时,系统会自动进入低电量模式以节省电量。在这种情况下,您需要确保在程序中正确处理低电量模式,以便在LED熄灭后能够重新启动设备。
以下是一些建议,以帮助您解决这个问题: 1. 确保在程序中正确初始化所有必要的硬件和寄存器。这包括时钟、I/O端口、中断和其他与您的应用程序相关的硬件。 2. 在M_LowBatteryPower函数中,您可能需要添加一个检查电池电量的逻辑,以确定是否需要进入低电量模式。如果电池电量足够,可以继续执行正常的程序流程。 3. 在低电量模式下,您可能需要使用一个唤醒源(如外部中断或定时器)来唤醒微控制器。这样,当电池电量恢复到可接受的水平时,微控制器可以自动从低电量模式中恢复。 4. 在程序中添加一个延时函数,以确保在LED闪烁后给微控制器足够的时间来处理低电量模式。这可以防止在LED熄灭后立即进入低电量模式,从而导致无法重新启动的问题。 5. 确保在程序中正确处理中断。在低电量模式下,中断可能会被禁用,因此在恢复正常模式之前,您需要重新启用中断。 6. 如果问题仍然存在,您可以尝试使用STM8S的低功耗库函数,这些函数专门为低功耗应用设计,可以帮助您更轻松地实现低电量模式和唤醒功能。 7. 最后,确保您的程序没有导致微控制器进入无限循环或死锁的状态。这可能会导致微控制器无法正常工作,从而导致LED熄灭后无法重新启动。 总之,解决这个问题的关键是确保您的程序能够正确处理低电量模式和唤醒功能。通过遵循上述建议,您应该能够找到问题的根源并解决它。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1621 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1546 浏览 1 评论
980 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
686 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1599 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
534浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 21:29 , Processed in 0.797801 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号