蓝桥杯嵌入式——RTC篇

博主将直接贴出代码并且辅以较为详细得注解

/***RTC初始化函数***/
/*
(1)后备区域开启和允许访问
(2)后备区域复位
(3)Rtc时钟选择及使能
(4)秒中断开启、设置计数器值、预分频值
*/

void Rtc_Init()
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);//PWR,BKP时钟开启
	PWR_BackupAccessCmd(ENABLE);//允许访问后备区域
	BKP_DeInit();//后备区域复位
	RCC_LSICmd(ENABLE);//LSI时钟使能
	while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);//等待使能完毕
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);	//RTC选择时钟
	RCC_RTCCLKCmd(ENABLE);//Rtc时钟使能
	RTC_WaitForSynchro();//等待时钟同步
	RTC_WaitForLastTask();//等待最近写操作完成
	RTC_ITConfig(RTC_IT_SEC,ENABLE);//打开秒中断
	RTC_WaitForLastTask();
	RTC_SetPrescaler(40000-1);//设置预分频值(40000-1)
	RTC_WaitForLastTask();
	RTC_SetCounter(Hour*2400+Minute*60+Second);//设置计数器初值
	RTC_WaitForLastTask();
}
void NVIC_Config()
{
	NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel=RTC_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
}
u8 string[20];	
void Time_Display(u32 time_val)//传入参数为计数器值
{
	u8 H;
	u8 S;
	u8 M;
	H=time_val/3600;//得到时
	M=time_val%3600/60;//得到分
	S=time_val%3600%60;//得到秒
	sprintf((char*)string,"time:%0.2d:%0.2d:%0.2d",H,M,S);//强制字符数组转换
	LCD_DisplayStringLine(Line7,string);//lcd显示

}

```c
void RTC_IRQHandler(void)
{
   if(RTC_GetITStatus(RTC_IT_SEC)==1)//如果发生中断
   {
   	  RTC_ClearITPendingBit(RTC_IT_SEC);//清楚中断标志
	  Time_Renew_flag=1;//更新显示标志
	  RTC_WaitForLastTask();
	  if(RTC_GetCounter()==3600*24)//时间到达24小时
	  {
	  	 RTC_SetCounter(0);//计数器清零
		 RTC_WaitForLastTask();
	  }

   }
   
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值