菜鳥入門stm32之實時時鐘_第1頁
菜鳥入門stm32之實時時鐘_第2頁
菜鳥入門stm32之實時時鐘_第3頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、經過這么 10 天的瞎搞,庫已經初具規模了,于是,不用每次都把所有的文件 copy 過去,直接在 Option 里面把 path 給加上就 ok 了。RTC 的時鐘配置,RTC 的時間寄存器是 2 個 32 位的寄存器,無非就是一個計數器,大概可以這樣理解吧,我們先看看時鐘吧RTC 的時鐘可以從這 3 路來,我們需要 PTCSEL 寄存器來進行設置,上面這個圖是摘自李想的課件里面的,我覺得這個是做的相對好的!位了保證 RTC 正常工作,我們需要在系統斷電時,RTC 不受影響,當然我們一般都需要接一個 Battery,作為 rtc 的后備電源,這里設計到電源管理,我們先來看看電源管理里面關于 r

2、tc 的只要我們把第八位置 1 我們就可以對其進行正常供電,我們還發現,他也可以給后備寄存器供電,這個后備寄存器是是個什么東東呢?有的可以研究研究備份寄存器(BKP),他的主要功能是侵入檢查和 RTC校準,他既然跟 RTC 有關系,我們就要好好看看他了;里面有個備份域寄存器 RCC_BDCR寄存器中(RCC_BDCR)的 LSEON、LSEBYP、RTCSEL 和復位和時鐘注意: 備份域RTCEN 位處于備份域。因此,這些位在復位后處于寫保護狀態,只有在電源DBP 位置1后才寄存器(PWR_CR)中的能對這些位進行改動。進一步信息請參考 5.1 節。這些位只能由備份域復位清除(見 6.1.3

3、節)。任何內部或外部復位都影響這些位。位 31:17 保留,始終讀為 0。BDRST:備份域軟件復位(Backup domain software reset)由軟件置1或清0 0:復位未激活;1:復位整個備份域。RTCEN:RTC 時鐘使能(RTC clock enable) 位 15由軟件置1或清0 0:RTC 時鐘關閉;1:RTC 時鐘開啟。位 14:10 保留,始終讀為 0。位 16RTCSEL1:0:RTC 時鐘源選擇(RTC clock source selection) 位 9:8由軟件設置來選擇 RTC 時鐘源。一旦 RTC 時鐘源被選定,直到下次后備域被復位,它不能在被改變。

4、可通過設置 BDRST 位來清除。00:無時鐘;01:LSE 振蕩器作為 RTC 時鐘;10:LSI 振蕩器作為 RTC 時鐘;11:HSE 振蕩器在 128 分頻后作為 RTC 時鐘。位 7:3 保留,始終讀為 0。LSEBYP:外部低速時鐘振蕩器旁路(External low-speed oscillator bypass) 位2在調試模式下由軟件置1或清0來旁路 LSE。只有在外部 32kHz 振蕩器關閉時, 才能寫入該位0:LSE 時鐘未被旁路;1:LSE 時鐘被旁路。LSERDY:外部低速 LSE 就緒(External low-speed oscillator ready) 位 1

5、由硬件置1或清0來指示是否外部 32kHz 振蕩器就緒。在 LSEON 被清零后, 該位需要 6 個外部低速振蕩器的周期才被清零。0:外部 32kHz 振蕩器未就緒;1:外部 32kHz 振蕩器就緒。LSEON:外部低速振蕩器使能(External low-speed oscillator enable) 位 0由軟件置1或清00:外部 32kHz 振蕩器關閉;1:外部 32kHz 振蕩器開啟。看來這一寄存器果真與 RTC 有很大的所以 RCC->BDCR |= 1<<0;,我們需要啟用外部 32K 的振蕩器,設置完了,我們還需要等待 32K 的時鐘就緒,bit1 的狀態!由

6、于我們選用的 32K 的 LSE 作為 RTC 的時鐘,所以上面我們提到的 RTCSEL寄存器必須設置為 1,設置完后我們就開啟 32K 時鐘RCC->BDCR |= 1<<8;RCC->BDCR |= 1<<15;下面正式看 RTC 的寄存器,先從低位寄存器開始 CRL位 15:6 保留,被硬件強制為 0。位 5 RTOFF:RTC 操作關閉(RTC operation OFF) 位 5RTC 模塊利用這位來指示對其寄存器進行的最后一次操作的狀態,指示操作是否完成。若此位為0,則表示無法對任何的 RTC 寄存器進行寫操作。此位為只讀位。0:上一次對 RTC

7、 寄存器的寫操作仍在進行;1:上一次對 RTC 寄存器的寫操作已經完成。位 4 CNF:配置標志(Configuration flag) 位 4此位必須由軟件置1以進入配置模式,從而RTC_PRL 寄存器向 RTC_CNT、RTC_ALR 或寫入數據。只有當此位在被置1并重新由軟件清0后,才會執行寫操作。0:配置模式(開始更新 RTC 寄存器);1:進入配置模式。位 3 RSF:寄存器同步標志(Registers synchronized flag)每當 RTC_CNT 寄存器和 RTC_DIV 寄存器由軟件更新或清0時,此位由硬件置1。在 APB1 復位后,或 APB1 時鐘停止后,此位必須

