• stm32 rtc时钟 RTC_WaitForSynchro();死循环解决办法


    内部晶振低速时钟40KHZ    在if外开启时钟

    //实时时钟配置
    //初始化RTC时钟,同时检测时钟是否工作正常
    //BKP->DR1用于保存是否第一次配置的设置
    //返回0:正常
    //其他:错误代码

    u8 RTC_Init(void)
    {
    //检查是不是第一次配置时钟
    u8 temp=0;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟
    PWR_BackupAccessCmd(ENABLE); //使能后备寄存器访问
    RCC_LSICmd(ENABLE); //设置内部低速晶振(LSI)
    if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050) //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
    {
    //RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟
    //PWR_BackupAccessCmd(ENABLE); //使能后备寄存器访问
    BKP_DeInit(); //复位备份区域
    //RCC_LSEConfig(RCC_LSE_ON); //设置外部低速晶振(LSE),使用外设低速晶振
    // while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) //检查指定的RCC标志位设置与否,等待低速晶振就绪
    // {
    // temp++;
    // delay_ms(10);
    // }
    //RCC_LSICmd(ENABLE); //设置内部低速晶振(LSI)
    while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) //检查指定的RCC标志位设置与否,等待低速晶振就绪
    {
    temp++;
    delay_ms(10);
    }
    if(temp>=250)return 1;//初始化时钟失败,晶振有问题
    // RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); //设置RTC时钟(RTCCLK),选择LSI作为RTC时钟
    RCC_RTCCLKCmd(ENABLE); //使能RTC时钟
    RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
    RTC_WaitForSynchro(); //等待RTC寄存器同步
    RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断
    RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
    RTC_EnterConfigMode();/// 允许配置
    // RTC_SetPrescaler(32767); //设置RTC预分频的值
    RTC_SetPrescaler(40000); //设置RTC预分频的值
    RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
    RTC_Set(2017,3,6,0,0,0); //设置时间
    RTC_ExitConfigMode(); //退出配置模式
    BKP_WriteBackupRegister(BKP_DR1, 0X5050); //向指定的后备寄存器中写入用户程序数据
    }
    else//系统继续计时
    {

    RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成
    RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断
    RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
    }
    RTC_NVIC_Config();//RCT中断分组设置
    RTC_Get();//更新时间
    return 0; //ok

    }

  • 相关阅读:
    资源 | 辟谣平台
    数据分析常用思维
    数据分析常用工具
    杂谈 | 标准化和个性化
    杂谈 | 学以致用
    杂谈 | 工具思维的陷阱
    杂谈 | 习得性无助&习得性乐观
    spark连接mysql
    spark累加器
    java操作excel数据写入map集合并按照value排序
  • 原文地址:https://www.cnblogs.com/yekongdexingxing/p/6514174.html
Copyright © 2020-2023  润新知