在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32開發(fā)板基礎(chǔ)教程(十) - RTC初探

            STM32開發(fā)板基礎(chǔ)教程(十) - RTC初探

            作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
            STM32RTC實際是一個獨立的定時器。
            下面將介紹如何使用RTC。
            我們將頭一次牽扯到振源的問題。

            首先介紹一下STM32使用的各種振源。
            有三種
            HSE:外置晶振
            HSI:內(nèi)置RC振蕩
            LSE:外置RTC振蕩(32768居多)

            APB1 和 APB2 是經(jīng)過PLL以后的振蕩源。

            STM32啟動,首先使用的HSI振蕩,在確認HSE振蕩可用的情況下,才可以轉(zhuǎn)而使用HSE,
            當HSE出現(xiàn)問題,STM32可自動切換回HSI振蕩,維持工作。
            LSE振蕩則是專門供RTC使用。

            LSE晶振需要特別注意。
            STM32非常奇怪,要求使用 6p負載的晶振,
            市面買到的時鐘晶振,絕大多是是12.5pF的
            算是一個不小的bug,
            大家做相關(guān)開發(fā)的時候,要留神。
            要買6pF的晶振,配10pF的諧振電容。

            由此,馬七懷念一下AVR單片機。不用諧振電容都跑的飛,當然是Mega系列。

            下面介紹RTC驅(qū)動過程。

            第一件事情,喂時鐘。

            RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR, ENABLE);

            注意,喂的是什么?不是RTC,是電源管理和BKP備份器的時鐘。用于備份模式下。
            即系統(tǒng)掉電了,BKP和RTC還能繼續(xù)工作,RTC繼續(xù)計時。
            那么RTC的時鐘呢?前面提到,RTC的時鐘,一般用LSE。

            第二件事情,初始化RTC

            // RTC config
            void RTC_configuration()
            {
            //Open the BKP
            PWR_BackupAccessCmd(ENABLE);

            BKP_DeInit();

            //RTC use the LSE Clock
            RCC_LSEConfig(RCC_LSE_ON);//RCC打開了LSE時鐘

            //Wait LSE Ready
            while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);//等待LSE就緒,一般來說,如果諧振不對,就會死在這里。實

            際代碼請慎重

            RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //RTC使用時鐘,可以使用LSE,也可以使用HSI,也可以使用HSE/128

            RCC_RTCCLKCmd(ENABLE); //RTC的時鐘開啟

            RTC_WaitForSynchro();//RTC等待同步,

            RTC_WaitForLastTask();//這個代碼在RTC中常常出現(xiàn),類似于等待就緒的含義

            // Interrupt Each Second
            RTC_ITConfig(RTC_IT_SEC, ENABLE);//RTC開中斷,RTC中斷有三種,秒中斷,鬧鐘中斷,溢出中斷,很明顯他們的作用。秒中斷用于即時操作,鬧鐘中斷用于關(guān)閉或者喚醒,溢出中斷的話,用于復位RTC

            RTC_WaitForLastTask();//

            RTC_SetPrescaler(32767);//RTC預分頻,32768HZ,分為一秒一個振蕩,RTC period = RTCCLK/RTC_PR = (32.768

            KHz)/(32767+1)

            RTC_WaitForLastTask(); //等待同步

            }

            這樣,RTC就啟動了。
            通過 RTC_GetCounter() 這個函數(shù)。讀到計數(shù)器的值。
            既然 一秒增一個。
            很容易就可以從 計數(shù)器的值,算出確切的時間值。
            對于這種時間分量復雜的,我習慣用結(jié)構(gòu)體定義

            typedef struct
            {
            unsigned char Sec;
            unsigned char Min;
            unsigned char Hour;
            unsigned char Day;
            unsigned char Month;
            unsigned char Year;
            }Time_Struct;

            // translate seconds to YY::MM:D::HH::MM::SS
            Time_Struct read_RTC_time()
            {
            unsigned long Time_Value;

            Time_Struct TimeStruct;

            Time_Value = RTC_GetCounter();

            TimeStruct.Year = Time_Value/(12*30*24*3600);

            TimeStruct.Month = Time_Value/(30*24*3600) - TimeStruct.Year*12;

            TimeStruct.Day = Time_Value/(24*3600) - TimeStruct.Year*12*30 - TimeStruct.Month*30;

            TimeStruct.Hour = Time_Value/3600 - TimeStruct.Year*12*30*24 - TimeStruct.Month*30*24 - TimeStruct.Day*24;

            TimeStruct.Min = Time_Value/60 - TimeStruct.Year*12*30*24*60 - TimeStruct.Month*30*24*60 -

            TimeStruct.Day*24*60 - TimeStruct.Hour*60;

            TimeStruct.Sec = Time_Value - TimeStruct.Year*12*30*24*60*60 - TimeStruct.Month*30*24*60*60 -

            TimeStruct.Day*24*60*60 - TimeStruct.Hour*60*60 -TimeStruct.Min*60;

            return TimeStruct;
            }

            當然,也可以在任意時候設(shè)置這個時間,手工修改Counter即可。相關(guān)函數(shù)在工程文件rtc.c當中。


            關(guān)鍵詞: STM32基礎(chǔ)教程RT

            評論


            技術(shù)專區(qū)

            關(guān)閉