赞
踩
1.TIM简介
定时器是stm32中功能最强大结构最复杂的外设
定时器类型:
看看基本定时器的框图
如果预分频器写0,那么输出频率=72mhz(主频)
如果预分频器写1,那么输出频率就会变成36mhz
当计数器的值等于自动重装寄存器时,就会触发中断
基本定时器只支持向上计数一种模式,通用和高级计数器支持向上计数、向下计数、中央对齐三种模式
2.定时中断基本结构
代码部分只需按照路线打通就行了,简单介绍一下对应库函数
TIM_DeInit(TIM_TypeDef* TIMx);恢复缺省配置
TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);用于配置时基单元
TIM_Cmd用于使能计数器
TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);用于使能中断输出信号
TIM_InternalClockConfig(TIM_TypeDef* TIMx);选择内部时钟
TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);选择ITRx其他定时器的时钟
TIM_TIxExternalClockConfig,选择TIx捕获通道的时钟
TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);选择ETR通过外部时钟模式1输入的时钟
TIM_ETRClockMode2Config选择ETR通过外部时钟模式2输入的时钟
TIM_ETRConfig用于配置预分频器、极性、滤波器这些参数
TIM_PrescalerConfig用于单独写预分频值
TIM_CounterModeConfig用于改变计数器的计数模式
TIM_ARRPreloadConfig自动重装器预装功能设置
TIM_SetCounter给计数器写入一个值
TIM_SetAutoreload给自动重装器写入一个值
TIM_GetCounter获取当前计数器的值
TIM_GetPrescaler获取当前预分频器的值
3.预分频器时序
代码范例:
- #include "stm32f10x.h" // Device header
-
- void Timer_Init(void)
- {
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
-
- TIM_InternalClockConfig(TIM2);
-
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;
- TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;
- TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
-
- TIM_ClearFlag(TIM2, TIM_FLAG_Update);
- TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_Init(&NVIC_InitStructure);
-
- TIM_Cmd(TIM2, ENABLE);
- }
-
- /*
- void TIM2_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
- {
-
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- }
- }
- */

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。