STM32CubeMX使用定时器中断-设计简单电子时钟

基于STM32CubeMX利用定时器中断

定时器本质上就是一个记录脉冲数量的计数器,当记下的数达到上限(或者递减至下限)时会发生“溢出”,让计时器清零同时产生一个信号,这个信号可以代表很多事件。

这里利用“溢出”设计中断,从而做间隔相同时间的中断事件,设计可记录的电子时钟。

这里使用TIM2配置 挂载在总线APB2上 时钟频率为84MHz

在 CUBEMX 设置 PSC = 84 -1 ARR = 1000000 – 1
根据公式计算周期
T = (ARR+1)*(PSC+1)*(对应时钟频率的倒数)
这里的中断周期为1s

 添加按键中断

添加串口USART1

 

定义结构体变量clock
/* USER CODE BEGIN PTD */
typedef struct 
{
	uint8_t hour;
	uint8_t minute;
	uint8_t second;
	
}CLOCK_TypeDef;
/* USER CODE END PTD */

初始化

/* USER CODE BEGIN PV */
CLOCK_TypeDef clock = {0};
/* USER CODE END PV */

编写主函数

 /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT (&htim2); //启用TIM中断
	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
	printf("%02d:%02d:%02d \r\n",clock.hour,clock.minute ,clock.second);
	HAL_Delay (1000);
		
  }
  /* USER CODE END 3 */

编写中断回调函数

编写串口printf重定义

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	HAL_GPIO_TogglePin (GPIOA, GPIO_PIN_1);
	if(1)
	{
		clock.second ++;
		if(clock.second == 60){
			clock.second = 0;
			clock.minute++;
			if(clock.minute == 60){
				clock.minute = 0;
				clock.hour++;
				if(clock.hour == 24){ clock.hour=0; }
			}
		}
	}
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == K001_Pin)
	{
		printf("RecordTIME:%02d:%02d:%02d \r\n",clock.hour,clock.minute ,clock.second);
	}

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

int fgetc(FILE *f)
{
	uint8_t ch;
	HAL_UART_Receive (&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY );
	return ch;
}

/* USER CODE END 4 */
效果演示:
摁下 K1 记入当前时间

 

这里只精确到秒,读者可以自行设计更为精确的电子时钟。 

该文章作为个人学习stm32的记录,欢迎交流。

  • 5
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值