本文为作者学习笔记
欢迎交流讨论,喜欢的话点个赞吧
定时器
定时器的基本介绍
- 定时器的基本功能:
- 输入捕获
- 输出比较
- PWM
- 编码器接口、霍尔传感器接口
- 定时器的种类:
- 高级控制定时器
- 通用定时器
- 基本定时器
基本定时器
-
定时器的特性:
-
定时器的时钟源:
-
定时器初始化结构体:
1. Prescaler:定时器的预分频设置,可设置的值范围是0-65535,实现1到65535的分频,通过时钟树可以确定总的频率,除以设定的分频系数即为分频后的时钟。
- CounterMode:定时器计数方式,基本定时器只能向上计数,即TIMxCNT只能从0开始递增,无须初始化。
- Period:定时器周期,可设置值为0~65535。若在定时器预分频我们已经得到分频后的时钟为1MHz。Period的值我们设置为1000,这样,定时器产生中断的频率为:1MHz/1000=1KHz,即为1ms的定时周期。
- ClockDivision:时钟分频,设置定时器时钟CK_INT频率与数字滤波器采样时钟频率分频比。
- RepetitionCounter:重复计数器,属于高级控制寄存器专用寄存器位,利用它可以轻松控制输出PWM的个数。
- 定时器句柄结构体:
- 定时器定时代码的实现:
void MX_TIM5_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim5.Instance = TIM5;
htim5.Init.Prescaler = 239; //预分频
htim5.Init.CounterMode = TIM_COUNTERMODE_UP; //定时器计数方式
htim5.Init.Period = 999; //定时器周期
htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim5) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
{
Error_Handler();
}
HAL_TIM_MspPostInit(&htim5);
}
高级定时器
- 定时器特性:
- 定时器时钟源:
- 内部时钟源(SMS=000)
- 外部时钟源1(SMS=111)
- 外部时钟源2(ECE=111)
- 内部触发输入
- 定时器计数器:
请在转载文章过程中明确标注文章出处!尊重原创,尊重知识产权,谢谢!