基于STM32F103C8T6 HAL库 实现RTC功能并串口输出(新手记录)

开发工具:STM32Cubemx,keil5

固件包:STM32Cube_FW_F1_V1.8.0

1.打开STM32Cubemx,点击New Project,在Commercial Part Number处选择STM32F103C8T6打开。

2.点击左侧的SYS,将No Debug改为Serial Wire。(No Debug模式下会导致烧录一次后调试口关闭无法进行二次烧录)

3.点击RCC,照图中圈中的地方设置

4.点击RTC,勾选Activate Clock Source(激活时钟源)和Activate Calendar(激活日历)

5.在下方的Calendar Date处设置起始日期,在Calendar Time设置起始时间。RTC将会从这个时间开始计时,year表示起始年份,month表示起始月,date为起始日期,weekday为起始工作日。Hours为起始小时数,minutes为起始分钟数,seconds为起始秒数。

6.在左侧Connectivity中点击USART1(Universal Synchronous Asynchronous Receiver),在Mode中选择Asynchronous(异步通信),下方Parameter Settings中如图设置,在NVIC Settings中勾选USART1 global interrupt.

7.在Project Manager中给项目命名并选择安装路径。在Toolchain中选择MDK-ARM,Min Version中选择V5,在下方Firmware Package Name and Version一行中取消Use latest available version的勾选,选择STM32Cube_FW_F1_V1.8.0。(最下方的Use Default Firmware Location打勾是使用默认的固件包安装路径。如果安装固件包时手动选择了安装路径就取消打勾,点击Browse选择安装时的路径)

8.在Code Generator如图配置。

9.点击右上角GENERATE CODE生成代码并点击Open Project。

9.在main.c中做如下修改:

添加头文件

#include "stdio.h"
#include "string.h"

10.我将RTC结构体的成员重新声明在了一个数组MyRTC_ReadTime下

uint16_t MyRTC_Time[6];
void MyRTC_ReadTime(void)
{
  RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;
  HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
  HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
  MyRTC_Time[0] = sDate.Year;
  MyRTC_Time[1] = sDate.Month;
  MyRTC_Time[2] = sDate.Date;
  MyRTC_Time[3] = sTime.Hours;
  MyRTC_Time[4] = sTime.Minutes;
  MyRTC_Time[5] = sTime.Seconds;
}

11.重要的一步,printf函数无法通过串口输出打印数据在调试助手上,需要重定义printf函数使其指向串口输出。

int fputc(int ch, FILE *f)
{
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
    return ch;
}

12.在主循环while(1)中使用第10步定义的包含结构体成员的数组。然后打印出年月日时分秒等数据并设置1000ms的延时即每秒打印一次。(注意需要在上方扳手处先将Editor选项卡中的Encoding改成UTF-8编码模式,不然串口数据会乱码)

while (1)
  {
    /* USER CODE END WHILE */
     
      MyRTC_ReadTime();

    printf("%dnian%dyue%dri\r\n", 2000 + MyRTC_Time[0], MyRTC_Time[1], MyRTC_Time[2]);
    printf("%dshi%dfen%dmiao\r\n", MyRTC_Time[3], MyRTC_Time[4], MyRTC_Time[5]);
    HAL_Delay(1000);

        /* USER CODE BEGIN 3 */
  }

13.编译程序,连接单片机,boot0置1,boot1置0,打开串口调试助手,找到相应的hex文件,开始下载。

14.下载完成,boot0和boot1置回0,点击复位键,串口输出RTC时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值