历史上的今天
今天是:2024年09月08日(星期日)
2018年09月08日 | STM32L152 RTC 日历和定时中断使用
2018-09-08 来源:eefocus
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);
}
}
史海拾趣
|
从接触STM32以来,一直都是在IAR For ARM 4.22A环境下进行开发。因为以前用过IAR For MSP430,对IAR的开发环境比较熟悉,再加上万利板子提供的例程都是IAR的,用起来也还顺手。 直到前一阵参加了一个ARM的研讨会,会上英蓓特极力推荐RealView MDK中 ...… 查看全部问答> |
|
平台是 pxa270+wince 6.0 当休眠,再唤醒后, SD卡的盘符就丢失了, 重新插拔也显示不了 根据串口输出信息,SD驱动在Powerup的时候执行了一个函数SimulateCardInsertion,这个函数已经模拟了一次SD卡的插拔过程,通过串口信息也发现这个函数被正 ...… 查看全部问答> |
|
短接网线的1,3和2,6号线,能造成交换机端口连接上的现象吗? 请教大家一个问题:如果将网线的一头作成正常的网线接头,另一头的线路将1,3号线短接,2,6号线短接,接在交换机的一个端口上,会出现什么样的情况?交换机会不会不能工作? 非常感谢大家… 查看全部问答> |
|
常规心电图记录仪是医生诊断心脏疾病的主要手段之一,但它仅能记录短暂心搏情况。由于在相当多的情况下难以记录到即刻发作时的心电图改变,导致无法作出正确的诊断和治疗。因此对病人进行长时间的心电图记录有着极其重要的临床价值。而微型动态心电 ...… 查看全部问答> |
|
小弟是刚接触layout,对于在PCB布线时,应该要注意哪些问题,比如说针对不同的信号线长、线距等等, 因为看过一些书,都是概念性的话,在实际操作感觉不上手。 所以想请教目前比较通用的一些设计准则。 PS:我是做NOTEBO ...… 查看全部问答> |
|
把自己收集的固件库资料分享给大家,免费下载! [local]1[/local][local]2[/local][local]3[/local][local]4[/local][local]5[/local][local]6[/local][local]7[/local]… 查看全部问答> |




