5139|11

1万

帖子

25

TA的资源

裸片初长成(高级)

楼主
 

【我的 Nucleo 】RTC为什么读不出时间? [复制链接]



      参照例程对RTC做些修改,在仿真时RTC已经运行。

DEBUG时在运行后点停止,也发现RSF置位。此时再点 ” 运行 “ ,时钟会读出,但只读出这一次,以后再读RTC -> TR,就和前次的值一样



此帖出自stm32/stm8论坛

最新回复

https://bbs.eeworld.com.cn/forum ... 1&extra=#pid1801282 我今天晚上用CUBE试了一下。OK。 楼主可以玩玩。  详情 回复 发表于 2015-1-7 22:43
点赞 关注
 

回复
举报

1万

帖子

25

TA的资源

裸片初长成(高级)

沙发
 
找了半天问题也不知道在哪儿。

后来不用仿真器启动时就可以读出时间值了。

奇怪!
此帖出自stm32/stm8论坛
 
 

回复

131

帖子

2

TA的资源

一粒金砂(中级)

板凳
 
我也有过这种情况,有时候仿真会出现不稳定的情况,最好不要直接停在中断里读,最好是把值直接通过中口或屏显示出来,这样好些。
此帖出自stm32/stm8论坛
 
个人签名每个人心中都一片待开发的天空!
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

4
 
那就把程序修改了那么拉出来看看咯!
此帖出自stm32/stm8论坛

点评

void RTC_Config(void) { RTC_InitTypeDef RTC_InitStructure; RTC_TimeTypeDef RTC_TimeStructure; RTC_AlarmTypeDef RTC_AlarmStructure; if (RTC_ReadBackupRegister(RTC_BKP_DR0) != BKP_V  详情 回复 发表于 2015-1-7 10:10
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

5
 
本帖最后由 dontium 于 2015-1-7 10:17 编辑
蓝雨夜 发表于 2015-1-7 10:05
那就把程序修改了那么拉出来看看咯!

改动不大的。加色的字是有改动的部分
void RTC_Config(void)
{
        RTC_InitTypeDef RTC_InitStructure;
        RTC_TimeTypeDef RTC_TimeStructure;
        RTC_AlarmTypeDef  RTC_AlarmStructure;
        
        if (RTC_ReadBackupRegister(RTC_BKP_DR0) != BKP_VALUE)        //         RTC->BKP0R == 32F0?
        //if ( RTC->BKP0R != BKP_VALUE )
        {
                /*************************RTC configuration ***************************/
                /* Allow access to RTC */
                PWR_BackupAccessCmd(ENABLE);        
                //PWR->CR |= PWR_CR_DBP;                                // 0x0100

                /* Enable the LSE OSC */
                RCC_LSEConfig(RCC_LSE_ON);         //        原程序使用LSI
               

                /* Wait till LSE is ready */
                while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
                {
                }
               
                /* Select the RTC Clock Source */
                RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
                //RCC->BDCR |= RCC_RTCCLKSource_LSE;

                //SynchPrediv = 0x18F;                              
                //AsynchPrediv = 0x63;

                /* Enable the RTC Clock */
                RCC_RTCCLKCmd(ENABLE);
                //RCC->BDCR |= RCC_BDCR_RTCEN;

                /* Wait for RTC APB registers synchronisation */
                RTC_WaitForSynchro();
                /***********************************************************************/


                /* Configure the RTC data register and RTC prescaler */
                RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//AsynchPrediv;
                RTC_InitStructure.RTC_SynchPrediv = 0xFF;//SynchPrediv;
                RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
               
                /* Check on RTC init */
                if (RTC_Init(&RTC_InitStructure) == ERROR)
                {
                        DisplayString(20,100,"***** RTC Prescaler failed ",0xf800);    //      原程序用的是串口,这里直接在LCD上显示
                }

                /* Configure the time register */
                RTC_TimeRegulate();                        // 这个是输入时间的,改动很大,但并不是设置控制寄存器的
        }
        else
        {
                /* Check if the Power On Reset flag is set */
                if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)
                {
                        DisplayString(20,100,"Power On Reset occurred....", 0xf800);
                }
                /* Check if the Pin Reset flag is set */
                else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)
                {
                        DisplayString(20,100,"External Reset occurred....",0xf800);
                }
               
                DisplayString(20,120,"No need to configure RTC....",0xf800);
            
                /* Enable the PWR clock */
                //RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); // 已经打开了。

            /* Allow access to RTC */
            PWR_BackupAccessCmd(ENABLE);

                /* Wait for RTC APB registers synchronisation */
                RTC_WaitForSynchro();

                /* Clear the RTC Alarm Flag */
                RTC_ClearFlag(RTC_FLAG_ALRAF);


            /* Display the RTC Time and Alarm */
            //RTC_TimeShow();
                RTC_GetTime(RTC_Format_BCD, &RTC_TimeStructure);
            //RTC_AlarmShow();
                RTC_GetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure);
        }

}
此帖出自stm32/stm8论坛
 
 
 

