STM32 systick配置 基于stm32cube
程序员文章站
2022-06-09 09:31:28
...
1.stm32 cube如何配置sysytick
(1)
(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定时器亦将暂停运作。
上一篇: STM32F103系统时钟配置
下一篇: 舵机MX-64AR与MX-28AR驱动