STM32定时器与日历时钟

目录

一、STM32定时器实例

1、定时器简介

2、实例

1)、要求

2)、STM32CubeMX创建项目

 2)、STM32CubeMX设置

  3)、keil项目调试

 4)、线路连接

 5)、烧录

6)、实验效果

 二、日历时钟实例

1、RTC介绍

1)、RTC(实时时钟)简介

2)、RTC原理

 3)、RTC特点

2、实例

1)、要求

2)、STM32cubeMX设置

  3)、keil项目调试

4)、烧录

5)、实验效果

三、总结


一、STM32定时器实例

1、定时器简介

STM32 单片机的定时器分为高级定时器、 通用定时器 、基本定时器三种。这三个定时器成上下级的关系,即基本定时器有的功能通用定时器都有,而且还增加了向下、向上/向下计数器、PWM生成、输出比较、输入捕获等功能。

2、实例

1)、要求

设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。

2)、STM32CubeMX创建项目

 2)、STM32CubeMX设置

引脚设置

A4引脚为GPIO_Output类型,用于连接LED负极,重命名为LED方便后续代码使用 。

 RCC设置

 SYS设置

 USART1设置

 配置定时器,这里配置定时器2

配置中断,生成定时器2中断优先级配置代码。

时钟树配置

 完成设置

  3)、keil项目调试

main函数添加代码

 HAL_TIM_Base_Start_IT(&htim2);//启动定时器2

添加定时器回调函数 (可添加在main.c中)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	static uint32_t time_cnt =0;
	static uint32_t time_cnt1 =0;
	char data[] = "hello windows!\n";
	if(htim->Instance == TIM2)
	{
		if(++time_cnt >= 200)//两秒LED状态反转一次
		{
			time_cnt =0;
			HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
		}
		if(++time_cnt1 >= 500)//每五秒输出hello windows
		{
			time_cnt1 =0;
			HAL_UART_Transmit(&huart1,(uint8_t *)data,15,0xffff);
		}
	}
}

 编译

设置生成hex文件

 

 4)、线路连接

USB转TLL与开发板接线
3v3——3.3v
TXD——A10
RXD——A9
GND——G

开发板接线
A4——二极管负极
3.3——二极管正极

接线效果

 5)、烧录

6)、实验效果

 

 二、日历时钟实例

1、RTC介绍

1)、RTC(实时时钟)简介

RTC(实时时钟)是指安装在电子设备或实现其功能的IC(集成电路)上的时钟。当您在数字电路中称其为“时钟”时,您可能会想到周期信号,但在英语中,clock也意味着“时钟”。它还意味着将当前时间保持在北顶的时钟,因此它具有“实时”。

2)、RTC原理

RTC基本上由晶体振荡器和振荡器电路组成。这种晶体单元是石英,具有在施加电压时高速振动的特性。振动频率大约是32.768kHz,月差(一个月偏差多少)在1分钟之内。这种振动被振荡电路转换成时钟信号,时间显示在显示器上。该RTC可以安装在CPU的主板上,也可以安装在外部IC上。

 3)、RTC特点

·低功耗

·环境温度变化,频率也很稳定

·晶体振荡器转换的时钟信号在时间上显示的速度与计算机相比非常慢,因此它被设计成不会频繁地写入RTC

2、实例

1)、要求

了解实时时钟RTC的原理。STM32芯片自带RTC,因此不须像其他MCU需外接RTC模块。请编程实现STM32的日历读取、设置和输出。要求:

1)读取RTC初始时间;

2)将RTC时间调整为当前时间,并以 2021年x月x日x分x秒的格式从串口输出(或输出到OLED屏),每1s改变一次;

3)如果输出内容中需加入“星期x”,请修改代码。

2)、STM32cubeMX设置

创建工程(如上一实例)

RCC设置

 配置RTC,激活时钟源(Activate Clock Source)和日历(Activate Calendar))

 设置初始时间为2016年1月1日10:30

 

 USART1设置(用于串口通信)

时钟树配置

完成配置

  3)、keil项目调试

添加代码

在main.c添加结构体

RTC_DateTypeDef GetData;  //获取日期结构体
RTC_TimeTypeDef GetTime;   //获取时间结构体

在main.c添加foutc函数,使得能够使用printf函数

int fputc(int ch,FILE *f)
{
	uint8_t temp[1]={ch};
	HAL_UART_Transmit(&huart1,temp,1,2);
	return ch;
}

在while函数中添加代码

/* 获取RTC中时间 */
	  HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
      /* 获取RTC中日期 */
      HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);

      /* 输出年月日 */
      printf("%02d/%02d/%02d\r\n",2000+ GetData.Year, GetData.Month, GetData.Date);
      /* 输出时间*/
      printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);
	  /*输出星期*/
	  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");
		}
      printf("\r\n");

      HAL_Delay(1000);

4)、烧录

5)、实验效果

三、总结

本次练习与之前练习的步骤相差不大,主要在代码学习方面有所不同。

rtcSTM32 STM32 STM32的实时钟( 实时钟( 实时钟( RTCRTCRTC)是一个独立的定时器。 )是一个独立的定时器。 )是一个独立的定时器。 )是一个独立的定时器。 )是一个独立的定时器STM32STM32 STM32的 RTCRTCRTC模块拥有一组连续计数 模块拥有一组连续计数 模块拥有一组连续计数 模块拥有一组连续计数 模块拥有一组连续计数 的计数器, 的计数器, 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 在相应软件配置下,可提供时钟日历的功能。修改计数器值以重新设系统当 前的时间日期。 前的时间日期。 前的时间日期。 前的时间日期。 RTCRTCRTC模块和时钟配置系统 模块和时钟配置系统 模块和时钟配置系统 模块和时钟配置系统 模块和时钟配置系统 (RCC_BDCR(RCC_BDCR(RCC_BDCR(RCC_BDCR(RCC_BDCR(RCC_BDCR(RCC_BDCR(RCC_BDCR(RCC_BDCR寄存器 寄存器 )是在后备区域,即系统复位或从待机模式 是在后备区域,即系统复位或从待机模式 是在后备区域,即系统复位或从待机模式 是在后备区域,即系统复位或从待机模式 是在后备区域,即系统复位或从待机模式 是在后备区域,即系统复位或从待机模式 是在后备区域,即系统复位或从待机模式 是在后备区域,即系统复位或从待机模式 是在后备区域,即系统复位或从待机模式 唤醒后 唤醒后 RTCRTCRTC的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器的设置和 时间维持不变。但是在系统复位后,会自动禁止访问备寄存器RTCRTCRTC, 以防止对后备区域 以防止对后备区域 以防止对后备区域 以防止对后备区域 (BKP)(BKP)(BKP)(BKP)(BKP)的意外写操作。所以在要设置时间之前, 的意外写操作。所以在要设置时间之前, 的意外写操作。所以在要设置时间之前, 的意外写操作。所以在要设置时间之前, 的意外写操作。所以在要设置时间之前, 的意外写操作。所以在要设置时间之前, 的意外写操作。所以在要设置时间之前, 的意外写操作。所以在要设置时间之前, 的意外写操作。所以在要设置时间之前, 先要取消备份区域( 先要取消备份区域( 先要取消备份区域( 先要取消备份区域( 先要取消备份区域( BKPBKPBKP) 写保护。 写保护。 RTCRTCRTC的简化框图,如 的简化框图,如 的简化框图,如 的简化框图,如 图 20.1. 0.1. 1所示: 所
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值