新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32學習筆記——實時時鐘RTC

        STM32學習筆記——實時時鐘RTC

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

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

        //通過該例程,學會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標志位設置與否,這里檢查POR/PDR復位

        //{

        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外設時鐘具體說明詳見《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

        //清除復位標志

        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:端口位設置/復位寄存器,詳細的GPIO寄存器結(jié)構(gòu)體說明見《STM32函數(shù)說明》P120

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

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

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

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

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

        }

        }//while

        }

        voidDelay(vu32nCount)

        {

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

        }

        voidRCC_Configuration(void)

        {

        //復位RCC外部設備寄存器到默認值

        RCC_DeInit();

        //打開外部高速晶振

        RCC_HSEConfig(RCC_HSE_ON);

        //等待外部高速時鐘準備好

        HSEStartUpStatus=RCC_WaitForHSEStartUp();


        上一頁 1 2 下一頁

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

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 克东县| 民丰县| 玉树县| 洪湖市| 宁津县| 克山县| 蒲江县| 莱西市| 内江市| 宽城| 彰武县| 水富县| 云阳县| 台湾省| 方山县| 龙岩市| 虎林市| 淮滨县| 无棣县| 涡阳县| 锡林郭勒盟| 潍坊市| 武邑县| 阜城县| 河池市| 阜宁县| 通海县| 安福县| 石河子市| 罗江县| 松原市| 灵武市| 尤溪县| 都匀市| 丹东市| 南安市| 湘潭市| 湛江市| 千阳县| 陇川县| 盐亭县|