OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2936|回复: 4

使用cubemx加上原子哥的RTC程序,出现时钟不正常情况,求助

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-9-25
在线时间
3 小时
发表于 2019-1-7 22:28:39 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 zldiy 于 2019-1-7 22:29 编辑

使用的是STM32F103RBT6芯片,外部使用CR2032电池通过二极管链接到芯片的VBAT引脚;芯片时钟使用外部32768晶振;软件上使用了原子哥的日历算法,只是驱动采用了CUBEmx生成的驱动。软件参考链接:  参考资料

出现的问题: 当外部电源完全断电再重新上电后,发现时钟的计数器莫名的多了很多,可以看下图(使用串口直接打印RTC寄存器的值).  也不是每一次都会出现这类情况,是偶然出现的情况。根据网上介绍的资料做个简单修改但是现象依然存在,请大侠帮忙看看是哪里出现的问题;十分感谢;
1546870976(1).png

主程序中对时钟的配置程序:
/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInit;

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_ADC;
  PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
  PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure the Systick interrupt time
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}



RTC.rar

6.51 KB, 下载次数: 3

RTC驱动程序程序

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-9-25
在线时间
3 小时
 楼主| 发表于 2019-1-8 14:47:06 | 显示全部楼层
希望有遇到类似问题的大侠帮忙了;谢谢
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-1-8 15:04:04 | 显示全部楼层
帮顶~~
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-9-25
在线时间
3 小时
 楼主| 发表于 2019-1-8 22:21:29 | 显示全部楼层

非常感谢版主的支持。
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-9-25
在线时间
3 小时
 楼主| 发表于 2019-1-11 12:25:42 | 显示全部楼层
1547180186(1).png 1547180892.png
因为是每次都是上电时发现时间变化了。所以把重点发到供电电源上;整个系统采用DC24V供电,使用TD1507 - 5V降压,后面串联LM1117-3.3降压到3.3V;  
考虑电源纹波。在5V电源上大约有80mv-150khz的纹波。 在3.3V上基本没有纹波。

    按照纹波原因导致的上电时,RTC计时器计时时钟变化(或者突然增加),导致计时时间高于正常之前时间。  我将TD1507芯片拆下,更换使用7805作为稳压,示波器测量基本没有纹波;但是反复上电时依然有时间变化的情况。  此时已经进死坑了。。。。。

    还是从硬件方便考虑这个问题:假设芯片外部使用的无源32768晶振在上电时有频率不稳定情况,或者过快的情况,我更换使用外部有源晶振(JFVNY  XO14NYA  32768,一款军用的有源晶振);将晶振输出电源通过飞线(4cM以内)链接到芯片上;经过反复测试,依然出现相同的故障。。   再次进入死坑。。。。。。。。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 01:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表