C语言-STM32:初始定时器(通用定时器)
STM32定时器的作用: STM32定时器是一个重要的硬件资源,主要用于以下几种用途:
(图片来源网络,侵删)
- 计数:它可以用来计数外部事件的次数,例如脉冲或信号的周期。
- 定时:定时器可以设置一个特定的时间间隔后产生中断,用于执行周期性的任务。
- PWM(脉宽调制):通过设置定时器的捕获/比较寄存器,可以生成不同占空比的PWM波形,用于电机控制、亮度调节等。
- 同步信号:定时器可以与其他外设或定时器进行同步,以实现复杂的时序控制。
- 延迟函数:通过设置定时器的计数值,可以实现精确的延时功能。
初始化STM32 TIM2 定时器的基本步骤如下(以C语言为例):
头文件
#ifndef __TIMER_H__ #define __TIMER_H__ #include "stm32f1xx_hal.h" void timer_init(uint16_t arr,uint16_t psc); #endif
#include "timer.h" TIM_HandleTypeDef timer_handler={0};//初始化句柄 //定时器初始化函数 void timer_init(uint16_t arr,uint16_t psc){ timer_handler.Instance=TIM2; //指定定时器实例为TIM2 timer_handler.Init.Period=arr; //设置周期值 timer_handler.Init.Prescaler=psc; // 时钟预分频因子 timer_handler.Init.CounterMode=TIM_COUNTERMODE_UP; //计数模式 timer_handler.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;//自动重载预加载禁止 HAL_TIM_Base_Init(&timer_handler); //基本定时器初始化 HAL_TIM_Base_Start_IT(&timer_handler); // 开始定时器 } //msp函数 void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim){ if(htim->Instance==TIM2){ __HAL_RCC_TIM2_CLK_ENABLE(); //时钟使能 HAL_NVIC_SetPriority(TIM2_IRQn,2,2);//设置中断线,抢占优先级,和响应优先级 HAL_NVIC_EnableIRQ(TIM2_IRQn); // 启用TIM2中断 } } //中断服务函数 void TIM2_IRQHandler(void){ HAL_TIM_IRQHandler(&timer_handler); } //更新回调函数 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim->Instance==TIM2){ LED_8_Toggle(); } }
请注意,实际应用中需要根据具体系统时钟频率、所需的定时精度以及是否需要中断来调整预分频因子和周期值。上述代码中的Use_TIM2_IRQ是一个布尔变量,如果设置为true,则会启用中断;如果不需要中断,可以省略中断相关的初始化和启用代码。
(图片来源网络,侵删)
(图片来源网络,侵删)
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...