STM32单片机教程:基本定时器的编程(1)

在STM32超低功耗系列的STM32L4系列的MCU中,包含以下系列的芯片:

STM32L41xxx,L42xxx,L43xxx,L44xxx,L45xxx,L46xxx;

STM32L47xxx,L48xxx,L49xxx,L4Axxx。

这些芯片中具备2个基本定时器(Basic timers):TIM6和TIM7。

TIM6存在于上述所有系列芯片中。TIM7只存在于:L43xxx,L44xxx 这2个系列中。

TIM6和TIM7由可编程预分频器驱动的16位自动重载计数器组成。

其输入时钟源为PCLK1,PCLK1的来源如下图:

注意:当HCLK分频为PLCK1的分频系数=1时,输入TIM6和TIM7的时钟=PCLK1,

当HCLK分频为PLCK1的分频系数不等于1时,输入TIM6和TIM7的时钟=PCLK1*2。

在使用TIM6,TIM7之前需要将其时钟使能。

TIM6的时钟使能控制位:RCC_APB1ENR1[4].TIM6EN = 1

TIM7的时钟使能控制位:RCC_APB1ENR1[5].TIM7EN = 1

这2个定时器只可以增计数,当计数器的值从0增计数到自动重载值TIM6->ARR时产生中断。当重载值设置到TIM6->ARR后,会把这个值加载到影子寄存器里面,计数器的实时计数值是和影子寄存器的内容来比较的,当计数器的值达到影子寄存器的值时,会产生中断。

下面是TIM6产生1 ms中断的例子代码:

//-----------------------------------------------------------------------------
// TIM6通用定时器
//
// 时钟源:	APB1-PCLK1 = 18.432MHz【80 MHz Max】
//
// RCC_CFGR_PPRE1 的分频系数  = 1 时  CLK = APB1-PCLK1
// RCC_CFGR_PPRE1 的分频系数 != 1 时  CLK = APB1-PCLK1 * 2
//-----------------------------------------------------------------------------
void TIM6_Init(void)
{
 // 允许TIM6时钟
 RCC->APB1ENR1 |= RCC_APB1ENR1_TIM6EN;

 // 清除:中断标志
 TIM6->SR &= ~TIM_DIER_UIF;

 // 允许:中断
 TIM6->DIER |= TIM_DIER_UIE;			

 // 中断源:只有当计数器溢出时产生中断 
 TIM6->CR1 |= TIM_CR1_URS;

 // 计数器溢出时,允许将TIM6->ARR的值更新到影子寄存器
 TIM6->CR1 &= ~TIM_CR1_UDIS;

 // 启用预加载:TIM6->ARR到影子寄存器
 TIM6->CR1 |= TIM_CR1_ARPE;			

 // 对输入时钟预分频,这里设输入时钟 = APB1-PCLK1 * 2  = 36.864
 // 定时器的时钟 = 36.864  / (PSC+1) = 18.432 MHz
 TIM6->PSC = 1;
	
 // 计数值 = 18432,因为时钟是18.432 MHz,定时器增计数到18432产生中断,时间是1ms
 TIM6->ARR = 18432;

 // 启动TIM6计数器
 TIM6->CR1 |= TIM_CR1_CEN;			

 // 开TIM6中断                    
 NVIC_EnableIRQ(TIM6_DAC_IRQn);		
}

//-----------------------------------------------------------------------------
// TIM6中断处理程序
// 中断时间 = 18432 / 18.432 MHz = 1ms
//-----------------------------------------------------------------------------
void TIM6_DAC_IRQHandler(void)
{
 // 清除:中断标志
 TIM6->SR &= ~TIM_DIER_UIF;
                         
 // 此处可以添加自己的处理程序
 // ...
}
	/////////////////////////////////////////////////////////////////////////////////////////////// 2ms
原文链接:,转发请注明来源!