在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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學(xué)習(xí)筆記——實時時鐘RTC

            STM32學(xué)習(xí)筆記——實時時鐘RTC

            作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/201611/322893.htm

            //通過該例程,學(xué)會RTC的配置和讀取計數(shù)值,數(shù)值格式的轉(zhuǎn)換的方法,要想控制好的話,要多看資料,多看程序

            #include"stm32f10x_lib.h"

            vu32TimeDisplay=0;

            ErrorStatusHSEStartUpStatus;

            u32THH=0,TMM=0,TSS=0;

            unsignedintjj=0;

            unsignedintLedNumVal=0,LedNumVal1=0;//變量定義

            //此表為LED的字模,共陰數(shù)碼管0-9-

            unsignedcharDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//段碼控制

            //此表為8個數(shù)碼管位選控制,共陰數(shù)碼管1-8個-

            unsignedchardispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//位選控制查表的方法控制

            unsignedintLedOut[10];//變量定義

            voidRCC_Configuration(void);

            voidGPIO_Configuration(void);

            voidUSART_Configuration(void);

            voidRTC_Configuration(void);

            voidNVIC_Configuration(void);

            u32Time_Regulate(void);

            voidTime_Adjust(void);

            voidTime_Show(void);

            voidTime_Display(u32TimeVar);

            voidDelay(vu32nCount);

            intmain(void)

            {

            #ifdefDEBUG

            debug();

            #endif

            RCC_Configuration();//系統(tǒng)時鐘配置函數(shù)

            NVIC_Configuration();//NVIC配置函數(shù)

            GPIO_Configuration();//配置GPIO

            //從指定的后備寄存器中讀取數(shù)據(jù),參數(shù)用來選擇后備寄存器,可以是BKP_DR1~BKP_DR1010個后備寄存器

            if(BKP_ReadBackupRegister(BKP_DR1)!=0xA5A5)//???為什么要檢測0xA5A5

            {

            //配置RTC

            RTC_Configuration();

            Time_Adjust();

            BKP_WriteBackupRegister(BKP_DR1,0xA5A5);//向指定的后備寄存器中寫入用戶程序數(shù)據(jù)這里是向BKP_DR1中寫入0xA5A5

            }

            else

            {

            if(RCC_GetFlagStatus(RCC_FLAG_PORRST)!=RESET)//檢查指定的RCC標(biāo)志位設(shè)置與否,這里檢查POR/PDR復(fù)位

            //{

            RTC_WaitForSynchro();//等待最近一次對RTC寄存器的寫操作完成,也即等待RTC寄存器同步

            RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能或失能指定的RTC中斷第一個參數(shù)指定待配置的RTC中斷源,可以是RTC_IT_SEC:秒中斷

            //RTC_IT_OW:溢出中斷,RTC_IT_ALR:鬧鐘中斷。第二個參數(shù)可以是ENABLE或DISABLE

            RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成

            }

            #ifdefRTCClockOutput_Enable

            //使能或失能APB1外設(shè)時鐘具體說明詳見《STM32函數(shù)說明》P208

            RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);

            PWR_BackupAccessCmd(ENABLE);//使能或失能RTC和后備寄存器訪問

            //該函數(shù)使能或失能管腳的侵入檢測功能這里是失能

            BKP_TamperPinCmd(DISABLE);

            //調(diào)用該函數(shù)前必須先失能管腳的侵入檢測功能

            BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock);//選擇在侵入檢測管腳上輸出的RTC時鐘源

            //參數(shù)指定RTC輸出時鐘源,可以是:BKP_RTCOutputSource_CalibClock:侵入檢測管腳上輸出,其時鐘頻率為RTC時鐘除以64

            //BKP_RTCOutputSource_None:侵入檢測管腳上無RTC輸出,BKP_RTCOutputSource_Alarm:侵入檢測管腳上輸出RTC鬧鐘脈沖

            //BKP_RTCOutputSource_Second:侵入檢測管腳上輸出RTC秒脈沖

            #endif

            //清除復(fù)位標(biāo)志

            RCC_ClearFlag();

            while(1)

            {unsignedinti;

            //if(++jj>=0x01ff)

            //{LedNumVal1++;

            //jj=0;

            //}

            //得到時間并顯示RTC_GetCounter():獲得RTC計數(shù)器的值返回值是u32類型的RTC計數(shù)器的值

            Time_Display(RTC_GetCounter());

            LedOut[0]=Disp_Tab[THH0/10];//時

            LedOut[1]=Disp_Tab[THH];

            LedOut[2]=~0XBF;//橫線

            LedOut[3]=Disp_Tab[TMM0/10];//分

            LedOut[4]=Disp_Tab[TMM];

            LedOut[5]=~0XBF;//橫線

            LedOut[6]=Disp_Tab[TSS0/10];//十位

            LedOut[7]=Disp_Tab[TSS];//個位

            for(i=0;i<8;i++)

            {

            //BSRR:端口位設(shè)置/復(fù)位寄存器,詳細的GPIO寄存器結(jié)構(gòu)體說明見《STM32函數(shù)說明》P120

            GPIOB->BSRR=LedOut[i]<<8&0xFF00;

            GPIOB->BRR=(~(LedOut[i]<<8))&0xFF00;//BRR:端口位復(fù)位寄存器

            GPIOB->BSRR=dispbit[i]&0x00FF;//使用查表法進行位選

            GPIOB->BRR=(~dispbit[i])&0x00FF;

            Delay(0x000ff);//掃描間隔時間

            }

            }//while

            }

            voidDelay(vu32nCount)

            {

            for(;nCount!=0;nCount--);

            }

            voidRCC_Configuration(void)

            {

            //復(fù)位RCC外部設(shè)備寄存器到默認值

            RCC_DeInit();

            //打開外部高速晶振

            RCC_HSEConfig(RCC_HSE_ON);

            //等待外部高速時鐘準(zhǔn)備好

            HSEStartUpStatus=RCC_WaitForHSEStartUp();


            上一頁 1 2 下一頁

            關(guān)鍵詞: STM32實時時鐘RT

            評論


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

            關(guān)閉