stm32定时器中断

来源:互联网 发布:adb forward多个端口 编辑:程序博客网 时间:2024/06/07 19:53

在最近几天一直在学习STM32,由于之前接触的比较少,所以遇到了一些问题,现在问题汇总起来,供大家学习。

1.首先,定时器中断需要做的就是分配时钟:

RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

//APB2负责AD,I/O,串口1,高级TIM;APB1负责DA,串口2345,普通TIM,USB,IIC,CAN

2.设定定时器的参数:

typedef struct
{
uint16_t TIM_Prescaler;      
uint16_t TIM_CounterMode;     //设置自动重装载寄存器周期的值
uint16_t TIM_Period;   //设置时钟频率除数的预分频值
uint16_t TIM_ClockDivision;     //设置时钟分割
uint8_t TIM_RepetitionCounter;   //用于高速定时器,TIM1,TIM8;
} TIM_TimeBaseInitTypeDef;      

TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);//该函数存在于stm32f10x_tim.c内

定时器溢出时间是用((TIM_CounterMode+1)*(TIM_Period+1))/72M计算得出。

3.设定中断参数:

NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);//设置中断分组,中断分组分5组;5组分别对应着先占优先级与从优先级。

typedef struct
{
  uint8_t NVIC_IRQChannel;     //中断的通道
  uint8_t NVIC_IRQChannelPreemptionPriority; //先占优先级,0最高
  uint8_t NVIC_IRQChannelSubPriority;       //从优先级,0最高
  FunctionalState NVIC_IRQChannelCmd;       //使能通道
} NVIC_InitTypeDef;

NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

4.TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);//使能TIM

5.书写中断函数:

在书写的中断函数内一定要有EXTI_ClearITPendingBit(uint32_t EXTI_Line)函数来清楚中断标志

在3之中设置的NVIC_IRQChannel来对函数进行命名,然后书写中断函数的内容。注意  中断函数无参数,无返回值,可适当延时。

以上5点就是我理解的定时器中断的大概步骤,如果有问题大家一起探讨,不喜勿喷,谢谢。


原创粉丝点击