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