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
05-11 17:06
查看更多