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的基准在使用上有何区别呢?

版权声明:本文为CSDN博主「yangzichen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangzichen/article/details/122861983

生成海报
点赞 0

yangzichen

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

4路红外循迹模块使用教程

4路红外循迹模块使用教程 个人原创博客:点击浏览模块详细信息: 工作电压:DC 3.3V~5V 工作电流:尽量选择1A以上电源供电 工作温度:-10℃~50℃ 安装孔

拉绳位移传感器在接线时需要注意哪几点?

拉绳位移传感器在接线时需要注意哪几点? 1、拉绳位移传感器在接线时务必确认在电源关闭的情况下进行接线,接线应采用锡焊工艺,各引脚应焊接牢固,避免虚焊情况发生。焊接各引脚时应严格按照传感器厂

实验一 stm32F407VETx点亮流水灯

二、设计指标 使电路板上的8个LED轮流点亮,并按键控制点亮速度。 三、操作 1、CubeMX操作 1.1依据开发板LED引脚设置CubeMX中8个LED的引脚为GPIO_Output模式, 2、按键设置

初试——串口传输文件

一、实验概述 串口传输文件的练习。将两台笔记本电脑,借助 usb转rs232 模块和杜邦线,建立起串口连接。然后用串口助手等工具软件(带文件传输功能)将一台笔记本上的一个大文件&#xff