天天看點

STM32 systick配置 基于stm32cube1.stm32 cube如何配置sysytick2.深入了解systick 基于stm32cube3.疑問4.總結

1.stm32 cube如何配置sysytick

(1)

STM32 systick配置 基于stm32cube1.stm32 cube如何配置sysytick2.深入了解systick 基于stm32cube3.疑問4.總結

(2)配置時鐘源72MHz

STM32 systick配置 基于stm32cube1.stm32 cube如何配置sysytick2.深入了解systick 基于stm32cube3.疑問4.總結

(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配置 基于stm32cube1.stm32 cube如何配置sysytick2.深入了解systick 基于stm32cube3.疑問4.總結

(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定時器亦将暫停運作。

繼續閱讀