|
选择中断源(EXTI0~EXTI22选择其一)
PA0产生上升沿:EXTI0
PE2~4产生下降沿:EXTI2~4
初始化:
1.初始化IO口:之前的按键初始化即可
2.模块时钟使能RCC->APB2ENR
IO口映射到相应的外部中断配置器
SYSCFG external interrupt configuration register 1
GPIO口中断映射到芯片内部的IO口配置寄存器->SYSCFG寄存器
例如:配置PE2
RCC->APB2ENR |=0x01<<14;
//选择中断源(EXTI2映射到PE)
SYSCFG->EXTICR[0] &=~(0x0f<<8); //EXTICR[0]~EXTICR[3]分别对应寄存器EXTICR1~4
SYSCFG->EXTICR[0] |=(0x04<<8);
映射概念:首先外部中断的io口都有对应的外部中断寄存器,以IO口数字序列编号
PA0在EXTI0 PB0在EXTI0
其次每个EXTI都对应一个四位的外部中断寄存器。配置见标号8.2.4 EXTI0在EXTICR1的第0~3位
EXTI3在EXTICR1的12~16位、、EXTI4在EXTICR1的0~3位 [中文参考手册8.2.1]
(小结:先找引脚再找组)
映射PE2
EXTI2->EXTICR1的8~11位。
SYSCFG->EXTICR[0] |=(0x04<<8);
//注意!!EXTICR[0]~EXTICR[3]对应EXTICR1~4,寄存器的写法跟寄存器编号不一致
3.选择边沿检测方式(上升沿检测,下降沿检测,双边沿检测)
EXTI->FTSR |=0x01<<2;//下降沿检测
FTSR:Falling trigger selection register
EXTI->RTSR &=~(0x01<<2); //上升沿检测关闭
RTSR:Rising trigger selection register
4.屏蔽软中断
EXTI->SWIER =0;
Software interrupt event register
5.屏蔽事件
Event mask register
EXTI->EMR =0;
6.模块级中断使能(设置中断屏蔽寄存器)
Interrupt mask register
0:屏蔽来自 x 线的中断请求
1:开放来自 x 线的中断请求
EXTI->IMR |=0x01<<2;
7.系统级中断使能(设置NVIC)
NVIC_SetPriority(EXTI2_IRQn,NVIC_EncodePriority (7-2, 2,2));
8.编写中断服务函数(清标志:挂起请求寄存器)
EXTI->PR |=0x01<<2;//清标志
通过对中断状态寄存器写1可以清楚标志
STM32F407系列学习心得
STM32F407初学之串口:中断收发字符串教程与源码
http://www.51hei.com/bbs/dpj-135708-1.html
(出处: 单片机论坛)
|
评分
-
查看全部评分
|