常见的定时器资源:
- 系统滴答定时器,SysTick
- 看门狗定时器,WatchDog
- 实时时钟,RTC
- 基本定时器,TIM6,TIM7
- 通用定时器,TIM2、TIM3、TIM4、TIM5
- 高级定时器,TIM1、TIM8
SysTick是集成在CortexM3内核当中的定时器,他不属于芯片商的外设,属于基本的系统定时器。主要目的是给RTOS提供时钟节拍做时间准备。
通用定时器在基本定时器的基础上实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。
STM32通用定时器知识点:
STM32通用定时器是通过可编程预分频器驱动的16位自动重装主计数器构成,可以对内部时钟或触发源、外部时钟或触发源进行计数。
通用定时器的工作原理:
首先,定时器的时钟信号送入16位的可编程预分频器,Prescaler中,其范围为0~65535.其次,待预分频器溢出后会向16位的主计数器,Counter Period发出一个脉冲信号。预分频器与主计数器大小不一定。
预分频器的本质是一个加法计数器,预分配系数实际上就是加法计数器的溢出值。
定时时间计算:
STM32CubeMx关于TIM定时器的配置:
- 先选择配置需要的TIM定时器,再将时钟来源改为内部时钟。再内容中配置预分频器和主计数器的值。时钟树按要求设置,例如32MHZ只需要将HCLK设为32即可,系统会自动配置。
- 每个定时器,NVIC都一定要选择使能。与输入中断一样。
关于CLION对定时器操作:
- 先在stm32f1xx_it.c文件中找到有关对应定时器TIM的配置,类似void TIM2_IRQHandler(void)。
- 跳转内部HAL_TIM_IRQHandler语句,在跳转后的stm32f1xx_hal_tim.c对应函数中找到时间回调函数,在main.c中重写。void HAL_TIM_PeriodElapsedCallback(htim)。
- 找到激活函数,调用。在stm32f1xx_hal_tim.c中,找到HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)函数重写HAL_TIM_Base_Start_IT(&htim2),此处采用指针&,对应定时器TIM2在tim.C中已有定义。
定时器的参数,在tim.C中,包含分频器,主计数器,模式等参数: