在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            STM32 RTC小結(jié)

            作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
            RTC可以用來設(shè)置實時時鐘,并產(chǎn)生秒中斷或鬧鐘中斷。在芯片有電源供電的情況下,系統(tǒng)掉電后仍能保持時鐘計時。

            RTC設(shè)置需要涉及對電源(PWR)、備份區(qū)域(BKP)和RCC部分寄存器的改寫。

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

            RTC所需的晶振在RCC部分的寄存器中選擇。在芯片時鐘系統(tǒng)中對RTC的時鐘提供如下圖所示。RTC時鐘可以從LSI, LSE和HSE分頻中選擇。這些需要對RCC寄存器的一些位進(jìn)行設(shè)置。

            RTC的預(yù)分頻器、計數(shù)器和鬧鐘寄存器在備份區(qū)域中,以保證系統(tǒng)掉電后,在電池供電時仍能計數(shù),如下圖所示。在電源部分,系統(tǒng)復(fù)位后,將禁止向備份區(qū)域?qū)懭雰?nèi)容,因此,若要配置RTC,需要在電源部分允許對備份區(qū)域的寫入。

            備份區(qū)中有留給用戶寫入數(shù)據(jù)的空間。由于掉電后備份區(qū)中的內(nèi)容仍保持,可以通過對用戶寫入數(shù)據(jù)的比較,知道備份區(qū)中的設(shè)置(尤其是RTC設(shè)置)是否存在。若不存在,需要清空備份區(qū)并重新寫入;若存在,則只需再次寫入備份區(qū)之外的RTC_CR。

            由于用戶是通過APB1接口讀寫RTC寄存器,在上電之后,需要先等待APB1接口與RTC同步完成,否則讀取的RTC值可能有誤;完成同步以RTC_CRL的RSF位置1為標(biāo)志。對于寫RTC寄存器,先查詢RTC_CRL的RTOFF位,直到為1,說明上一次操作已經(jīng)完成;再CNF置1,進(jìn)入配置模式;寫寄存器;CNF置0,退出配置模式;等待RTOFF位為1,說明本次寫入已經(jīng)完成。

            下面貼一個可以跑通的簡化流程,完成按秒計數(shù)的功能。

            1. #include"stm32f10x.h"
            2. #include"stm32_eval.h"
            3. #include
            4. #include"stm3210c_eval_lcd.h"
            5. volatileuint32_tTimeDisplay=0;
            6. intmain(void)
            7. {
            8. /*!
            9. thisisdonethroughSystemInit()functionwhichiscalledfromstartup
            10. file(startup_stm32f10x_xx.s)beforetobranchtoapplicationmain.
            11. ToreconfigurethedefaultsettingofSystemInit()function,referto
            12. system_stm32f10x.cfile
            13. */
            14. RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);
            15. PWR_BackupAccessCmd(ENABLE);
            16. NVIC_Configuration();
            17. STM3210C_LCD_Init();
            18. LCD_Clear(LCD_COLOR_WHITE);
            19. LCD_SetTextColor(LCD_COLOR_BLUE);
            20. if(BKP_ReadBackupRegister(BKP_DR1)!=0xA5A5)
            21. {
            22. RTC_Configuration();
            23. Time_Adjust();
            24. BKP_WriteBackupRegister(BKP_DR1,0xA5A5);
            25. }
            26. else
            27. {
            28. RTC_WaitForSynchro();
            29. RTC_WaitForLastTask();
            30. RTC_ITConfig(RTC_IT_SEC,ENABLE);
            31. RTC_WaitForLastTask();
            32. }
            33. RCC_ClearFlag();
            34. Time_Show();
            35. }
            36. voidNVIC_Configuration(void)
            37. {
            38. NVIC_InitTypeDefNVIC_InitStructure;
            39. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
            40. NVIC_InitStructure.NVIC_IRQChannel=RTC_IRQn;
            41. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
            42. NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
            43. NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
            44. NVIC_Init(&NVIC_InitStructure);
            45. }
            46. voidRTC_Configuration(void)
            47. {
            48. BKP_DeInit();
            49. RCC_LSEConfig(RCC_LSE_ON);
            50. while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET)
            51. {}
            52. RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
            53. RCC_RTCCLKCmd(ENABLE);
            54. RTC_WaitForSynchro();
            55. RTC_WaitForLastTask();
            56. RTC_ITConfig(RTC_IT_SEC,ENABLE);
            57. RTC_WaitForLastTask();
            58. RTC_SetPrescaler(32767);/*RTCperiod=RTCCLK/RTC_PR=(32.768KHz)/(32767+1)*/
            59. RTC_WaitForLastTask();
            60. }
            61. uint32_tTime_Regulate(void)
            62. {
            63. uint32_tTmp_HH=0x00,Tmp_MM=0x00,Tmp_SS=0x00;
            64. return((Tmp_HH*3600+Tmp_MM*60+Tmp_SS));
            65. }
            66. voidTime_Adjust(void)
            67. {
            68. RTC_WaitForLastTask();
            69. RTC_SetCounter(0);//Time_Regulate());
            70. RTC_WaitForLastTask();
            71. }
            72. voidTime_Display(uint32_tTimeVar)
            73. {
            74. uint32_tTHH=0,TMM=0,TSS=0;
            75. charbuf[15];
            76. /*ResetRTCCounterwhenTimeis23:59:59*/
            77. if(TimeVar==0x0001517F)
            78. {
            79. RTC_WaitForLastTask();
            80. RTC_SetCounter(0x0);
            81. /*WaituntillastwriteoperationonRTCregistershasfinished*/
            82. RTC_WaitForLastTask();
            83. }
            84. /*Computehours*/
            85. THH=TimeVar/3600;
            86. /*Computeminutes*/
            87. TMM=(TimeVar%3600)/60;
            88. /*Computeseconds*/
            89. TSS=(TimeVar%3600)%60;
            90. sprintf(buf,"%0.2d:%0.2d:%0.2d/r",THH,TMM,TSS);
            91. LCD_DisplayStringLine(LCD_LINE_2,buf);
            92. //printf("Time:%0.2d:%0.2d:%0.2d/r",THH,TMM,TSS);
            93. }
            94. /**
            95. *@briefShowsthecurrenttime(HH:MM:SS)ontheHyperterminal.
            96. *@paramNone
            97. *@retvalNone
            98. */
            99. voidTime_Show(void)
            100. {
            101. //printf("/n/r");
            102. /*Infiniteloop*/
            103. while(1)
            104. {
            105. /*If1shasbeenelapased*/
            106. if(TimeDisplay==1)
            107. {
            108. uint32_tCounter=0;
            109. Counter=RTC_GetCounter();
            110. Time_Display(Counter);
            111. TimeDisplay=0;
            112. }
            113. }
            114. }
            115. voidRTC_IRQHandler(void)
            116. {
            117. if(RTC_GetITStatus(RTC_IT_SEC)!=RESET)
            118. {
            119. RTC_WaitForLastTask();
            120. /*CleartheRTCSecondinterrupt*/
            121. RTC_ClearITPendingBit(RTC_IT_SEC);
            122. /*ToggleLED1*/
            123. //STM_EVAL_LEDToggle(LED1);
            124. /*Enabletimeupdate*/
            125. TimeDisplay=1;
            126. /*WaituntillastwriteoperationonRTCregistershasfinished*/
            127. RTC_WaitForLastTask();
            128. }
            129. }




            關(guān)鍵詞: STM32RTC小

            評論


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

            關(guān)閉