本节是延续上一节定时器的计时功能而做的扩展应用,利用计时功能设计一个电子时钟。
开发环境:CubeMX+MDK5.27
芯片型号:STM32F103ZET6
时间:2020/07/13
简介:上一节我们配置基本定时器TIM6实现了10ms闪烁的LED灯,本节我们配置基本定时器实现一个电子时钟
电子时钟的最小单位是秒钟,也就是我们需要定时器每秒钟产生一个更新中断。根据上一节提出的公式
T = (Prescaler + 1) * (Counter Period + 1)/ TIM_Clock = 1s
现在已知TIM_Clock = 72MHz,所以我们让Prescaler = 7200-1,Counter Period = 10000 - 1即可使T=1s
实现步骤
第一步,在CubeMX中配置TIM7,具体配置如图

第二步,编写代码,在USER CODE BEGIN PTD下定义结构体clock
typedef struct{uint8_t hour;uint8_t min;uint8_t sec;}Clock_param;
在USER CODE BEGIN PV下定义结构体变量
Clock_Param clock = {0};
在USER CODE BEGIN 2下添加如下代码
__HAL_TIM_CLEAR_IT(&hitm7,TIM_IT_UPDATE);HAL_TIM_Base_Start_IT(&htim7);
在USER CODE BEGIN 3下添加如下代码
printf("Time:%2d:%2d:%2d\r\n",clock.hour,clock.min,clock.sec);
在USER CODE BEGIN 4下编写定时器中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if(htim->Instance == TIM7){clock.sec++;if(clock.sec == 60){clock.sec = 0;clock.min++;if(clock.min == 60){clock.min = 0;clock.hour++;if(clock.hour == 24){clock.hour = 0;}}}}}
实验结果:
