STM32
直播中

自我清欢

9年用户 929经验值
擅长:可编程逻辑 模拟技术 EMC/EMI设计 光电显示 存储技术
私信 关注
[问答]

如何对高级定时器TIM1进行配置

如何对高级定时器tiM1进行配置?高级定时器的配置与普通定时器有何不一样?

回帖(1)

陈丽霞

2021-10-18 14:35:09
  因为在网上很难找到高级定时器TIM1 的配置,而且高级定时器的配置跟普通定时器不太一样,所以记录一下。
  实验板子:正点原子探索者STM32F407ZGT6
  TIM1、TIM8至TIM11的时钟为APB2时钟的两倍即168M,TIM2至TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍即84M。
  //初始化配置
  void Timer1_Init(u16 arr,u16 psc)
  {
  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrecture;
  NVIC_InitTypeDef NVIC_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);/*使能定时器1的时钟*/
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM10_IRQn;/*定时器1的中断通道使能*/
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/*定时器1的中断通道使能*/
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;/*抢占优先级*/
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;/*响应优先级*/
  NVIC_Init(&NVIC_InitStructure);/*配置中断分组,并使能中断*/
  TIM_TimeBaseInitStrecture.TIM_Period = arr;/*重装载寄存器*/
  TIM_TimeBaseInitStrecture.TIM_Prescaler = psc;/*预分配*/
  TIM_TimeBaseInitStrecture.TIM_ClockDivision = TIM_CKD_DIV1;/*时钟分频*/
  TIM_TimeBaseInitStrecture.TIM_CounterMode = TIM_CounterMode_Up;/*向上计数*/
  TIM_TimeBaseInitStrecture.TIM_RepetitionCounter = 0;/*重复计数寄存器*/
  TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStrecture);/*初始化*/
  TIM_ClearFlag(TIM1,TIM_FLAG_Update);/*清更新标志位*/
  TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);/*使能中断*/
  TIM_Cmd(TIM1,ENABLE);/*使能计数*/
  }
  中断函数
  //中断函数
  void TIM1_UP_TIM10_IRQHandler(void)
  {
  if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)//检查指定的TIM中断发生与否:TIM 中断源
  {
  TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源
  /***************在此处添加中断执行内容******************/
  LED1 = ~LED1;
  printf(“定时器1定时器1定时器1定时器1定时器1定时器1”);
  }
  }
  主函数测试
  int main(void)
  {
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  delay_init(168); //初始化延时函数
  uart_init(115200);//PA9 PA10 初始化串口波特率为115200
  //LED_Init(); //PF9 PF10
  Timer1_Init(10000-1,8400-1);// (10000 x 8400) / 168M = 0.5s.
  while(1)
  {
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分