找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 829|回复: 2
打印 上一主题 下一主题
收起左侧

STM8L单片机RTC时钟问题请教。

[复制链接]
跳转到指定楼层
楼主
ID:899729 发表于 2021-6-4 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大牛:现用STM8L151单片机,采用低功耗模式,启动看门狗,外部RTC时钟,rtc唤醒,唤醒后喂狗,正常情况下系统运行正常,但板子一旦受潮,rtc晶振不起振,造成看门狗复位,此时切换RTC为内部LSI模式,如果外部晶振不能正常起振,切换不成功,这个问题如何解决?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:899729 发表于 2021-6-4 13:44 | 只看该作者
void rtc_init(void)
{
u16 ddys=0;  

  RTC_ClearITPendingBit(RTC_IT_WUT);                        
  RTC_ClearITPendingBit(RTC_IT_ALRA);  
  CLK_PeripheralClockConfig(CLK_Peripheral_RTC,DISABLE);    //打开RTC时钟
  /*如果外部晶振有问题,切换内部晶振*/
   CLK_data=0;//外部晶振0,内部晶振为1  
if((rest_clk<20)||(FLASH_ReadByte(CLK_LSE_LSI)!=0x01))//(CLK_data==0)//外部时钟
{   
   CLK_LSEConfig(CLK_LSE_ON);
   while( RESET==CLK_GetFlagStatus(CLK_FLAG_LSERDY))
   {
   if((++ddys)>8000)
   {
     CLK_data=1;
     break;
   }
}   
  CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);//时钟为LSE 2分频  
  CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);    //打开RTC时钟     
}
  
else
     
{   
   CLK_data=1;
   RTC_WakeUpCmd(DISABLE);   
   CLK_LSEConfig(CLK_LSE_OFF);   
   CLK_LSICmd(ENABLE);   
   while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET);
   CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);//时钟为LSE 2分频   
   CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);    //打开RTC时钟   
}
  RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);      //唤醒设置为16分频                     
  RTC_SetWakeUpCounter(80);   //设置唤醒寄存器时间为 1s 2048 ,0.5秒 1024


  RTC_ITConfig(RTC_IT_WUT, ENABLE);    //使能RTC唤醒中断使能
  RTC_ClearITPendingBit(RTC_IT_WUT);     //清除RTC唤醒标志
  RTC_ClearITPendingBit(RTC_IT_ALRA);                        
  RTC_WakeUpCmd(ENABLE);  

  delayms(5);
}
回复

使用道具 举报

板凳
ID:899729 发表于 2021-6-4 13:44 | 只看该作者
本帖最后由 yaofu 于 2021-6-4 13:57 编辑

这个程序在外部晶振正常时,经过20次重启,切换到内部晶振,外部晶振一直不正常,好像一直切换不过去。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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