分享

关于STM32使用RTC时复位后程序死在 RTC

 败败0619 2013-08-13

出现的现象:使用野火的RTC例程,在软件仿真时如果不需要配置,则程序会死在 RTC_WaitForSynchro() 函数中。而下载到硬件上时,有时候可以跑,有时候也会在该函数中死循环。

可能的原因:
首先,一定要确认是否使能了对后备寄存器和RTC的访问。
系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操
作。执行以下操作将使能对后备寄存器和RTC的访问:
● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问
PWR_BackupAccessCmd(ENABLE);
另外还要使能RTC时钟 RCC_RTCCLKCmd(ENABLE); 虽然该函数的说明中说只在RCC_RTCCLKConfig()函数调用之后才能调用,但是实际上如果不调用该函数,仿真时就会在 RTC_WaitForSynchro() 函数中死循环,等待RTC时钟同步。
也就是说,不论是否需要配置RTC寄存器,每次系统复位都需要执行如下操作:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_RTCCLKCmd(ENABLE);

其次,STM32的RTC对外部LSE要求比较高,最好使用负载电容为6pF的晶振。在芯片的DataSheet中有明确的说明,不能使用12.5pF的晶振。“ To avoid exceeding the maximum value of CL1 and CL2 (15 pF) it is strongly recommended to use a resonator with a load capacitance CL≤ 7 pF. Never use a resonator with a load
capacitance of 12.5 pF.”

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多