打印
[STM32F1]

修改 RTC_CRL_PRLL 失败!

[复制链接]
475|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新下级学|  楼主 | 2021-2-27 20:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 新下级学 于 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;
        }
        



使用特权

评论回复
沙发
香水城| | 2021-2-28 21:45 | 只看该作者
你在RTC寄存器做写操作之前,就需要保证RTOFF为1,否则写不成功的。

你结合官方RTC例程及相关章节检查下你的代码,看看哪里有问题。

使用特权

评论回复
板凳
新下级学|  楼主 | 2021-3-1 09:38 | 只看该作者
香水城 发表于 2021-2-28 21:45
你在RTC寄存器做写操作之前,就需要保证RTOFF为1,否则写不成功的。

你结合官方RTC例程及相关章节检查下你 ...

我前面的   while ((RTC->CRL & RTC_CRL_RTOFF) == 0) ;   就是保证 RTOFF 为 1 啊

使用特权

评论回复
地板
新下级学|  楼主 | 2021-3-15 16:53 | 只看该作者
自己顶。求高人指点!

使用特权

评论回复
5
新下级学|  楼主 | 2021-3-25 15:59 | 只看该作者
找到原因了:要去掉

//恢复后备区域的写保护
PWR->CR &= ~PWR_CR_DBP;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

254

主题

668

帖子

3

粉丝