当前位置:首页 > 单片机 > 单片机
[导读]手册中注意几个地方:RTC_SetAlarm() :The Alarm register can only be written when the corresponding Alarm is disabled (Use the RTC_AlarmCmd(DISABLE)).All RTC interrupts are connected to the EXTI control

手册中注意几个地方:

RTC_SetAlarm() :The Alarm register can only be written when the corresponding Alarm is disabled (Use the RTC_AlarmCmd(DISABLE)).

All RTC interrupts are connected to the EXTI controller.

Configure and enable the EXTI Line 17 in interrupt mode and select the rising edge sensitivity using the EXTI_Init() function.

=========

void RTC_Config(void)
{
RTC_InitTypeDef RTC_InitStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RTC_AlarmTypeDef RTC_AlarmStructure;
EXTI_InitTypeDef EXTI_InitStructure;

PWR_BackupAccessCmd(ENABLE);//打开配置寄存器权限
RCC_HSEConfig(RCC_HSE_ON);
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET);//等待时钟稳定
RCC_RTCCLKConfig((RCC_RTCCLKSource_HSE_Div31));//时钟分频
RCC_RTCCLKCmd(ENABLE);//使能RTC时钟

if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x9527)//一个标志,看是否已经配置过RTC
{
RTC_WriteProtectionCmd(DISABLE);

RTC_EnterInitMode();
RTC_InitStructure.RTC_HourFormat=RTC_HourFormat_24;
RTC_InitStructure.RTC_AsynchPrediv=0x7D-1;//有两次分频。小于0x7F
RTC_InitStructure.RTC_SynchPrediv=0x811-1;//小于0x7FFF
RTC_Init(&RTC_InitStructure);

RTC_TimeStructure.RTC_Seconds = 0x00;
RTC_TimeStructure.RTC_Minutes = 0x01;
RTC_TimeStructure.RTC_Hours = 0x01;
RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
RTC_SetTime(RTC_Format_BCD,&RTC_TimeStructure);//设置初始时间

RTC_DateStructure.RTC_Date = 15;
RTC_DateStructure.RTC_Month = 11;
RTC_DateStructure.RTC_WeekDay= RTC_Weekday_Thursday;
RTC_DateStructure.RTC_Year = 13;
RTC_SetDate(RTC_Format_BCD,&RTC_DateStructure);//设置初始日期

RTC_ExitInitMode();
RTC_WriteBackupRegister(RTC_BKP_DR0,0X9527); //初始化完成,设置标志
RTC_WriteProtectionCmd(ENABLE);
}
PWR_BackupAccessCmd(DISABLE);
RTC_WaitForSynchro();//等待RTC Time and Date 寄存器和RTC APB clock同步完成

PWR_BackupAccessCmd(ENABLE);//打开配置寄存器权限

RTC_AlarmCmd(RTC_Alarm_A,DISABLE);
//设置闹钟为 每到第5s则触发一次
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours=1;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes=1;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=5;
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12=RTC_H12_AM;
//RTC_AlarmStructure.RTC_AlarmMask=RTC_AlarmMask_All;//这就会是每秒都触发一次闹钟了
RTC_AlarmStructure.RTC_AlarmMask=RTC_AlarmMask_DateWeekDay|
RTC_AlarmMask_Hours|RTC_AlarmMask_Minutes;

RTC_SetAlarm(RTC_Format_BIN,RTC_Alarm_A,&RTC_AlarmStructure);
RTC_AlarmCmd(RTC_Alarm_A,ENABLE);
RTC_ITConfig(RTC_IT_ALRA,ENABLE);
//中断优先级设定见nvic.c
PWR_BackupAccessCmd(DISABLE);

//Alarm必须配置EXTI_Line17中断
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//上升沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_Init(&EXTI_InitStructure);
}
void RTC_Alarm_IRQHandler(void)
{
if(RTC_GetFlagStatus(RTC_FLAG_ALRAF)==SET)
{
printf("alarm come rn");
PWR_BackupAccessCmd(ENABLE);//必须有,否则RTC_ClearITPendingBit 不会成功
RTC_ClearITPendingBit(RTC_IT_ALRA);
PWR_BackupAccessCmd(DISABLE);
EXTI_ClearITPendingBit(EXTI_Line17);//注意必须有此句,否则中断一直被触发,主循环不被执行了。
}
}

主循环:

while (1)
{
PD12_Toggle;
RTC_GetTime(RTC_Format_BIN,&rtc_time);
RTC_GetDate(RTC_Format_BIN,&rtc_date);
printf("date:20%d-%d-%d ",rtc_date.RTC_Year,rtc_date.RTC_Month,
rtc_date.RTC_Date);
printf("time:%d:%d:%drn",rtc_time.RTC_Hours,rtc_time.RTC_Minutes,
rtc_time.RTC_Seconds);
Delay_ms(1000);
}

运行效果:每到第5s触发闹钟:


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

基于ARM® Cortex®-M4的STM32F4 MCU系列采用了意法半导体的NVM工艺和ART Accelerator™,在高达180 MHz的工作频率下通过闪存执行时其处理性能达到225 DMIPS/608 Cor...

关键字: stm32f4 ARM

stm32f4和f1都有哪些区别?除了需要的头文件不一样,管脚配置什么的有区别么?

关键字: stm32f4 f1 比较

STM32F407VET6引脚图及中文资料

关键字: stm32f4 引脚图

  2016年2月26日,德国慕尼黑和西班牙巴塞罗那讯——赢得消费者的信任对于智能移动设备支付解决方案至关重要。作为全球最大的安全芯片供应商之一,英飞凌科技股份公司(FS

关键字: rtc 机器人 rx8010sj

11月29日,全球纪实娱乐内容及媒体巨头Discovery发布旗下全新儿童STEM教育娱乐品牌“好奇DD龙”,同时发布首款针对3岁以上儿童的探索式教育娱乐产品“好奇之旅”。 目前Discovery“

关键字: discovery 儿童教育 好奇dd龙

1. alarm函数 [cpp] view plain copy [1] 引用头文件:#include ;      [2] 函数标准式:unsigned int alarm(

关键字: alarm Linux

博主使用的是天嵌的开发板型号IMX6Q_coreC。1.发现使用开发板是时间总是被设置为2028年6月18日3时41分,一开始以为是底层驱动的问题, 故去底层加打印信息调试。2.发现在系统内hwclo

关键字: Linux rtc

比较F1的片子对于F4的RTC来说有很大提升,F4的RTC提供了日历时钟和两个可编程闹钟中断,一个周期性可编程唤醒标志。这样很方便设置系统时间,并不会像F1的RTC那样要自己计算年月日时分秒。F4的RTC是一个独立的BC...

关键字: rtc stm32f4

【实验目的】输出7路占空比不同的PWM信号是各个版本ST库必备的例子。本实验的主要目的不是表现ST芯片PWM功能的强大,而是要完成输出的精确计算。【实验内容】输出7路PWM信号,并用示波器测量输出。【实验原理】1、时

关键字: pwm stm32f4 tim1 信号输出

STM32F4的随机数发生器RNG,以环境噪声为种子,产生32位随机数供主机使用。【主要特性】1、产生32位随机数 2、两次转换时间间隔40PLL48CLK 3、随机数熵检测以发现不正常位,以产生稳定序列 3、可被关闭以...

关键字: stm32f4 随机数发生器
关闭
关闭