STM32L431采用LSI (32kHz)作为 RTC 的时钟源,每秒钟 RTC_CNT 计数器递增 1,写一个RTC初始化函数
时间: 2024-03-02 18:52:01 浏览: 21
好的,以下是一个简单的RTC初始化函数,可以供参考:
```c
void RTC_Init(void)
{
// 使能PWR和RTC时钟
RCC_APB1ENR1 |= RCC_APB1ENR1_PWREN;
RCC_APB1ENR1 |= RCC_APB1ENR1_RTCAPBEN;
// 进入RTC初始化模式
RTC_CR &= ~(RTC_CR_WUTE | RTC_CR_FMT | RTC_CR_ALRAE | RTC_CR_ALRBE | RTC_CR_TSE | RTC_CR_WUCLKSEL | RTC_CR_BYPSHAD);
// 等待RTC寄存器同步
RTC_WaitForSynchro();
// 设置RTC时钟源
RCC_CSR |= RCC_CSR_LSION; // 使能LSI
while((RCC_CSR & RCC_CSR_LSIRDY) == 0); // 等待LSI稳定
RCC_CSR &= ~RCC_CSR_RTCSEL; // 选择LSI为RTC时钟源
// 设置RTC预分频器
RTC_PRER = (127 << RTC_PRER_PREDIV_S_Pos) | (255 << RTC_PRER_PREDIV_A_Pos); // 使RTC时钟为1Hz
// 退出RTC初始化模式
RTC_CR &= ~RTC_CR_INIT;
while((RTC_ISR & RTC_ISR_INITF) != 0); // 等待RTC退出初始化模式
}
```
需要注意的是,以上代码只是一个简单的RTC初始化函数,实际使用中需要根据具体需求进行修改和完善。例如,需要设置RTC闹钟、中断等功能。