STM32F10xxx
每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作
TIMx主要功能
TIMx配置步骤
举例
void TIM4_IRQHandler()
{
if(TIM_GetITStatus(TIM4, TIM_IT_Update) == 1)
{
delay_ms(10);
led1 = ~led1;
}
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
}
typedef struct
{
uint16_t TIM_Prescaler; //预分频器的值
uint16_t TIM_CounterMode; //计数模式
uint16_t TIM_Period; //自动重装载的值
uint16_t TIM_ClockDivision; //时钟分频
uint8_t TIM_RepetitionCounter; //重复计数器
} TIM_TimeBaseInitTypeDef;
void TIM4_init(u16 per, u16 pre)
{
TIM_TimeBaseInitTypeDef tim = {0};
NVIC_InitTypeDef nvic =
{
TIM4_IRQn,
2,
2,
ENABLE
};
tim.TIM_Prescaler = pre;
tim.TIM_CounterMode = TIM_CounterMode_Up; //计数器向上计数,常用
tim.TIM_Period = per;
tim.TIM_ClockDivision = TIM_CKD_DIV1; //时钟1分频
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器时钟
TIM_TimeBaseInit(TIM4, &tim); //初始化定时器参数
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); //设置定时器中断类型,发生哪种事件
NVIC_Init(&nvic); //初始化NVIC
TIM_ClearFlag(TIM4, TIM_IT_Update); //清中断
TIM_Cmd(TIM4, ENABLE); //开启定时器
}
定时器定时时间计算
Tout = ((Period)*(Prescaler+1))/Tclk; //mb == us
500000 = (1000 * 36000)/72 //500000um