欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32 systick配置 基于stm32cube

程序员文章站 2022-06-09 09:31:28
...

1.stm32 cube如何配置sysytick

 

(1)

STM32 systick配置 基于stm32cube

(2)配置时钟源72MHz

STM32 systick配置 基于stm32cube

(3)生成的代码如下 默认配置是1ms产生一次中断。 

__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
  /* Configure the SysTick to have interrupt in 1ms time basis*/
  if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U)
  {
    return HAL_ERROR;
  }

  /* Configure the SysTick IRQ priority */
  if (TickPriority < (1UL << __NVIC_PRIO_BITS))
  {
    HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
    uwTickPrio = TickPriority;
  }
  else
  {
    return HAL_ERROR;
  }
   /* Return function status */
  return HAL_OK;
}

(4)如下添加用户代码即可

/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */
	
  /* USER CODE END SysTick_IRQn 1 */
}

 

2.深入理解systick 基于stm32cube

(1)main函数调用  HAL_Init();

STM32 systick配置 基于stm32cube

(2)HAL_Init();调用HAL_InitTick(TICK_INT_PRIORITY);

该函数完成systick的配置 (默认1ms)

 

3.疑问

 

(1)如何更改systick中断频率 ?

typedef enum
{
  HAL_TICK_FREQ_10HZ         = 100U,
  HAL_TICK_FREQ_100HZ        = 10U,
  HAL_TICK_FREQ_1KHZ         = 1U,
  HAL_TICK_FREQ_DEFAULT      = HAL_TICK_FREQ_1KHZ
} HAL_TickFreqTypeDef;

改如下参数即可

4.总结

4.注意事项

(1).Systick的中断函数一定要在STM32CubeMX中设置自动生成出来;

(2).由于Systick中断每次累加值uwTickFreq是在stm32f1xx_hal.c定义,且默认是1U(以1kHz为默认频率)。而Systick配置函数是在stm32f1xx_hal_cortex.c和core_cm3.h定义,各自完全独立。因此,如果Systck配置频率不是1kHz时,需要利用stm32f1xx_hal.c的HAL_SetTickFreq()函数重新配置累计值uwTickFreq;

(3).当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。
 

 

 

相关标签: stm32