【hal库实时时钟RTC】

通过hal库实现RTC实时时钟功能

使用野火stm32f103zet6,通过杨桃电子hal库教学视频编写

存在的问题

无法设置日期和时间

代码

if(USART1_RX_STA&0xC000)		//如果标志位是0xC000表示收到的数据串完成。可以处理。
	{
		if((USART1_RX_STA&0x3FFF)==0)		//单独的回车键再显示一次欢迎词
		{
			HAL_RTC_GetTime(&hrtc,&RtcTime,RTC_FORMAT_BIN);	//读出时间值
			HAL_RTC_GetDate(&hrtc,&RtcData,RTC_FORMAT_BIN);	//先读时间后读日期
			printf(" RTC实时时钟测试  \r\n");
			printf(" 实时时间:%04d-%02d-%02d  %02d:%02d:%02d  \r\n",2000+RtcData.Year,
							RtcData.Month,RtcData.Date,RtcTime.Hours,RtcTime.Minutes,RtcTime.Seconds);		//显示日期时间
			printf(" 单按回车键更新时间,输入字母C初始化时钟  \r\n");
			printf(" 请输入设置时间,格式20170806120000,按回车键确定!  \r\n");
		}
		else if((USART1_RX_STA&0x3FFF)==1)	//判断数据是不是1个
		{
			if(USART1_RX_BUF[0]=='c'||USART1_RX_BUF[0]=='C')
			{
				MX_RTC_Init();		//键盘输入c或C,初始化时钟
				printf(" 初始化成功!      \r\n");
			}
			else
			{
				printf("指令错误!         \r\n");
			}
		}
		else if((USART1_RX_STA&0x3FFF)==14)		//判断数据是不是14个
		{
			//将超级终端发过来的数据换算并写入RTC
			RtcData.Year = (USART1_RX_BUF[2]-0x30)*10+USART1_RX_BUF[3]-0x30;	//减0x30后才能得到十进制数据
			RtcData.Month = (USART1_RX_BUF[4]-0x30)*10+USART1_RX_BUF[5]-0x30;
			RtcData.Date = (USART1_RX_BUF[6]-0x30)*10+USART1_RX_BUF[7]-0x30;
			RtcTime.Hours = (USART1_RX_BUF[8]-0x30)*10+USART1_RX_BUF[9]-0x30;
			RtcTime.Minutes = (USART1_RX_BUF[10]-0x30)*10+USART1_RX_BUF[11]-0x30;
			RtcTime.Seconds = (USART1_RX_BUF[12]-0x30)*10+USART1_RX_BUF[13]-0x30;	
			if (HAL_RTC_SetTime(&hrtc,&RtcTime,RTC_FORMAT_BIN) != HAL_OK)		//将数据写入RTC
			{
				printf("写入时间失败!     \r\n");	//显示写入失败
			}
			else if(HAL_RTC_SetDate(&hrtc,&RtcData,RTC_FORMAT_BIN) != HAL_OK)	//将数据写入RTC程序
			{
				printf("写入日期失败!     \r\n");
			}
			else printf("写入成功!       \r\n");
		}
		else 
		{
			printf("指令错误!      \r\n");    //如果不是以上正确操作,显示指令错误
		}
		USART1_RX_STA=0;	//将串口数据标志位清零
	}
		
		
		
  }

结果

初次输入回车
输入20231113102532后报错哦哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值