CUBE MX 中配置systick的时钟源

在学习别的代码中发现,systick中断的SysTick_Handler被改写了,内部时钟源使用的是timer6,并且注释为了1ms,因为也在学习cube mx平台,所以打开了IOC文件进行了尝试怎么配置为TIM6。

 根据 HAL库使用定时器作为Systick时钟的方法(67条消息) HAL库使用定时器作为Systick时钟的方法_不吃鱼的猫的博客-CSDN博客_hal systick 高级应用icon-default.png?t=M0H8https://blog.csdn.net/laifengyuan1/article/details/107824132?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164447973716780264076028%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164447973716780264076028&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-107824132.first_rank_v2_pc_rank_v29&utm_term=HAL%E5%BA%93%E4%BD%BF%E7%94%A8%E5%AE%9A%E6%97%B6%E5%99%A8%E4%BD%9C%E4%B8%BASystick%E6%97%B6%E9%92%9F%E7%9A%84%E6%96%B9%E6%B3%95&spm=1018.2226.3001.4187 中的介绍,我找到了里面的代码部分,但是不同的固件库版本生成的代码还是有差异的。我用的库版本是STM32Cube_FW_F3_V1.11.2。

这个配置生成的代码部分是

HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
  RCC_ClkInitTypeDef    clkconfig;
  uint32_t              uwTimclock = 0;
  uint32_t              uwPrescalerValue = 0;
  uint32_t              pFLatency;
  /*Configure the TIM6 IRQ priority */
  HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0);

  /* Enable the TIM6 global Interrupt */
  HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);

  /* Enable TIM6 clock */
  __HAL_RCC_TIM6_CLK_ENABLE();

  /* Get clock configuration */
  HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);

  /* Compute TIM6 clock */
  uwTimclock = 2*HAL_RCC_GetPCLK1Freq();
  /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
  uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);

  /* Initialize TIM6 */
  htim6.Instance = TIM6;

  /* Initialize TIMx peripheral as follow:
  + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
  + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
  + ClockDivision = 0
  + Counter direction = Up
  */
  htim6.Init.Period = (1000000U / 1000U) - 1U;
  htim6.Init.Prescaler = uwPrescalerValue;
  htim6.Init.ClockDivision = 0;
  htim6.Init.CounterMode = TIM_COUNTERMODE_UP;

  if(HAL_TIM_Base_Init(&htim6) == HAL_OK)
  {
    /* Start the TIM time Base generation in interrupt mode */
    return HAL_TIM_Base_Start_IT(&htim6);
  }

  /* Return function status */
  return HAL_ERROR;
}

这个版本下没有对时钟的分频数进行判断,所以还是和更高的版本差别较大。

系统自动设置为了1ms的周期,也是一个比较标准的基时,在中断中可以用做更多的用途。

有个疑问:这样配置systick和用timer6定时一个1ms的基准在使用上有何区别呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值