微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 电子时钟的实现

电子时钟的实现

时间:10-02 整理:3721RD 点击:

电子时钟


用基本定时器产生精确1S定时中断

创建工程

具体的如何创建工程,我之前的帖子都说明了,下面就不再赘述了。


首先打开Tim6




配置定时器参数设置为1S产生一次中断




PSC时分频器,下面讲一下分频器数值的意义


本来我们时钟频率是72MHZ,经过分频之后变成了72000000/36000=2000,也就是1S的时间计数器走2000个数,

下面的Period填的是2000,就是计数器数值达到2000后就会自动清零,并产生中断。


这样的话就会产生1S的中断了。


开启TIM6的中断




配置中断优先级




生成工程

Main.c添加下面代码

  1.   /* USER CODE BEGIN 2 */
  2.         HAL_TIM_Base_Start_IT(&htim6);
  3.   /* USER CODE END 2 */

复制代码

修改中断处理函数在stm32fxx_it.c

  1. void TIM6_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN TIM6_IRQn 0 */
  4.         static GPIO_PinState LD2_state=GPIO_PIN_RESET;
  5.         static int8_t h=0,m=0,s=0;
  6.   /* USER CODE END TIM6_IRQn 0 */
  7.   HAL_TIM_IRQHandler(&htim6);
  8.   /* USER CODE BEGIN TIM6_IRQn 1 */
  9.         
  10.         if(s==59)
  11.         {
  12.                 s=0;
  13.                 if(m==59)
  14.                 {
  15.                         m=0;
  16.                         if(h==23)
  17.                         {
  18.                                 h=0;
  19.                         }
  20.                         else
  21.                                 h++;
  22.                 }
  23.                 else
  24.                         m++;
  25.         }
  26.         else
  27.                 s++;
  28.         
  29.         HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,LD2_state);
  30.         LD2_state = ~ LD2_state;
  31.   /* USER CODE END TIM6_IRQn 1 */
  32. }

复制代码

只要再分别把时分秒输出显示就完成时钟了。


再加个效果演示视频就更好咯!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top