STM32L152 RTC 日历和定时中断使用
来源:互联网 发布:oracle自带表数据脚本 编辑:程序博客网 时间:2024/05/29 08:59
STM32L152 RTC 日历和自动唤醒功能配置
1、开发平台:
STM32L1-Discovery Keil 4
2、RTC Calendar和wake up
- STM32L152RC 带有一个硬件的实时时钟模块(RTC),可为用户提供日历功能,RTC也可以提供一个自动定时的功能,相当于是一个睡眠定时器,下面就看看该如何配置日历和定时:
void SYS_RTCInit(void){ static NVIC_InitTypeDef NVIC_InitStructure; static EXTI_InitTypeDef EXTI_InitStructure; static RTC_InitTypeDef RTC_InitStructure; static RTC_TimeTypeDef RTC_TimeStructure; static uint32_t AsynchPrediv = 0, SynchPrediv = 0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /*!< Allow access to RTC */ PWR_RTCAccessCmd(ENABLE); /*!< 使能外部低速时钟 */ RCC_LSEConfig(RCC_LSE_ON); /*!< 等待外部低速时钟就绪 */ while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {} /*!< 配置RTC时钟来源 */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); /*!< 使能RTC时钟 */ RCC_RTCCLKCmd(ENABLE); /*!< Wait for RTC APB registers synchronisation */ RTC_WaitForSynchro(); //配置日历 /* 配置RTC数据寄存器以及时钟分频 */ SynchPrediv = 0xFF; AsynchPrediv = 0x7F;//分频为1Hz RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv; RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;//24小时制 /* 检查RTC初始化 */ if (RTC_Init(&RTC_InitStructure) == ERROR) { printf("\n\r /!\\***** RTC Prescaler Config failed ********/!\\ \n\r"); } //配置时间 9点15分01秒 RTC_TimeStructure.RTC_H12 = RTC_H12_AM; RTC_TimeStructure.RTC_Hours = 0x09; RTC_TimeStructure.RTC_Minutes = 0x15; RTC_TimeStructure.RTC_Seconds = 0x01; RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure); //配置自动定时功能 /* 中断配置 *******************************************************/ EXTI_ClearITPendingBit(EXTI_Line20); EXTI_InitStructure.EXTI_Line = EXTI_Line20; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /*使能 RTC Wakeup Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* RTC 唤醒中端配置: Clock Source: RTCDiv_16, Wakeup Time Base: 4s */ RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); RTC_SetWakeUpCounter(0x1FFF);//0x1FFF = 8191; 4s = (8191+1)*(1/(32768/16)) /* 使能 the Wakeup Interrupt */ RTC_ITConfig(RTC_IT_WUT, ENABLE); }
- 使能了RTC的定时中断,那么就要编写中断服务子程序,如下:
void RTC_WKUP_IRQHandler(void){ if(RTC_GetITStatus(RTC_IT_WUT) != RESET) { RTC_ClearITPendingBit(RTC_IT_WUT); EXTI_ClearITPendingBit(EXTI_Line20); } }
0 0
- STM32L152 RTC 日历和定时中断使用
- STM32L152 RTC 使用
- STM32L152 外部中断配置
- STM32L152 ADC使用总结
- STM32L152 基本定时器使用学习
- stm32f103 rtc日历
- Arduino 中使用定时中断
- Arduino 中使用定时中断
- Arduino 中使用定时中断
- 51交流贴——定时中断和外部中断同时使用的问题
- mini2440 RTC实时时钟中断和报警功能实验
- 中断处理之RTC
- RTC唤醒中断
- stm32f103 rtc 获取 日历 时钟
- STM8L051 同时使用RTC和USART通信
- linux中中断和定时机制
- 中断定时
- 用定时器来定时,分别使用中断和查询方法,设计流水灯
- nova api 分析
- Dubbo基础篇--在Linux操作系统上手工部署Dubbo服务
- C语言预处理器(十五)
- 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
- Linux下的TCP/IP编程------基于TCP的半关闭
- STM32L152 RTC 日历和定时中断使用
- HDU-1798 Tell me the area (C++和Java【水】两圆相交求公共面积)
- KVC/KVO原理详解及编程指南
- SSM框架搭建及项目实战
- 转载Android 自定义View属性相关细节
- 成功英语演讲的秘诀:开场白、结束语(我们做presentation时不用怕了。总结的真强大)
- 前言
- 用.NET MVC实现长轮询,与jQuery.AJAX即时双向通信
- 理解内存泄漏与内存溢出(转载)