8、由軟件清0。要進行任何的讀操作之前,用戶程序必須等待這位被硬件置1,以確保 RTC_CNT、RTC_ALR 或 RTC_PRL 已經被同步。0:寄存器尚未被同步;1:寄存器已經被同步。位 2 OWF:溢出標志(Overflow flag) 位 2當 32 位可編程計數器溢出時,此位由硬件置1。如果 RTC_CRH 寄存器中OWIE=1,則產生中斷。此位只能由軟件清0。對此位寫1是無效的。0:無溢出;1:32 位可編程計數器溢出。位 1 ALRF:鬧鐘標志(Alarm flag) 位 1當 32 位可編程計數器達到 RTC_ALR 寄存器所設置的預定值,此位由硬件置1。如果 RTC_CRH寄存器

9、中 ALRIE=1,則產生中斷。此位只能由軟件清0。對此位寫1是無效的。0:無鬧鐘;1:有鬧鐘。位 0 SECF:秒標志(Second flag) 位 0當 32 位可編程預分頻器溢出時,此位由硬件置1同時 RTC 計數器加 1。因此, 此標志為分辨率可編程的 RTC 計數器提供一個周期性的信號(通常為 1 秒)。如果 RTC_CRH 寄存器中 SECIE=1,則產生中斷。此位只能由軟件清除。對此位寫1是無效的。0:秒標志條件不成立;1:秒標志條件成立。感覺 CRL 更像 SR,我在想為什么他有點功能不放到 SR 的里面呢?好吧,CRL 里的功能說的很清楚,直接掠過,包括 CRH。有什么異議,

10、我這里就不解釋了,在 RTC 計數器寄存器里面和 RTC 鬧鐘寄存器里面有這么一段話RTC 核有一個 32 位可編程的計數器,可通過兩個 16 位的寄存器以預分頻器產生的。計數器TR_CLK 時間基準為參考進行計數。RTC_CNT 寄存器用來存放計數器的計數值。他們受RTC_CR 的位 RTOFF 寫保護,僅當 RTOFF 值為1時, 寄存器(RTC_CNTH 或RTC_CNTL)上的寫操作,能夠直接裝載到相應的可編程計數器, 并且重新裝載RTC 預分頻器。當進行讀操作時,直接返回計數器內的計數值(系統時間)。寫操作。在高或低當可編程計數器的值與 RTC_ALR 中的 32 位值相等時,即觸發

11、一個鬧鐘并且產生 RTC 鬧鐘,中斷。此寄存器受 RTC_CR 寄存器里的 RTOFF 位寫保護,僅當 RTOFF 值為1時,寫操作。所以我們在配置 RTC_CNTx RTC_ALRx 寄存器時,不行把 RTOFF 寄存器置為1,當寫完之后將 CNT 設為 1,即進入配置模式,等待 RTOFF 配置完成,即RTOFF 自動置為 0,才完成對 CNTx 和 ALRx 兩個寄存器進行修改!為了實現計數的時間間隔,我們要對 RTC 預分頻裝載寄存器進行配置我們需要 1s 鐘計時一次,而我們用的是 LSE 32KHz 的振蕩器,所以我們需要配置的分頻器是?可以看出我們只需讓 RTC_PRLL = 0x

12、7fff 即 32767 即可得到 1s 的周期當然我們需要兩秒的話那就是 0xffff 了。這樣,整個就配置完成了,下面附上代碼,大家可以研究下!1.#include <stm32f10x.h>3.#include "usart.h"5.#define RTC_CF0x01CD/DefineRTC ConfigFrtc_init()9.u8 temp = 0;11.13.RCC->APB1ENREnable|=1<<27;/BackupInterfaceClock15.RCC->BDCR |=1<<16;17

13、.RCC->BDCR |=1<<0;19.delay_ms(10);21.RCC->BDCR |= 1<<8;22.RCC->BDCR |= 1<<15;20.if(temp>=250)return -1;18.while(!(RCC->BDCR&1<<1)&&(temp+)<250)16.RCC->BDCR &= (1<<16);14.PWR->CR |= 1<<8;/Disable back up domain write protecti

14、on12.RCC->APB1ENR |= 1<<28;/Power Interface Cloc k Enable10.if(BKP->DR1 != RTC_CF).#include "init.h"cpp view plaincopy23.while(!(RTC->CRL & (1<<5);25.RTC->CRH |= 1<<0;27./* ConfigTime */29.RTC->PRLH=0;31.RTC->CNTH=0;/Configtime33.RTC->ALRH=

15、0;35.RTC->CRL&=(1<<4);37.BKP->DR1= RTC_CF;39.else41.RTC->CRH|= 1<<0;43.45.rs232_send_int(RTC->CNTL);47.49.void RTC_IRQHandler(void)51.rs232_send_str("INTERn",6);53.55.rs232_send_byte('n');57.if(RTC->CRL & (1<<1)59.RTC->CRL |= 1<<4;6

16、0.RTC->CNTL = 1;58.56.54.rs232_send_int(RTC->CNTL);52.if(RTC->CRL & (1<<0)50. 48.46.return 0;44.init_interrupt(2,3,3,2);42.while(!(RTC->CRL & (1<<5);40.while(!(RTC->CRL & (1<<3);38.36.while(!(RTC->CRL & (1<<5);34.RTC->ALRL = 20;32.RTC->CNTL = 0;30.RTC->PRLL = 32767;28.RTC->CRL |= 1<<4;26.while(!(RTC->CRL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論