回复

6107

帖子

4

TA的资源

版主

6
 
本帖最后由 damiaa 于 2015-1-7 13:13 编辑

直接跑例子试试。只把它改成外部晶体,或者用CUBE生成代码 NUCLEO的外部时钟好像是跑得起来。
此帖出自stm32/stm8论坛

点评

那个是显示时间的。放在其它地方。 现在我纳闷的是,把仿真器拨掉重新启动就可以正常显示时间了。只是在仿真调试时出现读不出时间现象。  详情 回复 发表于 2015-1-7 13:12
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

7
 
damiaa 发表于 2015-1-7 12:06
RTC_TimeShow不去掉试试。NUCLEO的外部时钟好像是跑得起来。


那个是显示时间的。放在其它地方。
现在我纳闷的是,把仿真器拨掉重新启动就可以正常显示时间了。只是在仿真调试时出现读不出时间现象。


此帖出自stm32/stm8论坛
 
 
 

回复

6107

帖子

4

TA的资源

版主

8
 
本帖最后由 damiaa 于 2015-1-7 13:25 编辑

仿真调试好像时钟是有影响,有时候跑得是内部的时钟还是怎么回事。32.768K不记得是不是 受影响。以前跑051的时候也是折腾过。晶体要选MC306 然后边上是6.8PF的电容。
此帖出自stm32/stm8论坛

点评

现在不是内部外部的问题,在DEBUG时,可以看到时间寄存器的数据,但显示出来的却不是,而是0。 象外部晶体振荡器的振荡与否,在电路设计上,只要看看手册,就可以避免不必要的麻烦。网上曾有过说STM32的振荡器  详情 回复 发表于 2015-1-7 13:57
 
 
 

回复

6107

帖子

4

TA的资源

版主

9
 
搞好后还是稳定的。以前做过几台样机跑过几个月都没事。
此帖出自stm32/stm8论坛
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

10
 
damiaa 发表于 2015-1-7 13:15
仿真调试好像时钟是有影响,有时候跑得是内部的时钟还是怎么回事。32.768K不记得是不是 受影响。以前跑051的时候也是折腾过。晶体要选MC306 然后边上是6.8PF的电容。


现在不是内部外部的问题,在DEBUG时,可以看到时间寄存器的数据,但显示出来的却不是,而是0。
象外部晶体振荡器的振荡与否,在电路设计上,只要看看手册,就可以避免不必要的麻烦。网上曾有过说STM32的振荡器怎么怎么不好,我觉得这些人应该被打PP。



此帖出自stm32/stm8论坛
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

11
 
围观一下,自带的RTC,慎用
此帖出自stm32/stm8论坛
 
个人签名

So TM what......?

 

 

回复

6107

帖子

4

TA的资源

版主

12
 
https://bbs.eeworld.com.cn/forum ... 1&extra=#pid1801282 我今天晚上用CUBE试了一下。OK。 楼主可以玩玩。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表