pdf

Introduction to the RTC calibration function of the STM32F microcontroller

  • 2013-08-11
  • 71.11KB
  • Points it Requires : 2

There is a backup register (BKP) in STM32. One of its functions is to store the check register of the RTC check value, that is, it has the RTC calibration function. Output the RTC calibration clock, RTC alarm or second pulse on the PC13 pin. In the program, there is #define RTCClockOutput_Enable /*RTC Clock/64 is output on tamper pin(PC.13)*/ BKP can be used to store 84 bytes of user application data. They are in the backup domain. When the Vdd power supply is cut off, they are still powered by Vbat. Determine whether the value of RTC backup register 1 is a certain value written in advance. If not, it means that the RTC is powered on for the first time and the RTC needs to be configured. There are also corresponding library functions for BKP. u16 BKP_ReadBackupRegister(u16 BKP_DR) reads data from the specified backup register. If it is not a previously written value, you need to configure the RTC. The function RTC_Configuration(void) performs the following operations to enable access to the backup register and RTC: 1. Set the PWREN and BKPEN bits of the register RCC_APB1ENR to enable the power supply and backup interface clock 2. Set the DBP bit of the register PWR_CR to enable access to the backup register and RTC. Corresponding programs: 1.RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //Corresponding operation 1 2.PWR_BackupAccessCmd(ENABLE); //Corresponding operation 2 The RTC module uses the external LSE clock--32.768 crystal oscillator as the clock, which is started and shut down by the register. After waiting for the state to stabilize, the register indicates whether the LSE crystal oscillator is stable. 1.RCC_LSEConfig(RCC_LSE_ON);//Enable LSE 2./* Wait for the external crystal oscillator to output stably*/ 3.while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) 4.{} After the LSE state is stable, use the external 32.768KHz crystal oscillator as the RTC clock, which is implemented by the library function RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE): 1.RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //Use LSE as RTC clock 2.RCC_RTCCLKCmd(ENABLE); //Enable RTC. It can only be called after the RTC clock is selected through RCC_RTCCLKConfig1.RTC_WaitForSynchro();//Wait for the RTC register to be synchronized with the APB clock?? 2./* Wait until last write operation on RTC registers has finished */ 3.RTC_WaitForLastTask(); 4./* Enable the second interrupt of RTC*/ 5.RTC_ITConfig(RTC_IT_SEC, ENABLE);//Before enabling the interrupt, you must call RTC_WaitForLastTask(); 1.RTC_SetPrescaler(32767);//Set the prescaler value of RTC The role of RTC_WaitForLastTask(): The software accesses the prescaler value, counter value, etc. of the RTC through the APB1 interface, but the related readable registers are only updated on the rising edge of the RTC clock that is resynchronized with the RTC APB1 clock. The same is true for the RTC flag. This means that if the APB1 interface has been closed and the read operation is just after APB1 has been reopened, the RTC register value read from APB1 may have been corrupted before the first internal register update. Therefore, if the APB1 interface of the RTC is in the disabled state when reading the RTC register, the software must wait for the RSF bit (register synchronization flag) in the RTC_CRL register to be set to \'1\' by hardware. When the data read by the RTC is the data previously written to the BKP, the function RCC_GetFlagStatus() will be called to read certain bits in the status/control register RCC_CSR to determine the status after startup, the power-off/power-on reset flag or the reset flag. If the corresponding flag bit is 1, there is no need to reconfigure the RTC. Finally, clear the reset flag of the RCC, void RCC_ClearFlag(void) After setting the second interrupt, set the interrupt handling function in stm32f10x_it.c. In the interrupt function, first determine whether a second interrupt has occurred. If so, clear the corresponding interrupt flag. Another important situation is that when the time reaches 23:59:59, the next moment time is 00:00:00. 1.if (RTC_GetCounter() == 0x00015180) //Get the value of the RTC counter 2.RTC_SetCounter(0x0); //Set the value of the RTC counter By reading the value of the RTC counter, it can be converted into hours: minutes: seconds and printed out. At the same time, if the RTC is configured for the first time, the user needs to enter the time, and then call Time_Adjust() to convert the user-entered time into the RTC count value and write it to the corresponding register.

unfold

You Might Like

Uploader
Timson
 

Recommended ContentMore

Popular Components

Just Take a LookMore

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号
×