1.stm32 cube如何配置sysytick
(1)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLwUleNFTUE50MNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4cTN0UDMyETM5AzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
(2)配置時鐘源72MHz
(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();
(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定時器亦将暫停運作。