STM32F2xx的定时器的应用
扫描二维码
随时随地手机看文章
定时器计数值的确定。
TIMER的时钟不是直接来源于APB1或者APB2,而是来自经过APB1或者APB2一个倍频器后的时钟。当APBx的预分频数为1时,这个倍频器不起作用,此时定时器的时钟频率等于APBx的频率;当APBx倍频数为其他数值时(即预分频数位2,4,8,16时),这个倍频数起作用,定时器时钟为APBx的两倍。例如AHB=60MHz,APB1为AHB的2分频,即为30MHz,则挂载在APB1下的时钟的频率为60MHz(2倍频)。
各个功能定时器的比较表。
Timer分布
TIM号
引脚映射
说明
TIMER
TIM1
TIM1_BKIN-PA6
TIM1_CH1N-PA7
TIM1_CH2N-PB0
TIM1_CH3N-PB1
TIM1_ETR-PE7
TIM1_CH1N-PE8
TIM1_CH1-PE9
TIM1_CH2N-PE10
TIM1_CH2-PE11
TIM1_CH3N-PE12
TIM1_CH3-PE13
TIM1_CH4-PE14
TIM1_BKIN-PE15
TIM1_CH1N-PB13
TIM1_CH2N-PB14
TIM1_CH3N-PB15
TIM1_CH1-PA8
TIM1_CH2-PA9
TIM1_CH3-PA10
TIM1_CH4-PA11
TIM1_ETR-PA12
高级控制定时器。可作为三相六通道PWM波形发生器。
也可以当做普通功能的定时器。
可以使用以下四种独立通道:
1. 输入捕捉;
2. 输出比较;
3.PWM发生器;
4. 单相输出模式。
TIM2
TIM2_CH1_ETR-PA0
TIM2_CH2-PA1
TIM2_CH3-PA2
TIM2_CH4-PA3
TIM2_CH1_ETR-PA5
TIM2_CH3-PB10
TIM2_CH4-PB11
TIM2_CH1_ETR-PA15
TIM2_CH2-PB3
通用功能定时器。
32位定时器,32位自动重装的上升或者下降计数器和一个16位预分频器。
TIM3
TIM3_CH1-PA6
TIM3_CH2-PA7
TIM3_CH3-PB0
TIM3_CH4-PB1
TIM3_CH1-PC6
TIM3_CH2-PC7
TIM3_CH3-PC8
TIM3_CH4-PC9
TIM3_CH1-PB4
TIM3_CH2-PB5
通用功能定时器。
16位定时器,16位自动重装的上升或者下降计数器和一个16位预分频器。
TIM4
TIM4_CH1-PD12
TIM4_CH2-PD13
TIM4_CH3-PD14
TIM4_CH4-PD15
TIM4_CH1-PB6
TIM4_CH2-PB7
TIM4_CH3-PB8
TIM4_CH4-PB9
TIM4_ETR-PE0
通用功能定时器。
16位定时器,16位自动重装的上升或者下降计数器和一个16位预分频器。
TIM5
TIM5_CH1-PA0
TIM5_CH2-PA1
TIM5_CH3-PA2
TIM5_CH4-PA3
TIM5_CH1_ETR-PH10
TIM5_CH2-PH11
TIM5_CH3-PH12
TIM5_CH4-PI0
通用功能定时器。
32位定时器,32位自动重装的上升或者下降计数器和一个16位预分频器。
TIM6
基本时钟。
主要作为DAC的触发器和波形发生器;也可以用作通用16位定时器。
TIM7
基本时钟。
主要作为DAC的触发器和波形发生器;也可以用作通用16位定时器。
TIM8
TIM8_ETR-PA0
TIM8_BKIN-PA6
TIM8_CH1N-PA7
TIM8_CH2N-PB0
TIM8_CH3N-PB1
TIM8_CH2N-PB14
TIM8_CH3N-PB15
TIM8_CH1-PC6
TIM8_CH3-PC8
TIM8_CH4-PC9
TIM8_CH1N-PH13
TIM8_CH2N-PH14
TIM8_CH3N-PH15
TIM8_CH4-PI2
TIM8_ETR-PI3
TIM8_BKIN-PI4
TIM8_CH1-PI5
TIM8_CH2-PI6
TIM8_CH3-PI7
高级控制定时器。可作为三相六通道PWM波形发生器。
也可以当做普通功能的定时器。
可以使用以下四种独立通道:
1. 输入捕捉;
2. 输出比较;
3.PWM发生器;
4. 单相输出模式。
TIM9
TIM9_CH1-PE5
TIM9_CH2-PE6
TIM9_CH1-PA2
TIM9_CH2-PA3
基于自动重装的16位上升计数器和一个16位预分频器。两个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3.PWM发生器;
4. 单相输出模式。
TIM10
TIM10_CH1-PF6
TIM10_CH1-PB8
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3.PWM发生器;
4. 单相输出模式。
TIM11
TIM11_CH1-PF7
TIM11_CH1-PB9
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3.PWM发生器;
4. 单相输出模式。
TIM12
TIM12_CH1-PH6
TIM12_CH2-PH9
TIM12_CH1-PB14
TIM12_CH2-PB15
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3.PWM发生器;
4. 单相输出模式。
TIM13
TIM13_CH1-PF8
TIM13_CH1-PA6
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3.PWM发生器;
4. 单相输出模式。
TIM14
TIM14_CH1-PF9
TIM14_CH1-PA7
基于自动重装的16位上升计数器和一个16位预分频器。1个独立通道。可以作为简单的时钟基准。
功能:
1. 输入捕捉;
2. 输出比较;
3.PWM发生器;
4. 单相输出模式。
Independent watchdog
独立看门狗。
基于12位向下计数器和八位预分频器,可以由独立的32K内部RC。可以主芯片断电下由纽扣电池继续工作。
Window watchdog
窗口看门狗。
基于7位可以自由运行的向下计数器。
SysTick timer
主要用于实时操作系统,也可以用在标准的向下计数器。
1.24位向下计数器;
2. 重载功能;
3. 当计数到0产生一个系统中断标志;
4. 可编程时钟资源。
systemtick的时钟直接来源于AHB,而且是24位的定时时钟,一般常用在实时操作系统中。定时非常准确。以下是systemtick的配置函数,由专门的中断void SysTick_Handler(void)。
/**
* @brief SysTick时钟配置。
* @note调用的是系统中的配置函数,将其函数名改掉而已,便于统一管理。
*只需要在该配置中加入计数值即可实现任意时间的定时配置,包括1us。
*
* void SysTick_Handler(void){···}
* @param ticks : 计数值。该计数值可通过以下公式求得:AHB_Clk*需要定时值,
*例如需要定时1ms,且60MHz的AHB,则计数值= 60MHz*1ms = 600000。
* @retval返回配置是否成功标志。
*/
60MHz AHB1时钟systemtick定时中断。
uint32_t BSP_CLK_SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
30MHz APB1时钟10us定时中断。
void TIM_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure1;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,