菜鳥(niǎo)入門stm32之實(shí)時(shí)時(shí)鐘_第1頁(yè)
菜鳥(niǎo)入門stm32之實(shí)時(shí)時(shí)鐘_第2頁(yè)
菜鳥(niǎo)入門stm32之實(shí)時(shí)時(shí)鐘_第3頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

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

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

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

7、 寄存器的寫操作仍在進(jìn)行;1:上一次對(duì) RTC 寄存器的寫操作已經(jīng)完成。位 4 CNF:配置標(biāo)志(Configuration flag) 位 4此位必須由軟件置1以進(jìn)入配置模式,從而RTC_PRL 寄存器向 RTC_CNT、RTC_ALR 或?qū)懭霐?shù)據(jù)。只有當(dāng)此位在被置1并重新由軟件清0后,才會(huì)執(zhí)行寫操作。0:配置模式(開(kāi)始更新 RTC 寄存器);1:進(jìn)入配置模式。位 3 RSF:寄存器同步標(biāo)志(Registers synchronized flag)每當(dāng) RTC_CNT 寄存器和 RTC_DIV 寄存器由軟件更新或清0時(shí),此位由硬件置1。在 APB1 復(fù)位后,或 APB1 時(shí)鐘停止后,此位必須

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

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

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

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

12、7fff 即 32767 即可得到 1s 的周期當(dāng)然我們需要兩秒的話那就是 0xffff 了。這樣,整個(gè)就配置完成了,下面附上代碼,大家可以研究下!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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論