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);
}
}
上一篇:STM32L152 外部中断配置
下一篇:STM32L152RC 在keil4中使用printf()和scanf() 函数
推荐阅读
史海拾趣
WINCE系统里面,从驱动发消息给AP到AP接收到这个消息的时间间隔是多少?有没什么好的方法测量这个时间间隔? WINCE系统里面,从驱动发消息给AP到AP接收到这个消息的时间间隔是多少?有没什么好的方法测量这个时间间隔?… 查看全部问答∨ |
一.SE职位要求: 1、3年以上Linux核心/应用软件开发 2、熟悉面向对象的设计,C++,UML和XML 3、有网络编程经验者优先 4、英语熟练 二.SE职位要求: 1、学士学位或以上 2、超过2年的C++或Java开发经验 3、有Web开发经验者优先 4、英语 ...… 查看全部问答∨ |
此为 低损耗恒流反馈电路 优点•电流检测电阻的损耗达到最低•提供温度补偿 缺点•成本较高•无短路保护 电路成本高且复杂,功能有限•需要改进 谁能分析下 ...… 查看全部问答∨ |
由于目前很多人用手提,而很多都是自带win7 64位操作系统,一般的usbasp驱动文件并不适用,故特别转适用的驱动文件,此文件经测试可用。特别提醒:使用AVR_fighter烧录软件时,需要将本共享文件目录下libusb0.dll和libusb0.sys复制到AVR_fighter目 ...… 查看全部问答∨ |
Error[Pe065]: expected a ";" D:\\msp430\\main.c 26 Warning[Pe012]: parsing restarts here after previous syntax error D:\\msp430\\main.c 119 Error while running C/C++ compiler… 查看全部问答∨ |
测量系统的温度变化将带来热膨胀,从而改变电容[1],在电流中引入额外噪声。如果在环境温度(不加热也不冷却)下进行测量,在测量期间系统温度一般是足够稳定的。不过,如果需要与温度有关的测量,那么温度稳定性应当优于0.1K。 Temperature cha ...… 查看全部问答∨ |
在linux和windows系统中,硬件驱动程序的开发都有比较固定的模式和流程,想问下在UCOS-ii系统中驱动程序的开发基本流程?有无驱动开发的通用模式?UCOS-ii的驱动程序和裸机的驱动程序有什么区别?裸机程序可以方便的转换成UCOS-ii系统驱动程序吗? ...… 查看全部问答∨ |
|
replyreload += \',\' + 1338777;51单片机智能小车设计资料分享 超声波倒车测距语音小车V1版本的效果图,从图中可以看出小车主要有五部分组成分别是小车车体、主控板、超声波收发器、LCD12864液晶屏、语音播报器。 V1版基本实现 ...… 查看全部问答∨ |
ISA协议不大明白,为什么有两个时序?即I/O时序和memory时序。 他们分别起什么作用? 有些电路图只用到 iord /iowd, 有些有到memrd/memwd, 这两种有什么区别吗?… 查看全部问答∨ |