本帖最后由 新下级学 于 2021-2-28 09:48 编辑
芯片 STM32 F103 C8 T6
目标很简单:修改 RTC_CRL_PRLL 之后让 RTC 跑起来。但修改之后,RTC_CRL_RTOFF 总是不为 1。现在只好先不改 RTC_CRL_PRLL,让 RTC 跑起来再说。
下面是代码,请高人指点,多谢!!!
RCC->APB1ENR |= RCC_APB1ENR_PWREN;//enable power clock RCC->APB1ENR |= RCC_APB1ENR_BKPEN;//enable power clock
RCC->CSR |= RCC_CSR_LSION;
//启动 LSI,直到它稳定
RCC->CSR |= RCC_CSR_LSION;
while ((RCC->CSR & RCC_CSR_LSIRDY) == 0)
{
}
//关闭后备区域的写保护
PWR->CR |= PWR_CR_DBP;
//把 RTCSEL 设为 10,以 LSI 为 RTC 的时钟源
RCC->BDCR |= (RCC_BDCR_RTCEN | RCC_BDCR_RTCSEL_1);
//恢复后备区域的写保护
PWR->CR &= ~PWR_CR_DBP;
while ((RTC->CRL & RTC_CRL_RTOFF) == 0) ;
RTC->CRL |= RTC_CRL_CNF;
//修改 RTC 的 PRLL
RTC->PRLL = 0X3;
RTC->CRL &= ~RTC_CRL_CNF;
while ((RTC->CRL & RTC_CRL_RTOFF) == 0) ; //**** 总是卡在这句
//反复读 RTC 的 CNT,看它变不变
while (1)
{
rtc_cnt.u16[1] = RTC->CNTH;
rtc_cnt.u16[0] = RTC->CNTL;
llll = rtc_cnt.cnt;
if (llll > 3)
llll += 2;
}
|