1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > (实验15)单片机 STM32F4学习笔记 代码讲解【RTC实时时钟实验】【正点原子】【原创】

(实验15)单片机 STM32F4学习笔记 代码讲解【RTC实时时钟实验】【正点原子】【原创】

时间:2023-10-02 22:07:48

相关推荐

(实验15)单片机 STM32F4学习笔记 代码讲解【RTC实时时钟实验】【正点原子】【原创】

文章目录

其它文章链接,独家吐血整理实验现象主程序RTC初始化程序代码讲解

其它文章链接,独家吐血整理

(实验3)单片机,STM32F4学习笔记,代码讲解【按键输入实验】【正点原子】【原创】

(实验4)单片机,STM32F4学习笔记,代码讲解【串口实验】【正点原子】【原创】

(实验5)单片机,STM32F4学习笔记,代码讲解【外部中断实验】【正点原子】【原创】

(实验6,实验7)单片机,STM32F4学习笔记,代码讲解【看门狗实验】【正点原子】【原创】

(实验8)单片机,STM32F4学习笔记,代码讲解【定时器实验】【正点原子】【原创】

(实验9)单片机,STM32F4学习笔记,代码讲解【PWM输出实验】【正点原子】【原创】

(实验10)单片机,STM32F4学习笔记,代码讲解【输入捕获实验】【正点原子】【原创】

(实验11)单片机,STM32F4学习笔记,代码讲解【电容触摸按键实验】【正点原子】【原创】

(实验12)单片机,STM32F4学习笔记,代码讲解【OLED显示实验】【正点原子】【原创】

(实验13)单片机,STM32F4学习笔记,代码讲解【TFTLCD彩屏显示实验】【正点原子】【原创】

(实验15)单片机,STM32F4学习笔记,代码讲解【RTC实时时钟实验】【正点原子】【原创】

(实验17)单片机,STM32F4学习笔记,代码讲解【待机唤醒实验】【正点原子】【原创】

(实验23)单片机,STM32F4学习笔记,代码讲解【DMA实验】【正点原子】【原创】

(实验25)单片机,STM32F4学习笔记,代码讲解【SPI实验】【正点原子】【原创】

(实验34)单片机,STM32F4学习笔记,代码讲解【FLASH模拟EEPROM实验】【正点原子】【原创】

(实验36)单片机,STM32F4学习笔记,代码讲解【外部SRAM实验】【正点原子】【原创】

(实验37)单片机,STM32F4学习笔记,代码讲解【内存管理实验】【正点原子】【原创】

(实验38)单片机,STM32F4学习笔记,代码讲解【SD卡实验】【正点原子】【原创】

(实验39)单片机,STM32F4学习笔记,代码讲解【FATFS实验】【正点原子】【原创】

(实验46)单片机,STM32F4学习笔记,代码讲解【FPU测试实验】【正点原子】【原创】

(实验47)单片机,STM32F4学习笔记,代码讲解【DSP-FFT测试实验】【正点原子】【原创】

(实验50)单片机,STM32F4学习笔记,代码讲解【串口IAP实验】【正点原子】【原创】

(实验50)单片机,STM32F4学习笔记,代码讲解【串口IAP实验-RTC时钟实验】【正点原子】【原创】

(实验55)单片机,STM32F4学习笔记,代码讲解【网络通信实验】【正点原子】【原创】

实验现象

本实验通过TFTLCD显示RTC时间,并可以通过usmart设置RTC时间/闹钟,从而调节时间,或设置RTC闹钟,以便大家验证RTC功能。

主程序

int main(void){RTC_TimeTypeDef RTC_TimeStruct;RTC_DateTypeDef RTC_DateStruct;u8 tbuf[40];u8 t=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);//初始化延时函数uart_init(115200);//初始化串口波特率为115200usmart_dev.init(84); //初始化USMARTLED_Init(); //初始化LEDLCD_Init(); //初始化LCDMy_RTC_Init(); //初始化RTCRTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0);//配置WAKE UP中断,1秒钟中断一次POINT_COLOR=RED;LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");LCD_ShowString(30,70,200,16,16,"RTC TEST");LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,110,200,16,16,"/5/5");while(1) {t++;if((t%10)==0)//每100ms更新一次显示数据{RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);sprintf((char*)tbuf,"Time:%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds); LCD_ShowString(30,140,210,16,16,tbuf);RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date); LCD_ShowString(30,160,210,16,16,tbuf);sprintf((char*)tbuf,"Week:%d",RTC_DateStruct.RTC_WeekDay); LCD_ShowString(30,180,210,16,16,tbuf);} if((t%20)==0)LED0=!LED0;//每200ms,翻转一次LED0 delay_ms(10);}}

