GD32F303的RTC模塊框圖如下圖所示,RTC時(shí)鐘源可選擇HXTAL/128、LXTAL或IRC40K,一般為了實(shí)現(xiàn)更精準(zhǔn)的RTC時(shí)間,MCU系統(tǒng)均會(huì)外掛32.768KHz LXTAL低頻晶振,但由于低頻晶振負(fù)阻抗較大,不容易起振,若外部電路布線、匹配電容選擇以及驅(qū)動(dòng)模式配置不合適,可能會(huì)存在啟動(dòng)或運(yùn)行過(guò)程中LXTAL停振的風(fēng)險(xiǎn),當(dāng)LXTAL停振后,RTC將會(huì)面臨時(shí)間停止的狀況,此時(shí)我們應(yīng)該如何處理?
1、首先我們需要優(yōu)化LXTAL部分硬件電路,避免啟動(dòng)及運(yùn)行過(guò)程中低頻晶振停振,低頻晶振的選擇、晶振電路的layout、匹配電容的選擇、MCU驅(qū)動(dòng)模式的配置,都會(huì)影響低頻晶振工作的穩(wěn)定性,我們后續(xù)會(huì)專門開(kāi)一講來(lái)進(jìn)行講解;
2、增加代碼冗余操作,提高系統(tǒng)穩(wěn)定性,可軟件上檢測(cè)低頻晶振是否正常,異常后可將RTC時(shí)鐘切換到內(nèi)部低頻時(shí)鐘,檢測(cè)低頻晶振是否正常的方法可選擇以下兩種:(1)選擇一個(gè)timer定時(shí)1s讀取RTC時(shí)間,如果連續(xù)3S讀取RTC時(shí)間均為同一個(gè)數(shù)值,此時(shí)可判斷LXTAL停振;(2)可通過(guò)RTC寄存器時(shí)鐘同步來(lái)進(jìn)行判斷,RTC計(jì)數(shù)值會(huì)在每個(gè)RTC時(shí)鐘的上升沿進(jìn)行內(nèi)部更新,并與APB1時(shí)鐘進(jìn)行同步,軟件上可首先清除RSYNF同步標(biāo)志位,然后等待其置位,如果LXTAL停振,RSYNF同步標(biāo)志將無(wú)法置位,此時(shí)增加超時(shí)判斷,可判斷LXTAL時(shí)鐘停振。
以上即為本期講解,如有建議或問(wèn)題歡迎評(píng)論區(qū)討論!