C Primer Plus (third)

STM32外部中断及串口

STM32中断

中断是CPU处理外部突发事件的一个重要技术。它能使CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行CPU原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。

外部中断:当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去。

特点:在实时控制中,现场的各种参数、信息均随时问和现场而变化。这些外界变量可根据要求随时向CPU发出中断申请。请求CPU及时处珲中断请求,如中断条件。

一、外部中断的类型

外部中断的功能可以配置六个寄存器
中断屏蔽寄存器(EXTI_IMR)
事件屏蔽寄存器(EXTI_EMR)
上升沿触发选择寄存器(EXTI_RTSR)
下降沿触发选择寄存器(EXTI_FTSR)
软件中断事件寄存器(EXTI_SWIER)
挂起寄存器(EXTI_PR)

EXTI支持配置20个中断和事件屏蔽位;
GPIO端口以下图的方式连接到16个外部中断/事件线上;EXTI_Line0 — EXTI_Line15;
EXTI_Line16 连接到PVD输出 ;
EXTI_Line17连接到RTC闹钟事件;
EXTI_Line18连接到USB唤醒事件;
EXTI_Line19连接到以太网唤醒事件(只适用于互联型产品);

了解优先级

STM32的中断源具有两种优先级:一种为抢占优先级;另一种为响应优先级(亚优先级),其属性编号越小,表明它的优先级别越高。抢占是指打断其他中断的属性,即低抢占优先级的中断A可以被高抢占优先级的中断B打断,执行完中断服务函数B后,再返回继续执行中断服务函数A,由此会出现中断嵌套。响应属性则应用在抢占属性相同的情况下,即当两个中断源的抢占优先级相同时,分以下几种情况处理:

(1)如果两个中断同时到达,则中断控制器会先处理响应优先级高的中断。
(2)当一个中断到来后,如果正在处理另一个中断,则这个后到的中断就要等到前一个中断处理完之后才能被处理(高响应优先级的中断不可以打断低响应优先级的中断)。
(3)如果它们的抢占式优先级和响应优先级都相等,则根据它们在中断表中的排位顺序决定先处理哪一个。

STM32的优先级
STM32使用了4个中断优先级的寄存器位,只可以配置16种优先级,即抢占优先级和响应优先级的数量由一个4位的数字来决定,把这个4位数字的位数分配成抢占优先级部分和响应优先级部分。有以下5种分配方式:
第0种:所有4位用于指定响应优先级,即NVIC配置的2的4次方共16种中断向量都是只有响应属性,没有抢占属性。
第1种:最高1位用来配置抢占优先级,低3位用来配置响应优先级,表示有2种级别的抢占优先级(0级,1级),有2的3次方共8种响应优先级,即在16种中断向量之中,有8种中断的抢占优先级都为0级,而它们的响应优先级分别为0~ 7,其余8种中断的抢占优先级则都为1级,响应优先级别分别为0~7。
第2种:2位用来配置抢占优先级,2位用来配置响应优先,即2的2次方共4种抢占优先级,2的2次方共4种响应优先级。
第3种:高3位用来配置抢占优先级,最低1位用来配置响应优先级,即有8种抢占优先级,2种响应优先级。
第4种:所有4位用来指定抢占优先级,即16种中断具有不相同的抢占优先级。

二、GPIO外部中断的配置

STM32中,每一个GPIO都可以作为外部中断触发的引脚,但是,GPIO的中断是以组为单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,

PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么其他的就不能够再使用了,在此情况下,我们只能使用类似于PA1,PB2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0 – EXTI4这5个外部中断有自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一个中断响应函数。

注意:要使用外部中断,所以还要打开GPIO复用的时钟,代码如下:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

步骤

1.设置中断:

首先定义嵌套向量中断控制器的初始化结构体NVIC_InitTypeDef,此结构体是在misc.h文件中声明的,其中有3个成员。uint8_t NVIC_IRQChannel代表要使用的中断通道,取值见stm32f10x.h文件中枚举typedef enum IRQn的定义,uint8_t NVIC_IRQChannelPreemptionPriority代表中断的抢占式优先级,取值共4位,也就是0~15,uint8_t NVIC_IRQChannelSubPriority代表中断的响应式优先级,取值同样是0~15,需要注意的是,这两个优先级的取值要根据之前描述的组(Group)的概念来定义FunctionalState NVIC_IRQChannelCmd代表是否使能中断,Enable打开使能,DISABLE关闭使能。

2.设置GPIO
3.把相应的IO口设置为中断线路

由于GPIO并不是专用的中断引脚,因此在用GPIO来触发外部中断的时候需要设置将GPIO相应的引脚和中断线连接起来。

三、串口的介绍

串口通信是一种通信协议,通信协议就是通信双方在数据传输过程中共同遵守的协定,数据的发送方按照某种协议把数据调制成可以被传输的信号,接收方就可以使用相同的协议,从信号中解析出数据。

STM32的串口通信接口
UART:通用异步收发器(universal asynchronous receiver and transmitter)
USART:通用同步异步收发器(universal synchronous asynchronous receiver and transmitter)

其中:
通用同步异步收发器(USART)
小容量产品:是指闪存存储器容量在16K至32K字节之间的STM32F101xx、 STM32F102xx和STM32F103xx微控制器。
中容量产品:是指闪存存储器容量在64K至128K字节之间的STM32F101xx、 STM32F102xx和STM32F103xx微控制器。
大容量产品:是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。
互联型产品:是指STM32F105xx和STM32F107xx微控制器。

四、串口的配置方法

步骤

1、先对端口进行复用或者重映射操作(该程序中是对端口进行复用操作)
2、串口复位,函数为USART_DeInit();
3、串口初始化
4、中断初始化
5、串口使能
6、开启中断
7、编写中断处理函数

五、总结

事情略多,暂时先写这么多,之后再扩充吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值