当前位置:   article > 正文

keysking 【stm32】hal库学习笔记--定时器(超详细!)_stm32 hal 定时器

stm32 hal 定时器

stm32hal库–定时器

任务一:串口发送计数器的值

一.Cube MX配置

1.打开串口2及其中断,用于发送数据打开串口2及其中断
2.将高速外部时钟源设置为晶振,提高定时精度
将高速外部时钟源设置为晶振

3.将HCLK改为72MHz
将HCLK改为72MHz
4.开启定时器
TIM4–勾选 Internal Clock(内部时钟)/
TIM2–将Clock Source选择为Internal Clock
5.设置预分频器
Prescaler–n(想要实现的分频)-1
Counter Period(自动重装载寄存器)m-1
[即每数到m次计数器清零)
定时器设置

二.代码部分

  • 定时器启动函数 HAL_TIM_Base_Start
    (接收tim4句柄的指针)
    1.启动定时器
    Base定时器基本用法 调用此函数后TIM4开始计时工作
    2.打印计数器的计数值
    定义counter存储计数器的值
    定义char数组message用以拼接字符串

  • 宏定义-获取计数器值函数__HAL_TIM_GET_COUNTER(参数为htim4的指针)
    tips:hal库中宏定义函数比较偏底层,倾向于直接对寄存器进行操作
    3.循环中
    (1) 使用counter变量接受获取到的计数器值
    (2) 使用sprintf进行字符串拼接
    (用于储存字符串的message变量,
    (3) 想用串口发出的字符串"counter:%d",counter);

  • 串口中断发送函数 HAL_UART_Transmit_IT
    (用来发送的串口的指针,要发送数据的指针,发送数据的长度)
    (4) 防止发送过快 HAL_Delay
    tips:HAL_Delay函数精确延时 每次延时都比填入数字多1ms
    (5)sprintf–头文件stdio
    strlen–头文件string
    代码部分

/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes */
...
 /* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim4);
int counter=0;
char message[20];
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  counter=__HAL_TIM_GET_COUNTER(&htim4);
	  sprintf(message,"counter: %d",counter);
	  HAL_UART_Transmit_IT(&huart2,(uint8_t*)message,strlen(message));
	  HAL_Delay(99);
    /* USER CODE END WHILE */

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

三.实现效果

tips:开始时按KRST键(reset复位按钮)
从0开始计数 每100毫秒数1000个数
到10000个数(即9999)时计数器清零

函数补充

  • __HAL_TIM_GET_COUNTER 获取计数器的值
  • HAL_TIM_SET_COUNTER 用于设置计数器的值
  • HAL_TIM_GET_AUTORELOAD 获取重装载寄存器的值
  • HAL_TIM_SET_AUTIRELOAD 设置重装载寄存器的值
  • HAL_TIM_SET_PRESCALER 设置预分频器的值

任务二:定时

一.Cube MX配置

NVIC设置-打开TIM4全局中断

二.代码部分

1.启动定时器(+_IT 使其清零时触发更新中断)
启动定时器中断

  • HAL_TIM_Base_Start_IT
    2.重写中断回调函数
    1.找到中断回调函数找到中断回调函数
  • HAL_TIM_PeriodElapsedCallback 中断回调函数
    重写中断回调函数
/* USER CODE BEGIN 0 */
char data[]="声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/739179
推荐阅读
相关标签