stm32f407之EXTI(操作寄存器)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

stm32f407之EXTI(操作寄存器)
六、EXTI
外部中断/事件控制器包括用于生成高达23个事件/中断的请求。

每条中断线可独立配置选择类型(响应或挂起)和相应的触发事件(上升或下降或两者)。

每一中断线可以独立屏蔽。

有一个挂起寄存器维持中断线的状态请求。

EXTI线0~15连接到PX0~15(可编程配置)
EXTI线16连接到PVD的输出事件
EXTI线17连接到RTC报警事件
EXTI线18连接的USB OTG FS唤醒事件
EXTI线19连接到以太网唤醒事件
EXTI线20连接的USB OTG HS(在FS配置)唤醒事件
EXTI线21连接到RTC的篡改和TimeStamp事件
EXTI线22连接到RTC唤醒事件
设置步骤:
1. 使能相关时钟
2. 设置中断优先级分组(如果之前没有设置),这个最好一个程序里只在开头设置一次。

3. 设置中断线所要连接到的IO的输入模式
4. 设置屏蔽寄存器,不能把中断屏蔽掉
5. 设置中断方式
6. 把中断线连接到IO口
7. 设置中断优先级
8. 使能中断线
9. 编写中断服务函数(函数名是固定的)
10. 中断服务函数里检查是哪个中断挂起
11. 编写相应的程序
12. 清除中断挂起
程序:
[plain]view plaincopy
1./************************************
2.标题:操作EXTI的练习
3.软件平台:IAR for ARM6.21
4.硬件平台:stm32f4-discovery
5.主频:168M
6.
7.author:小船
8.data:2012-01-17
9.*************************************/
10.
11.#include <stm32f4xx.h>
12.
13.void Led_Init (void);
14.
15.void main ()
16.{
17.
18.RCC->AHB1ENR |= 0x00000009; //使能GPIOD和GPIOA时钟
19.RCC->APB2ENR |= (1<<14); //使能syscfg时钟
20.
21.SCB->AIRCR = 0x05FA0000 | 0x400; //中断优先级分组抢占:响应=3:1
22.
23.Led_Init();
24.
25.GPIOA->MODER &= 0xFFFFFFFC; //浮空输入模式
26.GPIOA->PUPDR &= 0xFFFFFFFC;
27.
28.EXTI->IMR |= ( 1 << 0 ); //不屏蔽外中断线0
29.
30.EXTI->FTSR |= ( 1 << 0 ); //下降沿触发
31.
32.SYSCFG->EXTICR[0] &= 0xFFFFFF00; //配置外中断线0到PA口
33.
34.NVIC->IP[6] = 0xe0; //最低抢占优先级,最高响应优先级1110
35.
36.NVIC->ISER[0] |= (1<<6); //使能中断线6,也就是外中断0
37.
38.
39.while(1)
40.{
41.};
42.}
43.
44.
45.void Led_Init()
46.{
47.GPIOD->MODER &= 0x00FFFFFF; //设置PD12,13,14,15输出
48.GPIOD->MODER |= 0x55000000;
49.
50.GPIOD->OTYPER &= 0xFFFF0FFF; //设置PD12,13,14,15推挽输出
51.
52.GPIOD->OSPEEDR &= 0x00FFFFFF; //PD12,13,14,15 速度100m
53.GPIOD->OSPEEDR |= 0xff000000;
54.
55.GPIOD->PUPDR &= 0x00FFFFFF; //PD12,13,14,15 无上拉无下拉
56.
57.GPIOD->BSRRH = 0xf000; //reset register GPIOx_BSR RH, write only
58.//set register GPIOx_BSRRL, write only
59.SYSCFG->CMPCR = 0x00000001; //使用IO补偿单元
60.}
61.
62.void EXTI0_IRQHandler(void)
63.{
64.uint32_t tmp;
65.if(EXTI->PR & 0x00000001 != 0) //检查是不是外中断0挂起
66.{
67.tmp = (~GPIOD->ODR) & 0x0000f000; //PD15 14 13 12翻转,板子上四个LED的亮灭
68.GPIOD->ODR &= 0xffff0fff;
69.GPIOD->ODR |= tmp;
70.
71.EXTI->PR = (1<<0); //外中断0解除挂起
72.}
73.}
更多0
上一篇:stm32f407之NVIC
下一篇:stm32f407之USART(操作寄存器)。

相关文档
最新文档