stm32中断

本文详细介绍了STM32中断服务例程(ISR)的工作原理,包括硬件中断、内核中断(如SysTick)的管理,并讨论了中断优先级的设置。通过示例代码展示了如何初始化SysTick中断,实现1ms中断一次的功能。同时,讨论了使用SysTick中断替代传统延时函数以避免阻塞其他任务的优势。
摘要由CSDN通过智能技术生成

中断服务例程(interrupt service routine,ISR)中断一般是由硬件(例如外设、外部引脚)产生,内核中断(systick、异常管理和休眠模式等),其中断优先级由SCB寄存器来管理,IRQ的中断优先级由NVIC来管理。
中断事件会导致中断,但由于各种原因,中断无法立即执行的话,会被挂起,Pendingbit。如果中断被响应,则硬件自动清除Pendingbit。在中断中尽量使用PPP_ClearITPendingBit();非中断使用PPP_ClearFlag().

内核中断不用NVIC_IRQChannel,因为SysTick_IRQn是-1(在stm32f10x.h可查),属于异常中断,外部中断(如定时器中断)属于正常中断
使用systick中断示例

void Systick_Init()
{
    SysTick->LOAD = 9000;
    
    NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);  //SCB->SHP[11] = ((u8)15<<4);
      
    SysTick->VAL = 0;
    
    SysTick->CTRL &=~ ((u32)0x01<<2);   //SysTick_CTRL_CLKSOURCE_Pos
    SysTick->CTRL |= ((u32)0x01<<1);    //SysTick_CTRL_TICKINT_Pos
    SysTick->CTRL |= ((u32)0x01<<0);    //SysTick_CTRL_ENABLE_Msk
}

在这里插入图片描述

上面的程序对8M晶振来说,可实现1ms中断一次。
在单片机中,delay()相当于空跑,会停止其他的正在进行的任务。可以使用systick进行中断,在中断里设置变量++,这样可以实现达到一段时间后执行所需要的任务的目的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值