OpenEdv-开源电子网

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

STM32F030RTC为什么选择LSE就无法工作了

[复制链接]

18

主题

89

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2016-5-12
在线时间
173 小时
发表于 2018-1-25 11:09:03 | 显示全部楼层 |阅读模式
1金钱
#define RTC_CLOCK_SOURCE_LSE   /* 选择LSE  */
//#define RTC_CLOCK_SOURCE_LSI  // LSI 也可以
                                //

#define BKP_VALUE    0x32F0
RTC_TimeTypeDef   RTC_TimeStructure;
RTC_InitTypeDef   RTC_InitStructure;
RTC_AlarmTypeDef  RTC_AlarmStructure;

__IO uint32_t AsynchPrediv = 0, SynchPrediv = 0;//同步分频值和非同步分频值

void RTC_Init_CX()               
{
if(RTC_ReadBackupRegister(RTC_BKP_DR0) != BKP_VALUE)
{
   RTC_Config();
}

}
/**
  * @brief  Configure the RTC peripheral by selecting the clock source.
  * @param  None
  * @retval None
  */
void RTC_Config(void)
{
   /* 使能 PWR 时钟 */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

  /* 允许访问RTC */
  PWR_BackupAccessCmd(ENABLE);

#if defined (RTC_CLOCK_SOURCE_LSI)  /* 当使用LSI 作为 RTC 时钟源*/
/* The RTC Clock may varies due to LSI frequency dispersion. */   
  /* 使能 LSI 振荡 */
  RCC_LSICmd(ENABLE);

  /* 等待到 LSI 预备*/  
  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
  {
  }

  /* 把RTC 时钟源配置为LSI */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
   /* 定襎同步分频值和异步分频值 */
  SynchPrediv  = 0x18F;
  AsynchPrediv = 0x63;

#elif defined (RTC_CLOCK_SOURCE_LSE) /* 当使用LSE 最为 RTC 时钟源 */
  /*使能 LSE 振荡 */
//  RCC_LSEConfig(RCC_LSE_ON);

  do
  {

      for(delay = 0;delay < 90000;delay++);

      RCC_LSEConfig(RCC_LSE_ON);
  }while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
  /*等待 LSE 预备 */  
//  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
//  {
//  }

  /* 把RTC 时钟源配置为使用LSE */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
     /* 定襎同步分频值和异步分频值 */
  SynchPrediv  = 0xFF;
  AsynchPrediv = 0x7F;

#else
  #error Please select the RTC Clock source inside the main.c file
#endif /* RTC_CLOCK_SOURCE_LSI */

  /* 使能RTC时钟 */
  RCC_RTCCLKCmd(ENABLE);

  /* 等待 RTC APB 寄存器同步 */
  RTC_WaitForSynchro();
}

最佳答案

查看完整内容[请看2#楼]

解决了 原子哥 是因为 stm32f030 LSI掉电使用后备电池不能走时。要改用LSE要系统全掉电并重启,否则LSE无法就绪。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

89

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2016-5-12
在线时间
173 小时
 楼主| 发表于 2018-1-25 11:09:04 | 显示全部楼层
正点原子 发表于 2018-1-26 01:31
不可能吧,起振了一般LSE就会正常的。

解决了 原子哥 是因为 stm32f030 LSI掉电使用后备电池不能走时。要改用LSE要系统全掉电并重启,否则LSE无法就绪。
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2016-8-26
在线时间
13 小时
发表于 2018-1-25 12:57:09 | 显示全部楼层
可能是外部晶振挂了
回复

使用道具 举报

18

主题

89

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2016-5-12
在线时间
173 小时
 楼主| 发表于 2018-1-25 13:13:10 | 显示全部楼层
xiaofang 发表于 2018-1-25 12:57
可能是外部晶振挂了

但是我看示波器 起振了
回复

使用道具 举报

18

主题

89

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2016-5-12
在线时间
173 小时
 楼主| 发表于 2018-1-25 13:20:57 | 显示全部楼层
xiaofang 发表于 2018-1-25 12:57
可能是外部晶振挂了

而且 用LSI的时候时间偏差特别大
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-1-26 01:31:50 | 显示全部楼层
azhangxingweia 发表于 2018-1-25 13:13
但是我看示波器 起振了

不可能吧,起振了一般LSE就会正常的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

77

主题

203

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1208
金钱
1208
注册时间
2017-8-25
在线时间
167 小时
发表于 2020-7-29 22:16:42 | 显示全部楼层
LSE时钟分频怎么配置的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 04:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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