首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SysTick中断是否能够无视一切外设中断?

SysTick中断是否能够无视一切外设中断?

作者头像
知否知否应是绿肥红瘦
发布于 2025-02-19 21:18:07
发布于 2025-02-19 21:18:07
7730
举报
文章被收录于专栏:Linux知识Linux知识
针对STM32的SysTick中断,网上有很多说法,有人说SysTick是属于内核里面的中断,除了NMI等不可屏蔽中断,SysTick可以无视一切外设中断,即使外设中断的抢占优先级高于SysTick中断,对于这种说法,我本人的态度是半信半疑的,于是,我做了以下实验来进行验证。

实验芯片:STM32L052
中断类型:SysTick 、LPTIM1(update)
NVIC中断寄存器组:2(2位抢占优先级,2位子优先级,由于stm32L0不支持子优先级,故只有高2位有效) 
1.首先将SysTick中断优先级设置为最高(0),LPTIM1设置为最高(0)
SysTick中断服务函数: 
代码语言:javascript
复制
void SysTick_Handler(void)
{
  HAL_IncTick();
  printf("SysTick\r\n");	 
}
 LPTIM更新中断服务函数,里面有个while(1)用来判断其他任务是否能够抢占当前中断。
代码语言:javascript
复制
void LPTIM1_IRQHandler(void)
{

  HAL_LPTIM_IRQHandler(&hlptim1);
  while(1)
	{
	   unsigned int i=0xFFFFFF;
	   printf("LPTIM_interrupt\r\n");
	   for(;i>0;i--);
	}
}
 实验现象:
 仅仅有“LPTIM_interrupt”字符串打印,说明没有发生抢占行为,也就是说当外设中断优先级和systick中断优先级一致时,Systick中断并不能抢占其他的中断。
实际上在《Cortex-M0权威指南》中也有说明:
2.接下来,再进行第二个实验,将LPTIM中断优先级调低,保证SysTick>LPTIM
此时,LPTIM中断优先级已经被调到1 ,SysTick中断是可以抢占的。
但是还需要对LPTIM中断服务函数作些修改,否则,难以观察到LPTIM中的
串口打印。
代码语言:javascript
复制
void LPTIM1_IRQHandler(void)
{
     HAL_LPTIM_IRQHandler(&hlptim1);
	 printf("LPTIM_interrupt\r\n");		  
}
可以看到,SysTick已经抢占了LPTIM中断。
但是由于串口是查询方式发送,其在发送过程中发生了抢占,所以会发生上述情况。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 针对STM32的SysTick中断,网上有很多说法,有人说SysTick是属于内核里面的中断,除了NMI等不可屏蔽中断,SysTick可以无视一切外设中断,即使外设中断的抢占优先级高于SysTick中断,对于这种说法,我本人的态度是半信半疑的,于是,我做了以下实验来进行验证。
  • 实验芯片:STM32L052
  • 中断类型:SysTick 、LPTIM1(update)
  • NVIC中断寄存器组:2(2位抢占优先级,2位子优先级,由于stm32L0不支持子优先级,故只有高2位有效) 
  • 1.首先将SysTick中断优先级设置为最高(0),LPTIM1设置为最高(0)
  • SysTick中断服务函数: 
  •  LPTIM更新中断服务函数,里面有个while(1)用来判断其他任务是否能够抢占当前中断。
  •  实验现象:
  •  仅仅有“LPTIM_interrupt”字符串打印,说明没有发生抢占行为,也就是说当外设中断优先级和systick中断优先级一致时,Systick中断并不能抢占其他的中断。
  • 实际上在《Cortex-M0权威指南》中也有说明:
  • 2.接下来,再进行第二个实验,将LPTIM中断优先级调低,保证SysTick>LPTIM
  • 此时,LPTIM中断优先级已经被调到1 ,SysTick中断是可以抢占的。
  • 但是还需要对LPTIM中断服务函数作些修改,否则,难以观察到LPTIM中的
  • 串口打印。
  • 可以看到,SysTick已经抢占了LPTIM中断。
  • 但是由于串口是查询方式发送,其在发送过程中发生了抢占,所以会发生上述情况。
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档