|
1 产品由于尺寸比较小,没有硬件复位,复位电路只有上拉10k电阻下拉0.1uf电容,使用过程中需要不停在STOP模式与工作状态切换,STOP模式电流为60uA,工作状态8mA~20mA之间; 2 STOP模式与正常模式切换,通过RTC闹钟唤醒,RTC时钟采用外部晶振; 3 在生产过程总生产了100pcs样品,出现了2pcs中间程序停止的现象,复测一台不能出现,另一台概率出现,在概率出现的样机上,使用外部电源供电,死机后电流为8~9mA; 4 针对重现的样机,初步怀疑是否由于外部晶振原因找出,程序调整为内部晶振后,仍然出现一次; 5 STOP模式唤醒代码如下: void Low_power_consumption(u16 sec) { //while(1);//14.8mA Power_Ctrl(); //while(1);//4.4mA ADC_DeInit(ADC1); //while(1);//3.4mA RTC_ALARM_SET(sec); Sys_Enter_Stop(); //while(1);//13mA SystemInit(); //while(1);//3.3mA RTC_Init(); //while(1);//13.5mA Power_On(); //while(1);//3.3mA } |
如需获得 STM32F103C8T6 等器件的更多信息,请点击链接或 点击此处 联系在线客服!
楼主,您好。贴的代码全是屏蔽的。这段代码换成图片也行。分析原因如果是从stop下唤醒后不能休眠,可以看看是不是唤醒后系统时钟配置不过去。再就是分析一下进入STOP之前,代码是否有死循环。可以通过串口或者IO的状态来指示一下唤醒后正常工作过没有。
1. 唤醒代码如图所示,唤醒过后不是不能休眠,是产品24小时或者更长时间有某一次出现唤醒后停在那。串口也开着的,正常情况是有数据发送,等到偶尔出现一次没有唤醒后,串口就接受不到数据了。 2. 之前怀疑是晶振偶尔出现问题造成,后程序更改为内部晶振进行RTC计时,12小时也出现了程序停止。同时针对正常的电路板进行晶振短路测试,在睡眠唤醒的过程中,只是STOP模式时间延长,将晶振恢复正常后,产品仍然能够唤醒,正常工作。
我看你用的是秒唤醒,计划多长时间唤醒一次,我怀疑是不是因为配置RTC唤醒的当时有问题。你用的是秒、分、时三种同时符合进行唤醒吗?如果唤醒时间很短的话,可以考虑换成以下代码唤醒。 void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock); void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter);
用的是秒唤醒,有2s唤醒一次,也有30s唤醒一次
可以考虑换成我提供的函数试试。
楼主测试死机后的电流是毫安级别,那么多半是进入STOP 时出现故障。所以建议楼主检查一下进入STOP前的中断和事件处理的是否全面。有些时候恰好某些事件发生在进入STOP时会导致这样的情形方生。