STM32F1开发指南笔记11----串口&RTC----超级终端显示日历

通过串口1将RTC实时时钟数据发送到电脑串口调试助手上,并可在串口调试助手上输入数据与单片机通信。

main函数

#include "stm32f10x.h" 
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include "rtc.h"

int main (void)
{
   
	u8 bya; //定义变量用来接收设置时间函数的返回值
	
	//打开逻辑电源和后备寄存器的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
	
	RTC_Config(); 			//实时时钟初始化
	uart_init(115200); 		//串口初始化,参数中写波特率
	
	USART_RX_STA=0xC000; 	//初始值设为有回车的状态,即显示一次欢迎词
	
	while(1)
	{
   
		if(USART_RX_STA&0xC000)	//如果标志位是0xC000表示收到数据串完成,可以处理。
		{
    
			if((USART_RX_STA&0x3FFF)==0)	//单独的回车键再显示一次欢迎词
			{
    
				if(RTC_Get()==0)  //读出时间值,同时判断返回值是不是0,非0时读取的值是错误的
				{
    
					printf("  STM32实时时钟测试程序   \r\n");
					printf(" 现在实时时间:%d-%d-%d %d:%d%d:%d%d  ",ryear,rmon,rday,rhour,rmin/10,rmin%10,rsec/10,rsec%10);//显示日期时间
					if(rweek==0)printf("星期日   \r\n");//rweek值为0时表示星期日
					if(rweek==1)printf("星期一   \r\n");
					if(rweek==2)printf("星期二   \r\n");
					if(rweek==3)printf("星期三   \r\n");
					if(rweek==4)printf("星期四   \r\n");
					if(rweek==5)printf("星期五   \r\n");
					if(rweek==6)printf("星期六   \r\n");
					printf(" 单按回车键更新时间。输入字母C初始化时钟 \r\n");
					printf(" 请输入设置时间,格式20200407120000,按回车键确定! \r\n");
				}
				else
				{
   
					printf("读取失败!\r\n");
				}
			}
			else if((USART_RX_STA&0x3FFF)==1)	//判断数据是不是2个
			{
    
				if(USART_RX_BUF[0]=='c' || USART_RX_BUF[0]=='C')
				{
   
					RTC_First_Config(); //键盘输入c或C,初始化时钟
					BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);//配置完成后,向后备寄存器中写特殊字符0xA5A5
					printf("初始化成功!      \r\n");//显示初始化成功
				}
				else
				{
   
					printf("指令错误!          \r\n"); //显示指令错误!
				} 
			}
			else if((USART_RX_STA&0x3FFF)==14)	//判断数据是不是14个
			{
    
				//将超级终端发过来的数据换算并写入RTC
				ryear = (USART_RX_BUF[0]-0x30)*1000+(USART_RX_BUF[1]-0x30)*100+(USART_RX_BUF[2]-0x30)*10+USART_RX_BUF[3]-0x30;
				rmon = (USART_RX_BUF[4]-0x30)*10+USART_RX_BUF[5]-0x30;//串口发来的是字符,减0x30后才能得到十进制0~9的数据
				rday = (USART_RX_BUF[6]-0x30)*10+USART_RX_BUF[7]-0x30;
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值