打印

RTC时钟问题

[复制链接]
2417|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xduct|  楼主 | 2010-7-30 23:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
手里有一块板子,用以前写好的程序(RTC做万年历),在其他板子(开发板、自己设计的电路板)上,时钟都能正常使用,但是在新做的板子上,每次上电,时钟就初始化了,感觉备份区的寄存器掉电后,内容变了。不知道哪位遇到过这样的问题
沙发
香水城| | 2010-7-31 11:10 | 只看该作者
估计电路问题比较大。

使用特权

评论回复
板凳
灯火楼台| | 2010-7-31 11:14 | 只看该作者
应该是电路问题~或者芯片和液晶显示器的问题~

使用特权

评论回复
地板
xduct|  楼主 | 2010-7-31 15:41 | 只看该作者
昨天晚上太晚了,发代码和电路的时候不能操作,马上把代码跟电路图送上

使用特权

评论回复
5
xduct|  楼主 | 2010-7-31 15:45 | 只看该作者
本帖最后由 xduct 于 2010-7-31 16:10 编辑

int main(void)
{
#ifdef DEBUG
  debug();
#endif
        
        
        /***********时钟配置************/
  RCC_Configuration();

        /***********嵌套中断配置********/
  NVIC_Configuration();

        /***********GPIO配置************/
        GPIO_Configuration();

        GPIO_WriteBit(GPIOB, GPIO_PIN_RUN_LED, Bit_SET);
        /***********实时时钟配置********/
        

        /***********系统滴答时钟配置****/
        SysTick_Config();

        /***********USART配置***********/
        USART_Configuration();
         RTC_Configuration();

        /***********看门配置************/
        IWDOG_Configuration();

        /***********存储器配置**********/
  SPI_FLASH_Init();

        /***********定时器**************/
        TIM_Configuration();

        /***********ADC配置*************/
        ADC_Configuration();
        DAC_Configuration();
        Delay(50);        
        Send_Reset();


//        GPIO_WriteBit(GPIOB, GPIO_PIN_RUN_LED, Bit_RESET);
        TR_FLAG1 = 0x80;
  TR_FLAG2 = 0x80;
        TR_FLAG3 = 0x80;
        Run_Lost = 0;
        Time_Read_Flag = 0;
        UART_Send_Flag = 0x00;



  timer0 = 0;
  Soil_Read_Flag = 1;

           
        while (1)
        {
             ....................
                }
}这个是主函数

使用特权

评论回复
6
xduct|  楼主 | 2010-7-31 15:46 | 只看该作者
/*******************************************************************************
* Function Name  : RTC_Configuration
* Description    : Configures the RTC.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RTC_Configuration(void)
{
        char text[20];
        int j;
        u32 v;
  /* Enable PWR and BKP clocks */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);  

  /* Allow access to BKP Domain */
  PWR_BackupAccessCmd(ENABLE);
        v =  BKP_ReadBackupRegister(BKP_DR1);
        sprintf(text,"BKP_DR1 = 0x%x\n",v);
        for(j=0;text[j] != '\0';j++)
        {
                TxBuffer1[j] = text[j];
        }
         
  TxCounter1 =j;
  TxPointer1 = 0;

  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
        while(TxPointer1 < TxCounter1)
        {
                IWDG_ReloadCounter();
                __nop();
        }
  TR_FLAG1 = 0x80;
        if (BKP_ReadBackupRegister(BKP_DR1)!=0xA5A5)
                {               
                 
  /* Reset Backup Domain */
                  BKP_DeInit();
                        BKP_WriteBackupRegister(BKP_DR2,2008);
                  BKP_WriteBackupRegister(BKP_DR3,1);
                  BKP_WriteBackupRegister(BKP_DR4,1);
            BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
                        RTC_SetCounter(0x0);       


                  /* Enable LSE */
                  RCC_LSEConfig(RCC_LSE_ON);
                  /* Wait till LSE is ready */
                  while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
                  {}
               
                  /* Select LSE as RTC Clock Source */
                  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
               
                  /* Enable RTC Clock */
                  RCC_RTCCLKCmd(ENABLE);
               
                  /* Wait for RTC registers synchronization */
                  RTC_WaitForSynchro();
               
                  /* Wait until last write operation on RTC registers has finished */
                  RTC_WaitForLastTask();
                         RTC_WaitForSynchro();
                        RTC_WaitForLastTask();
                  /* Enable the RTC Second */
                  RTC_ITConfig(RTC_IT_SEC, ENABLE);
               
                  /* Wait until last write operation on RTC registers has finished */
                  RTC_WaitForLastTask();
               
                  /* Set RTC prescaler: set RTC period to 1sec */
                        RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
                //  RTC_SetPrescaler(16383); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
                  /* Wait until last write operation on RTC registers has finished */
                  RTC_WaitForLastTask();
                       
                }
                else
                {
                        RTC_WaitForLastTask();
            /* Enable the RTC Second */
            RTC_ITConfig(RTC_IT_SEC, ENABLE);
            RTC_WaitForLastTask();
                }       
       
                CheckForDaysElapsed();
}

这个是RTC配置

使用特权

评论回复
7
xduct|  楼主 | 2010-7-31 15:48 | 只看该作者
感觉程序应该没啥问题,因为在别的板子上都能正常使用,现在主要调试时钟跟串口1.

使用特权

评论回复
8
xduct|  楼主 | 2010-7-31 15:51 | 只看该作者
现在每次上电的时候,从串口输出备份区BKP_DR1数值,同时输出时钟,发现每次备份区都是0,时钟是默认的2008-01-01 00:00:00

使用特权

评论回复
9
xduct|  楼主 | 2010-7-31 16:01 | 只看该作者

电路.jpg (739.22 KB )

电路.jpg

使用特权

评论回复
10
xduct|  楼主 | 2010-7-31 16:03 | 只看该作者
电路跟其它板子的电路对比了一下,感觉没有啥区别

使用特权

评论回复
11
xduct|  楼主 | 2010-7-31 16:07 | 只看该作者
备份区复位只有两种可能,不知道是哪个原因引起的。

未命名.jpg (31.68 KB )

未命名.jpg

使用特权

评论回复
12
yybj| | 2010-8-2 20:33 | 只看该作者
其他板子上没问题的话,应该就是硬件的问题

使用特权

评论回复
13
shagua0916| | 2010-8-3 16:00 | 只看该作者
TAPER注意到没?

使用特权

评论回复
14
xduct|  楼主 | 2010-8-12 13:00 | 只看该作者
找到问题了,硬件问题,电池连接的稳压器件选型有问题,电路时别的同事设计的,别的板子一直用的可以,他提的器件不小心提错了,掉电后片子一脚根本没有电压。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

44

帖子

0

粉丝