實時時鐘——RTC
8.1.1 RTC初步認識
RTC(Real Time Clock)實時時鐘,主要用于為人們提供精確的實時時間或者為系統(tǒng)提供精確的時間基準。RTC通常分為兩類,一類是外部時鐘芯片提供實時時鐘,比如DS1302時鐘芯片;另一類是CPU內(nèi)部集成RTC模塊。STM32F103內(nèi)部集成了RTC模塊,可以通過配置相應(yīng)的寄存器來實現(xiàn)實時時鐘的功能。
STM32內(nèi)部有一塊特殊區(qū)域,叫做備份區(qū)域(也叫后備區(qū)域),該區(qū)域主要包含了RTC核心模塊和備份寄存器兩部分。當STM32在系統(tǒng)電源工作的狀態(tài)下,備份區(qū)域也是通過系統(tǒng)電源供電;當STM32的系統(tǒng)電源VDD掉電的情況下,備份區(qū)域可以自動切換到VBAT使用備用電源如電池、電容等進行工作,維持RTC運行,并且保護備份寄存器數(shù)據(jù)不丟失。STM32電源部分結(jié)構(gòu)圖如圖8-1所示,如果沒有接外部電池,建議將VBAT引腳通過一個100nF的陶瓷電容與電源VDD相連。
圖8-1 STM32供電結(jié)構(gòu)圖
8.1.2 RTC基本結(jié)構(gòu)
RTC模塊主要由APB1接口和一組可編程計數(shù)器組成(RTC核心部件),如圖8-2所示。其中APB1接口部分(圖中藍色框內(nèi))用來實現(xiàn)CPU通過APB1總線和RTC寄存器相互通信;RTC核心部分(圖中紅色框內(nèi))由一個RTC預(yù)分頻模塊和一個32位可編程計數(shù)器組成,這部分運行在后備區(qū)域(圖示灰底部分)。
圖8-2 RTC時鐘結(jié)構(gòu)框圖
1、 RTC的時鐘源 —— RTCCLK
RTCCLK可以通過備份域控制寄存器(RCC_BDCR)來選擇其時鐘源,可以分別用HSE/128、LSI或者LSE作為RTC時鐘源。其中HSE是高速外部時鐘,Kingst-32F1開發(fā)板中HSE采用的是8MHz的外部晶振,該時鐘同樣也是系統(tǒng)時鐘源;LSI是低速內(nèi)部時鐘,由STM32內(nèi)部RC振蕩器產(chǎn)生,頻率為40KHz,該時鐘源受環(huán)境影響較大;LSE為低速外部時鐘,需要外接頻率為32.768KHz的晶振,LSE是一個低功耗且精準度相對較高的的時鐘源。
當系統(tǒng)主電源關(guān)閉時,HSE無法工作,而如果采用LSI作為RTC時鐘源,一方面精度相對較低,另外一方面會有相對大的功率消耗,所以大多數(shù)情況下RTC的時鐘源是采用LSE,LSE的晶振的負載電容要求為6pF。
2、RTC預(yù)分頻****模塊
RTC預(yù)分頻模塊包含了一個20位的可編程分頻器,可以通過對預(yù)分頻裝載寄存器RTC_PRL配置,實現(xiàn)RTCCLK時鐘信號分頻,每經(jīng)過‘N+1’個時鐘周期輸出一個計時時間為1秒的RTC時間基準TR_CLK,如圖8-2中左側(cè)紅框所示。如果在RTC_CR寄存器中設(shè)置了相應(yīng)的允許位(SECIE位),每個TR_CLK周期RTC會產(chǎn)生一個中斷。通常情況下,用戶是將RTC時間基準配置成1秒,因此這個中斷也常被稱為秒中斷。
圖8-2種RTC_DIV是一個只讀寄存器,它的作用是對輸入的RTCCLK進行計數(shù),當計數(shù)值與預(yù)分頻寄存器中的值相匹配時,輸出TR_CLK信號,然后重新計數(shù)。用戶可以通過讀取RTC_DIV寄存器,獲取當前的分頻計數(shù)器的當前值而不停止分頻計數(shù)器的工作。當RTC_PRL或RTC_CNT寄存器中的數(shù)據(jù)發(fā)生改變后,RTC_DIV會由硬件重新裝載。
3、 32位的****可編程計數(shù)器
RTC核心部分的第二個模塊是一個32位可編程、向上計數(shù)的計數(shù)器,可以通過兩個16位的寄存器(RTC_CNTH或RTC_CNTL)訪問。此計數(shù)器以TR_CLK時間基準信號進行計數(shù),計滿后溢出,并且產(chǎn)生溢出標志位。當TR_CLK的周期為1秒時,計數(shù)器從0到溢出大概需要136年。
計數(shù)器按照TR_CLK周期累加外,同時與用戶設(shè)定的RTC鬧鐘寄存器(RTC_ALR)的時間比較,一致則產(chǎn)生鬧鐘標志,如果此時開啟中斷,則會觸發(fā)中斷。
28.2 UNIX時間戳及時間轉(zhuǎn)換問題
RTC模塊本質(zhì)是一個計數(shù)器,當設(shè)置RTC預(yù)分頻模塊輸出周期為1秒的TR_CLK信號時,通過計算TR_CLK的周期數(shù)來獲取從開始計數(shù)的0時刻到現(xiàn)在經(jīng)過的秒數(shù)。計數(shù)器為0的時刻稱之為計時元年,當前時間為計時元年加上計數(shù)器的計數(shù)值。
不同人或者不同系統(tǒng)規(guī)定的計時元年可能不同,換算成當前時間時會出現(xiàn)災(zāi)難性錯誤。為了解決這個問題,大部分操作系統(tǒng)普遍以格林尼治時間1970年1月1日0時0分0秒作計時元年,該時間最早在UNIX系統(tǒng)中使用,因此從計時元年到當前時間的經(jīng)過的秒數(shù)也被稱之為UNIX時間戳。
因此使用RTC模塊時,首先要計算出當前時間的UNIX時間戳X,然后將時間戳X寫入到RTC_CNT寄存器中并啟動計時。獲取當前時間時,先讀出RTC_CNT寄存器的值,然后再加上計時元年,所得到的時間便是當前時間。
38.3 RTC模塊基本操作
8.3.1 讀RTC寄存器
由于RTC核心部件位于后備區(qū)域,雖然RTC的寄存器讀寫由APB1接口完成,但是APB1接口在系統(tǒng)電源掉電時是停止工作的。由于RTC核心部件和APB1接口是相互獨立的,因此他們使用不同的時鐘源,當發(fā)生以下三種情況時,會導致時鐘不同步。
(1)發(fā)生系統(tǒng)復位或電源復位
(2)系統(tǒng)剛從待機模式喚醒
(3)系統(tǒng)剛從停機模式喚醒
當發(fā)生以上三種情況,讀寫RTC相關(guān)寄存器之前,必須首先檢測RTC_CRL寄存器中的RSF位,確保此位被置1,即RTC核心部件和APB1兩者時鐘同步,檢測庫函數(shù)如下:
8.3.2 配置RTC寄存器
當系統(tǒng)復位后,對后備寄存器和RTC的訪問將被禁止,這是為了防止對后備區(qū)域的意外寫操作。因此在配置RTC模塊前應(yīng)先設(shè)置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能電源和后備接口時鐘,代碼如下:
使能后備區(qū)域時鐘后還要使能電源的寄存器PWR_CR的DBP位來取消后備區(qū)域的寫保護。代碼如下:
設(shè)置RTC時鐘源為LSE之前要先等待LSE時鐘啟動,保證LSE時鐘正常起振。啟動LSE時鐘代碼為:
LSE時鐘起振成功后才可以設(shè)置RTC時鐘源為LSE時鐘并使能RTC,由于RTC使用的時鐘源與APB1總線時鐘并非同一時鐘源,因此兩者的時鐘信號并不是同步的,需要等待RTC和APB1時鐘同步。
以上操作完畢后,就可以配置RTC寄存器,配置過程如下:
(1)查詢RTOFF位,直到RTOFF的值變?yōu)椤?’
(2)置CNF值為1,進入配置模式
(3)對一個或多個RTC寄存器進行寫操作
(4)清除CNF標志位,退出配置模式
(5)查詢RTOFF,直至RTOFF位變?yōu)椤?’以確認寫操作已經(jīng)完成。
需要注意的是,對RTC任何寄存器的寫操作,都必須在前一次寫操作結(jié)束后才能繼續(xù)進行。可以通過查詢RTC_CR寄存器中的RTOFF狀態(tài)位,判斷RTC寄存器是否處于更新中,僅當RTOFF狀態(tài)位是’1’時,才可以寫入RTC寄存器。配置完畢后需要清除CNF標志位(即退出配置模式)才算配置完成,否則無法更新RTC寄存器,這個過程至少需要3個RTCCLK周期。
代碼如下:
以下是RTC模塊的驅(qū)動代碼:
RTC時鐘由于晶振精度以及環(huán)境影響等原因,會存在一些誤差,粗略測試每天會快2s左右,不同環(huán)境下誤差可能有所不同。
48.4 初識觸摸屏
觸摸屏是一種可接收觸頭等輸入信號的感應(yīng)式液晶顯示裝置,當接觸了屏幕的圖形按鈕時,屏幕上的觸覺反饋可根據(jù)預(yù)先編寫的程序驅(qū)動各種設(shè)備,可以替代機械式按鈕,并且通過液晶顯示更加生動的影音效果。觸摸屏提供了一種簡單、方便、自然的人機交互方式,賦予了多媒體嶄新的面貌,是極富吸引力的全新多媒體交互設(shè)備,應(yīng)用非常廣泛。
8.4.1 觸摸屏的分類和特點
按照觸摸屏的工作原理和傳輸信息的介質(zhì)區(qū)分,觸摸屏可以分為電阻式、電容式、紅外線式以及表面聲波式,我們常見的主流應(yīng)用是電阻式和電容式。
電阻觸摸屏是在顯示器表面附著一個多層復合薄膜,薄膜底層由玻璃或硬塑料構(gòu)成,頂層為光滑防擦的塑料層,上下兩層的內(nèi)表面都涂有透明導電層,并且相互隔離開。上下兩個薄膜層組成一個電阻網(wǎng)絡(luò),當手指按壓屏幕時,上下導電層就會出現(xiàn)接觸點,此時在X軸和Y軸分別施加電壓,通過對比觸摸點電壓與施加電壓可以計算出觸摸點的X和Y坐標,確定觸摸點的相對位置,電阻觸摸屏的結(jié)構(gòu)如圖8-3所示。
圖8-3電阻式觸摸屏結(jié)構(gòu)
電容觸摸屏是利用人體的電流感應(yīng)進行工作的四層復合玻璃屏,內(nèi)外層都涂有特殊材料,當手指摸在金屬層上時,由于人體電場,用戶和觸摸屏表面形成一個耦合電容,對于高頻電流來說,電容是導體,于是手指從接觸點吸走一個很小的電流,這個電流從觸摸屏的四角的電極中流出,控制器通過對這四個電流比例的精確計算,得出觸摸點的位置,電容屏觸摸原理如圖8-4所示。
圖8-4 電容屏觸摸原理
電阻屏和電容屏之間特點比較:
1、電阻屏靠壓力使各層接觸,因此可以用手指、指甲、觸筆等進行操作;電容屏利用人體的電流與觸摸屏之間形成耦合電場,從而觸發(fā)電容感應(yīng)系統(tǒng),但是任何非導電物體如指甲、首套等無效,手寫比較困難。
2、電阻屏精度可以達到單個顯示像素,便于手寫,有助于在精準操作;電容屏精度低,尤其是受限于手指接觸面限制,難以提高精度。
3、電阻觸屏價格比較低;電容屏成本比電阻屏貴10%到50%,在iPhone誕生之前的中低端手機大多是電阻屏,對成本不敏感的產(chǎn)品多采用電容屏。
4、電阻屏需要按下去,因此決定了他的頂部是軟的,多用塑料材質(zhì),這使他容易產(chǎn)生劃痕,但是通常不容易摔壞;電容屏外層通常使用玻璃,外層更不容易劃壞,方便去除污跡,但是嚴重沖擊容易碎裂,當然電容屏也有塑料材質(zhì)。
5、電阻屏不能支持多點同時觸摸;電容屏是可以支持多點同時觸摸的。
6、電阻屏在惡劣環(huán)境下可以正常工作,而電容屏操作溫度典型值是0到35度,至少5%的濕度,因此復雜的工業(yè)場合應(yīng)用多用電阻屏。
7、電阻屏的可視效果相比電容屏差的多,尤其在陽光下,電容屏的可視效果優(yōu)于電阻屏。
電阻屏通常分為四線電阻屏和五線電阻屏,Kingst-32F1開發(fā)板上的TFT-LCD采用的是4線制電阻觸摸屏。
8.4.2 觸摸屏的控制原理
電阻式觸摸屏的4個邊對應(yīng) X+、Y+、X-、Y-四個電極,這也是4線電阻觸摸屏的由來。當有筆尖或手指按壓觸摸屏表面時,觸摸屏的電阻性表面相當于被分隔為兩個串聯(lián)的電阻,由于觸摸屏的電阻值與觸摸點到接地邊之間的距離成正比,根據(jù)串聯(lián)電阻之比等于電阻兩端電壓之比的原理,只需要測量出一端電阻的電壓即可得到電阻之比,進而計算出觸摸點到兩邊的距離之比,觸摸屏等效電路如圖8-5所示。
8-5觸摸屏等效電路圖
計算觸點的X、Y坐標主要分為以下兩步:
- 計算X坐標,在X+電極施加驅(qū)動電壓U, X-電極接地,X+到 X-之間形成均勻電場。Y+做為引出端可以測得接觸點的電壓為U
ref,由于ITO層均勻?qū)щ姡|點電壓與Uref電壓之比等于觸點X坐標與屏寬度之比。假如X+與X-之間的距離為d,則
- 計算Y坐標,在Y+電極施加驅(qū)動電壓U, Y-電極接地,此時Y+到Y(jié)-之間形成均勻電場。X+作為引出端可以測得接觸點的電壓為U
ref。由于ITO層均勻?qū)щ姡|點電壓與Uref之比等于觸點Y坐標與屏高度之比。假如Y+與Y-之間的距離為d, 即:
-
芯片
+關(guān)注
關(guān)注
455文章
50816瀏覽量
423672 -
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120377 -
cpu
+關(guān)注
關(guān)注
68文章
10863瀏覽量
211781 -
實時時鐘
+關(guān)注
關(guān)注
4文章
245瀏覽量
65785 -
RTC
+關(guān)注
關(guān)注
2文章
538瀏覽量
66542
發(fā)布評論請先 登錄
相關(guān)推薦
評論