STM32 CortexM3 中断 学习笔记!

异常:一切打断了程序运行的异常,可能是由于程序错误或者硬件错误导致程序中断或者跑飞都是异常。
中断:中断是CPU运行的正常行为,系统停止当前正在运行的程序而转向其他服务
            CM3中一共有240个中断,15个异常,其中异常编号为1~15,编号为0的没有异常。一般芯片中的中断数量也是有限的,STM32有84个中断其中,内核有16个,  
            外部中断68个,F103中只有60个。
中断通道:每个可中断的外设对应一个钟段通道,因此内核外部的中断通道共有68个,每个通道设置对应的优先级控制字,就可以关联到不同的中断优先级,产生中断嵌套。
            抢占优先级与响应(子)优先级:不同的抢占优先级之间可以发生嵌套,如果两个中断的抢占优先级相同而子优先级不同,它们之间不能发生嵌套。子优先级产生作用
            的时候是在:当抢占优先级相同而响应优先级不同时,如果两个各中断同时到来,系统将会首先响应响应优先级高的那个中断。在CM3中中断编号越小对应的优先级越
            高。
优先级设置
     1. 设置中断优先级的分组,在“应用程序中断及复位控制寄存器(AIRCR)”中[10:8] PRIGROUP段设置分组特征,如下表:
可见尽管有68个通道但是系统中的抢占优先级只能设置最多16级。
   2.设置外设本身的寄存器,允许相应的中断,如允许 UIE(TIME2_DIER 的第[0]位) 
   3.设置 TIME2 中断通道的抢先优先级和子优先级(IP[28] ,在 NVIC 寄存器组中)
这里用库函数对NVIC进行初始化,先定义NVIC_InitTypeDef类型的结构体,来传递参数,包括4个参数:
typedef struct
{
  uint8_t NVIC_IRQChannel;
  uint8_t NVIC_IRQChannelPreemptionPriority;
  uint8_t NVIC_IRQChannelSubPriority;
  FunctionalState NVIC_IRQChannelCmd;
}NVIC_InitTypeDef;

分别要设置中断通道的选择,在使stm32f10x.h中有对应的中断通道宏定义,然后设置抢占优先级子优先级,在后使能中断。
   4.中断处理函数
       按照库函数工程模板一般将,中断服务函数写在stm32f10x_it.c中,但是也可以也在对应外设的初始化中只要最终包含到main.c中就行了。在中断向量表中,库函数文件已经定义了各个外部中断对应的服务函数的名字,不管写在哪里应该保证名字一样,这样编译的时候才能通过,在启动文件startup_stm32f10x_hd.s中就有对应的中断向量表可以查看服务函数应该写的名称。
       在服务函数中,如果中段以后硬件不会自动清除标志位,就应该软件清除标志位。否则永远退不出中断。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值