STM32
直播中

陈键

8年用户 1028经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

如何去实现基于STM32 HAL库的定时器TIM呢

如何去实现基于STM32 HAL库的定时器tiM呢?其代码该怎样去实现?

回帖(1)

张勇

2021-11-18 09:23:08
  网上方法貌似不多,自己写一个
  TIM_HandleTypeDef htim6;
  /* TIM6 init function */
  void MX_TIM6_Init(void)
  {
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  htim6.Instance = TIM6;
  htim6.Init.Prescaler = 7200-1; //7200-1表示将72MHz/7200,分频至10k
  htim6.Init.Period = 1000-1; //以10kHz频率定时1次,每1000次中断1次。
  htim6.Init.ClockDivision = 0x0;
  htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  HAL_TIM_Base_Init(&htim6);
  HAL_TIM_Base_Start_IT(&htim6);
  }
  //定时器底层驱动,开启时钟,设置中断优先级
  //此函数会被HAL_TIM_Base_Init()函数调用
  void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
  {
  if(htim-》Instance==TIM6)
  {
  __HAL_RCC_TIM6_CLK_ENABLE(); //使能TIM6时钟
  HAL_NVIC_SetPriority(TIM6_IRQn,1,3); //设置中断优先级,抢占优先级1,子优先级3
  HAL_NVIC_EnableIRQ(TIM6_IRQn); //开启ITM3中断
  }
  }
  //定时器6中断服务函数
  void TIM6_IRQHandler(void)
  {
  HAL_TIM_IRQHandler(&htim6);
  }
  //回调函数,定时器中断服务函数调用
  void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  {
  if(htim==(&htim6))
  {
  if(times 《 8) times ++; //定时器周期中断处理函数,尽量别处理太复杂
  else times = 8;
  }
  }
举报

更多回帖

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