(实验15)单片机,STM32F4学习笔记,代码讲解【RTC实时时钟实验】【正点原子】【原创】_rtc_writebackupregister-程序员宅基地

技术标签: 经验分享  学习  学校-32单片机  单片机  


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

(实验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);//设置系统中断优先级分组2
	delay_init(168);      //初始化延时函数
	uart_init(115200);		//初始化串口波特率为115200
	
	usmart_dev.init(84); 	//初始化USMART	
	LED_Init();					  //初始化LED
 	LCD_Init();					  //初始化LCD
	My_RTC_Init();		 		//初始化RTC
 
	RTC_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,"2014/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)
//这个函数用来设置每天的几时几分几秒闹钟中断,不关心星期几,注意此代码没有使用这个函数,如需要自己调用即可

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44639540/article/details/123957436

智能推荐

美国前三十计算机专业大学,2021美国大学研究生计算机专业前三十院校排名!...-程序员宅基地

文章浏览阅读427次。计算机工程师的工作内容涵盖计算机软硬件处理的方方面面。其中包括独立的微控制器、微处理器、个人电脑,以及超级计算机和电路的设计工作。那么2021美国大学研究生计算机专业前三十排名院校都有哪些呢?接下来托普仕小编将为你详细介绍。2021美国大学研究生计算机专业前三十院校排名学校中文名学校英文名最新排名所在州综合排名麻省理工学院Massachusetts Institute of Technology最...

JDK1.6_023的版本及升级注意事项_jdka0062703-程序员宅基地

文章浏览阅读2.7k次。所有1.6系列及1.6.0_23以下的版本,存在着String.indexOf,String.contains等方法功能不正常的bug,bug地址:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6935535在某种情况下,hotspot编译出的代码会不正确执行,升级到jdk1.6.0_25可以解决这个问题。可在升级的地方,有一个已_jdka0062703

IPC——socket方式_usonia-ipc-socket-程序员宅基地

文章浏览阅读4.2k次。在socket(int domain,int type,int protocol)这个函数里,其中第一个参数指的是通信协议的协议族,其中AF_UNIX用于本地数据通信,它不用拆包组包,直接是将应用层的数据COPY至另一个进程。僵尸进程: 子进程退出后,父进程没有wait或者waitpid,子进程还没有从进程表中删除,还占用系统的进程表,太多的进程表会导致系统崩溃,所以_usonia-ipc-socket

CoreAnimation —— CAGradientLayer(颜色渐变图层)-程序员宅基地

文章浏览阅读70次。2019独角兽企业重金招聘Python工程师标准>>> ..._cagradientlayer可以设置从里到外过渡吗

Windows窗口自动缩放机制-程序员宅基地

文章浏览阅读931次。通过自动缩放功能,能使在一个计算机上设计的界面在另一个具有不同分辨率或系统字体的计算机上能正常显示。这样窗体及其控件就能通过智能化调整大小以保障在本地电脑和用户电脑上保持一致。 自动缩放的必要性 如果没有自动缩放功能,当改变显示分辨率或字体时,其对应的应用不是显得太大,就是显得太小。例如,为Tahoma 9 point字体设计的程序,在系统字体为Tahoma 12 point的计算机上运行时,..._containercontrol.performautoscale()

深度学习之循环神经网络(Recurrent Neural Network,RNN)_循环连续翻译模型-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏26次。递归神经网络和循环神经网络循环神经网络(recurrent neural network):时间上的展开,处理的是序列结构的信息,是有环图 递归神经网络(recursive neural network):空间上的展开,处理的是树状结构的信息,是无环图 二者简称都是 RNN,但是一般提到的RNN指的是循环神经网络(recurrent neural network)。为什么有bp神经网络、CNN、还需要RNN?BP神经网络和CNN的输入输出都是互相独立的;但是实际应用中有些场景输出内容和之前的内_循环连续翻译模型

随便推点

常用在线工具_在线sm2私钥转换pem工具-程序员宅基地

文章浏览阅读458次。常用在线工具Grepcode 源码查询SearchCode 源码查询ProcessOn 流程图json.cndiffcheckermvnrepository代码在线运行AutoJCode 代码自动生成工具sql在线美化,格式化,压缩编码转换正则验证正则代码生成时间戳转换时区加密解密查看网页源代码单位转换ASCII对照表..._在线sm2私钥转换pem工具

C++ 九阴真经之命令控制模式_std::function<void(args...)>-程序员宅基地

文章浏览阅读289次。所谓命令控制模式,就是对应的行为进行封装,通过命令就能控制,你可以理解为linux下指令操作。 比如一个操作包括,A1、A2、.....A10这10步操作,如果某一步失败,那么就进行倒回,如果这10个操作的业务类型各不相同,并且所需要的参数也不尽相同,操作起来就比较困难,如果我能将他们全部封装成指令模式,只通过A1到A10这10个字符串就触发,那么实现起来就容易的多。 对于网络编程,命令控制就变得必不可少了,该模型可以帮你将网络层与业务层完美的管理在一起。 实..._std::function

mini2440----keil for AMR之IIC读写EEPROM(AT24C08)_at24c08芯片资料-程序员宅基地

文章浏览阅读1.4k次。mini2440----keil for AMR之IIC读写EEPROM(AT24C08)一:EEPROM芯片介绍在这里分析AT24C02A/AT24C04A/AT24C08A,对于其他不同型号的EEPROM芯片要根据具体手册进行分析。他们的大小分别是2K(256*8)/4K(512*8)/8K(1024*8)因此可以看出实际大小是256/512/1024byte,。对于AT24C_at24c08芯片资料

MATLAB科研作图设置图片为固定大小_matlab将图像存为固定大小-程序员宅基地

文章浏览阅读2.1w次,点赞7次,收藏56次。MATLAB作图的命令中一般是以像素为单位。如果想把图片大小固定为10cm乘10cm,有两种做法。1.把单位设为cm。figure(1)set(gcf,'Units','centimeter','Position',[5 5 10 10]);但是这样做得到的图的尺寸往往并不等于10cm。2.利用像素与厘米之间的转换。(事先查到显示器的像素间距为0.277mm)figure(1)s..._matlab将图像存为固定大小

STM32 HAL I2C库读指定寄存器的数据_i2c 读写2指定寄存器-程序员宅基地

文章浏览阅读1.2w次。Support for "repeated start" in STM32 HAL I2C libraryQ:I am working with a slave I2C device (Kionix KX022 acccelerometer) which uses a "repeated start" mechanism to send data requested _i2c 读写2指定寄存器

mysql安装、启动【mac系统】-程序员宅基地

文章浏览阅读1.1k次。mysql安装后无法访问mysql下载,建议界面引导安装直接下一步下一步mysql下载,建议界面引导安装https://dev.mysql.com/downloads/mysql/直接下一步下一步安装后在系统偏好中找到mysql打开3、终端启动即可...

推荐文章

热门文章

相关标签