BKPUNIX

  ·第二条等待寄存器同步,可以参考前边RTC框图部分。在图中可以看到有两个时钟,PCLK1和RTCCLK,PCLK1在主电源掉电时会停止,为了保证RTC主电源掉电正常工作,RTC里的寄存器都是在RTCCLK同步下进行变更的。当用PCLK驱动的总线去读取RTCCLK驱动的寄存器时,会有时钟不同步的问题,RTC寄存器只有在RTCCLK上升沿更新,但是PCLK1的频率36MHz远大于RTCCLK的频率32KHz,如果在APB1刚开启时就立刻读取RTC寄存器,有可能RTC寄存器还没有更新到APB1总线上,这样读到的值就是错误的,通常读取到是0。

        所以在APB1总线刚开启时要等一下RTCCLK,只要RTCCLK来一个上升沿,RTC把他寄存器的值同步到APB1总线上,后续读写的值都是没问题的。只需要在初始化的时候调用一个等待同步的函数即可

        ·第三条设置CNF位,RTC会有一个进入配置模式的标志位,把这一位置1才能设置时间。这个操作在库函数中,每个写寄存器的函数都自动加上了这个操作,无需再次手动调用函数进入配置模式       

        ·第四条注意事项,只需要调用一个等待函数即可,类似于读写Flash芯片,写入之前需要先等待,如果上一次的写入还没完成,不能写入下一次。每次写入之后要等待RTOFF为1,只有RTOFF为1才代表写入完成。

        这个操作的原因是PLCK和RTCCLK的时钟频率不一样,用PCLK的频率写入之后,这个值还不能立刻更新到RTC的寄存器里,因为RTC寄存器时由RTCCLK驱动的,PCLK写完之后需要等待RTCCLK的时钟,RTCCLK来一个上升沿,值更新到RTC寄存器里,才完成整个写入过程。

相关推荐

  1. BKPUNIX

    2024-05-02 18:24:04       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 18:24:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 18:24:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 18:24:04       82 阅读
  4. Python语言-面向对象

    2024-05-02 18:24:04       91 阅读

热门阅读

  1. 单片机与Python串口通讯

    2024-05-02 18:24:04       30 阅读
  2. Python Json数据解析

    2024-05-02 18:24:04       31 阅读
  3. 单机多GPU的训练及debug中vscode下launch.json内容设置

    2024-05-02 18:24:04       31 阅读
  4. 【Golang】使用 GORM 的 Scopes 进行查询

    2024-05-02 18:24:04       31 阅读
  5. 设计模式之单例模式

    2024-05-02 18:24:04       29 阅读
  6. IntelliJ IDEA 常用快捷键

    2024-05-02 18:24:04       34 阅读
  7. C语言-单链表和双链表

    2024-05-02 18:24:04       27 阅读