stm32使用rtc,下完程序keil就会死掉

[复制链接]
1516|5
 楼主| 811909 发表于 2018-12-29 14:58 | 显示全部楼层 |阅读模式
stm32使用rtc,下完程序keil就会死掉,试了好多次了,就是不行,去掉RTC初始化之后就好了,奇葩啊,我用jlink下完程序,还没开始跑keil就死掉了。去掉RTC之后就很正常。有没有哪位大虾碰到过了

评论

32.768K晶振两端并联一个10M电阻试试  发表于 2019-1-2 08:28
没有起振32768,如果RTC的源变成HRC会正常的,不过停电RTC就不会走了。  发表于 2018-12-31 20:41
kingkits 发表于 2018-12-29 15:27 | 显示全部楼层
没给RTC供电吧?又或者RTC初始化没做好
handlike 发表于 2018-12-29 15:52 | 显示全部楼层
初次上电要必须执行一次RTC初始化,直接执行读取时间是不行的。执行初始化一次后,再上电就可以直接读取时间。
参考一下程序,if部分第一次是必须要满足的
u8 RTC_Init(void)
{
        //检查是不是第一次配置时钟
static        u16 temp=0;//,tem;

//        if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)                //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
//     tem==E2prom_ReadByte(99);
          if(0xAA!=receive_buf[98])
                {                                
                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&&temp<65530)        //检查指定的RCC标志位设置与否,等待低速晶振就绪
                        {
                        temp++;
//                        delay_ms(10);
                        }
                if(temp>=95530)return 1;//初始化时钟失败,晶振有问题            
                RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);                //设置RTC时钟(RTCCLK),选择LSE作为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_WaitForLastTask();        //等待最近一次对RTC寄存器的写操作完成
                RTC_Set(2018,07,14,8,35,30);  //设置时间       
                RTC_ExitConfigMode(); //退出配置模式  
//                BKP_WriteBackupRegister(BKP_DR1, 0X5050);        //向指定的后备寄存器中写入用户程序数据
    while(RESET==E2prom_WriteByte(98,0xAA));
                }
          else//系统继续计时
                {

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

}               
山东电子小菜鸟 发表于 2018-12-31 17:17 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

144

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部