整理:MilerShao
某天某工程師說,在用STM32F151開發(fā)產(chǎn)品工程中遇到一奇怪現(xiàn)象。
他啟用了RTC中的喚醒定時(shí)器,定期喚醒休眠的MCU. 他發(fā)現(xiàn)在休眠中途(即未到達(dá)醒來時(shí)刻)給外部復(fù)位腳一個(gè)復(fù)位信號,STM32L151重跑程序并再次配置喚醒定時(shí)器后入眠,但之后休眠喚醒的時(shí)間依然會緊跟著上一次的設(shè)置和計(jì)時(shí)時(shí)間。
例如:假設(shè)MCU上電后的定時(shí)喚醒間隔設(shè)置為30分鐘。在進(jìn)入休眠到了20分鐘時(shí),給MCU復(fù)位腳一個(gè)復(fù)位信號,強(qiáng)令其醒
來重新跑程序,而且程序里執(zhí)行了30分鐘喚醒配置后才入眠,可結(jié)果只跑了10分鐘后,MCU就被喚醒了。雖然中途MCU被復(fù)位
過一次,再休眠后,喚醒時(shí)間還是緊接著上次來的,按理說復(fù)位過一次又重新設(shè)置了,后面應(yīng)該是30分鐘后才醒,怎么10分鐘就醒呢?
從現(xiàn)象描述來看,喚醒定時(shí)器啟動(dòng)后,雖然經(jīng)歷中途的系統(tǒng)復(fù)位,其計(jì)時(shí)喚醒參數(shù)以及計(jì)數(shù)器并未受到影響。盡管系
統(tǒng)復(fù)位、低功耗模式【SLEEP/STOP/STANDBY】不會影響喚醒計(jì)數(shù)器的工作,但中途復(fù)位后,該工程師陳述有做重新配置
相關(guān)時(shí)間參數(shù)的動(dòng)作,按理說,中途配置后的喚醒時(shí)間應(yīng)該是30分鐘而不是10分鐘。難道他在中途復(fù)位后運(yùn)行的相關(guān)配
置參數(shù)沒有生效?
查看手冊,配置喚醒定時(shí)器按如下幾步操作:
查看其wake up timer相關(guān)配置代碼,代碼里并沒有發(fā)現(xiàn)上面3步中的第1步。配置喚醒定時(shí)器必須保證RTC_CR寄存器
中的WUTE為0才可以進(jìn)行。他雖然沒寫這句代碼,幸運(yùn)的是MCU每次上電復(fù)位后,該位默認(rèn)值就是0,所以上電復(fù)位后配
置喚醒定時(shí)器即使不寫一句令WUTE為0的代碼,配置依然暢通有效。
但如果你上電配置過后,即使系統(tǒng)復(fù)位重新運(yùn)行程序再來配置喚醒定時(shí)器,就沒那么好運(yùn)了。因?yàn)榇藭r(shí)的WUTE位在
上電復(fù)位后的第一次配置的過程中已經(jīng)置1了,而且 RTC寄存器的內(nèi)容又不受系統(tǒng)復(fù)位【哪些是屬于系統(tǒng)復(fù)位,詳看手冊】
影響。所以,后面要想修改調(diào)整配置參數(shù),就得手動(dòng)先讓WUTE清零,否則,出現(xiàn)上面反映的情況就不難理解了。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |