了解STM32 基本定时器

基本定时器TIM6和TIM7包含一个16位自动重载计数器,该计数器由可编程预分频器驱动。此类定时器不仅可以用作通用定时器以生成时基,还可以专门用于驱动数模转换器(DAC)。

 

基本定时器的特性包括:

1. 16位自动重载递增计数器

2. 16位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改), 分频系数介于1-65536之间

3. 用于触发DAC的同步电路

4. 发生如下更新事件时会生成中断/DMA请求:计数器上溢

时基单元
可编程定时器的主要模块由一个 16 位递增计数器及其相关的自动重载寄存器组成。计数器的 时钟可通过预分频器进行分频。
计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可执行读写操作。
时基单元包括:
● 计数器寄存器 (TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)
● 自动重载寄存器 (TIMx_ARR)

 

自动重载寄存器是预装载的。每次尝试对自动重载寄存器执行读写操作时,都会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 UEV 时 传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。当计数 器达到上溢值并且 TIMx_CR1 寄存器中的 UDIS 位为 0 时,将发送更新事件。该更新事件也可 由软件产生。下文将针对各配置的更新事件的产生进行详细介绍。
计数器由预分频器输出 CK_CNT 提供时钟,仅当 TIMx_CR1 寄存器中的计数器启动位 (CEN) 置 1 时,才会启动计数器。
请注意,实际的计数器使能信号 CNT_EN 在 CEN 置 1 的一个时钟周期后被置 1。

 

HAL库函数

/* TIM11 init function */
void MX_TIM11_Init(void)
{
TIM_OC_InitTypeDef sConfigOC; // TIM输出比较配置结构定义

htim11.Instance = TIM11;
htim11.Init.Prescaler = 0; // 预分频
htim11.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数模式
htim11.Init.Period = 0;  // 周期
htim11.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // 时钟分频
if (HAL_TIM_Base_Init(&htim11) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}

if (HAL_TIM_PWM_Init(&htim11) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}

sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;  // 占空比
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim11, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}

HAL_TIM_MspPostInit(&htim11);

}
 
 
posted @ 2017-10-15 14:16  小土坡  阅读(109)  评论(0)    收藏  举报