STM32CubeMX学习笔记2——RTC实时时钟

1.新建工程
2.选择外部晶振(LSE也选成外部晶振) RCC->Crystal/Ceramic Resonator
3.选择烧录方式 SYS->Serial Wire
4.选择串口通信方式 USART1->Asynchronous
5.编辑实时时钟
6.编辑时钟树
7.命名工程、选择编译器并点击生成代码
8.先编写一个串口测试代码 在usart.c中输入如下代码,注意代码写的位置 #include "stdio.h" #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f) #endif PUTCHAR_PROTOTYPE {   while((USART1->SR & 0x40) == 0);   USART1->DR = (uint8_t) ch;   return ch; } 加入头文件 在main.c中写测试代码 运行结果如下
9.魔术棒调试(不知道你们的keil5是不是这样的,我的keil必须要如下设置才能烧入代码)
10.经过上面的串口过程,没问题的话就可以写实时时钟的代码了 RTC_TimeTypeDef RtcTime;//RTC的时间 HAL_RTC_GetTime(&hrtc,&RtcTime,RTC_FORMAT_BIN);//获取时间 printf("%2d:%2d:%2d ",RtcTime.Hours,RtcTime.Minutes,RtcTime.Seconds); HAL_Delay(1000); 结果可以看到的确时间出来了,但并没有变化,接下来我们试试加入日期
11.加入日期 RTC_DateTypeDef RtcData;//RTC日期 HAL_RTC_GetDate(&hrtc,&RtcData,RTC_FORMAT_BIN);//获取日期 加入日期后,时间跑起来了
12. 修改一下代码 HAL_RTC_GetTime(&hrtc,&RtcTime,RTC_FORMAT_BIN);//获取时间 HAL_RTC_GetDate(&hrtc,&RtcData,RTC_FORMAT_BIN);//获取日期 printf("time:%2d:%2d:%2d ",RtcTime.Hours,RtcTime.Minutes,RtcTime.Seconds); printf("data:%4d.%2d.%2d",2000+RtcData.Year,RtcData.Month,RtcData.Date); HAL_Delay(1000); 要想复位不影响实时时钟,把rtc.c里的这段代码注释掉就可以了
经验分享 程序员 微信小程序 职场和发展