RTC初始化程序

//RTC闹钟中断服务函数void RTC_Alarm_IRQHandler(void){if(RTC_GetFlagStatus(RTC_FLAG_ALRAF)==SET)//ALARM A中断?{RTC_ClearFlag(RTC_FLAG_ALRAF);//清除中断标志printf("ALARM A!\r\n");} EXTI_ClearITPendingBit(EXTI_Line17);//清除中断线17的中断标志 }//RTC WAKE UP中断服务函数void RTC_WKUP_IRQHandler(void){if(RTC_GetFlagStatus(RTC_FLAG_WUTF)==SET)//WK_UP中断?{RTC_ClearFlag(RTC_FLAG_WUTF);//清除中断标志LED1=!LED1; } EXTI_ClearITPendingBit(EXTI_Line22);//清除中断线22的中断标志 }

代码讲解

//F4的RTC相比较F1来说,带有了日历功能,RTC还包含用于管理低功耗模式的自动唤醒单元

//系统复位后,会自动禁止访问访问后备寄存器和RTC,以防止对后备区域(BKP)的意外读写,所以要设置时间之前,先要取消备份区域(BKP)写保护

//RTC时钟有三种,我们选择LSE(外部低速震荡)==32.768Khz时钟晶振源

//日历时间和日期寄存器,可编程闹钟(闹钟A和B,我们用A),周期性自动唤醒(1s到36h,并且系统复位和低功耗模式不影响该定时唤醒)

// RTC_Set_Time(23,59,56,RTC_H12_AM); //设置时间

// RTC_Set_Date(14,5,5,1); //设置日期

//My_RTC_Init初始化中的这两个函数,是用于USMART操作,我们应该不需要

//不对不对,正常设置时间是用这两个函数,只放在这里是为了适用于USMART操作,我们不用就是了

//RTC_WriteBackupRegister(RTC_BKP_DR0,0x5050); //标记已经初始化过了

//这一句的存在,使得系统得到第一次设置的时间之后,下次就不会再修改了

//私以为,想要再次修改时间应该把0x5050修改其它值应该就可以了,然后再修改回来

//闹钟中断可以选择日期设置(0-31)和星期设置(一-天)

//闹钟中断连接在,外部中断线17

//RTC定时器周期唤醒中断连接在,外部中断线22

/*wksel: @ref RTC_Wakeup_Timer_Definitions

#define RTC_WakeUpClock_RTCCLK_Div16 ((uint32_t)0x00000000)

#define RTC_WakeUpClock_RTCCLK_Div8 ((uint32_t)0x00000001)

#define RTC_WakeUpClock_RTCCLK_Div4 ((uint32_t)0x00000002)

#define RTC_WakeUpClock_RTCCLK_Div2 ((uint32_t)0x00000003)

#define RTC_WakeUpClock_CK_SPRE_16bits ((uint32_t)0x00000004)

#define RTC_WakeUpClock_CK_SPRE_17bits ((uint32_t)0x00000006)

*/

//根据开发指南得知,RTC定时器中断我们可以选择2,4,8,16,分频,但是我们这里选择RTC_WakeUpClock_CK_SPRE_16bits分频,就是1s减一个数

//RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0); //配置WAKE UP中断,1秒钟中断一次

//于是根据上面函数设置,可以得出,从0减到0就是1s,于是此函数定时器中断就是1s进入一次RTC_WKUP_IRQHandler中断,现象就是LED灯1s变化一次

//设置闹钟时间(按星期闹铃,24小时制)

//week:星期几(1~7) @ref RTC_Alarm_Definitions

//hour,min,sec:小时,分钟,秒钟

//void RTC_Set_AlarmA(u8 week,u8 hour,u8 min,u8 sec)

//这个函数用来设置每天的几时几分几秒闹钟中断,不关心星期几,注意此代码没有使用这个函数,如需要自己调用即可

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。