学习stm32f429 hal库编程时遇到了SystickHandler疑似无法执行的情况
中断服务函数
void SysTick_Handler(void)
{
HAL_IncTick();
TimingDelay_Decrement();
}
uint32_t TimingDelay
void SysTick_Init(void)
{
/* SystemFrequency / 1000 1ms中断一次
* SystemFrequency / 100000 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/
if (HAL_SYSTICK_Config(SystemCoreClock / 100000))
{
/* Capture error */
while (1);
}
}
/**
* @brief us延时程序,10us为一个单位
* @param
* @arg nTime: Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us
* @retval 无
*/
void Delay_us(uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/**
* @brief 获取节拍程序
* @param 无
* @retval 无
* @attention 在 SysTick 中断函数 SysTick_Handler()调用
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
经过调试后发现,中断服务程序中修改的供其它程序检测的变量需要加上volatile关键字,让中断服务函数能读到该值.
volatile uint32_t TimingDelay
void Delay_us(volatile uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}