一.创建CubeMX工程
创建STM32F103C8工程
1. 标题配置RCC(设置高速外部时钟,使能外部晶振LSE)
2.配置RTC(激活时钟源(Activate Clock Source)和日历(Activate Calendar))
3.设置RTC中断
设置时间为创建时间2022/11/4 16:18
4.使能串口
5.时钟树配置
6.设置项目
生成代码用Keil打开
二、添加代码
在main.c文件中重写fputc函数,完成printf函数的重定向
添加头文件#include "stdio.h“
//添加头文件#include "stdio.h"
int fputc(int ch,FILE *f){
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart1,temp,1,2);
return ch;
}
在main.c中定义时间和日期的结构体用来获取时间和日期
RTC_DateTypeDef GetData; //获取日期结构体
RTC_TimeTypeDef GetTime; //获取时间结构体
在main函数的while循环中添加以下代码
/* Get the RTC current Time */
HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
/* Get the RTC current Date */
HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);
/* Display date Format : yy/mm/dd */
printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);
/* Display time Format : hh:mm:ss */
printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);
printf("\r\n");
HAL_Delay(1000);
在在while循环并且输出前添加如下代码:
/* Display date Format : weekday */
if(GetData.WeekDay==1){
printf("星期一\r\n");
}else if(GetData.WeekDay==2){
printf("星期二\r\n");
}else if(GetData.WeekDay==3){
printf("星期三\r\n");
}else if(GetData.WeekDay==4){
printf("星期四\r\n");
}else if(GetData.WeekDay==5){
printf("星期五\r\n");
}else if(GetData.WeekDay==6){
printf("星期六\r\n");
}else if(GetData.WeekDay==7){
printf("星期日\r\n");
}
三、烧录运行
四、总结
通过这次使用,更加熟悉的了CubeMX的使用,只需要对生成项目进行稍加修改就可以。