打印

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

[复制链接]
1316|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
811909|  楼主 | 2018-12-29 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32使用rtc,下完程序keil就会死掉,试了好多次了,就是不行,去掉RTC初始化之后就好了,奇葩啊,我用jlink下完程序,还没开始跑keil就死掉了。去掉RTC之后就很正常。有没有哪位大虾碰到过了
评论
刘方远 2019-1-2 08:28 回复TA
32.768K晶振两端并联一个10M电阻试试 
zyj9490 2018-12-31 20:41 回复TA
没有起振32768,如果RTC的源变成HRC会正常的,不过停电RTC就不会走了。 

相关帖子

沙发
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

粉丝