OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11186|回复: 3

关于外部中断的实验无法理解的地方

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2012-3-27
在线时间
0 小时
发表于 2012-3-29 20:03:52 | 显示全部楼层 |阅读模式
在外部中断实验中,exti.c的函数内容是这个样子的。

#include "exti.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//外部中断 驱动代码   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/12/01  
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved  
//////////////////////////////////////////////////////////////////////////////////  
 

//外部中断0服务程序
void EXTI0_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY2==1) //按键2
{
LED0=!LED0;
LED1=!LED1;
}  
EXTI->R=1<<0;  //清除LINE0上的中断标志位  
}

//外部中断15~10服务程序
void EXTI15_10_IRQHandler(void)
{
delay_ms(10);    //消抖  
if(KEY0==0)      //按键0
{
LED0=!LED0;
}else if(KEY1==0)//按键1
{
LED1=!LED1;
}
EXTI->R=1<<13;     //清除LINE13上的中断标志位  
EXTI->R=1<<15;     //清除LINE15上的中断标志位  
}
//外部中断初始化程序
//初始化PA0,PA13,PA15为中断输入.
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2;     //使能PORTA时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD   

GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
GPIOA->CRL|=0X00000008;   
GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入  
GPIOA->CRH|=0X80800000;   
GPIOA->ODR|=1<<13;   //PA13上拉,PA0默认下拉
GPIOA->ODR|=1<<15;   //PA15上拉

Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发

MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);    //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2   
}


里面有两个终端函数,分别是: void EXTI0_IRQHandler(void) {……}和 void EXTIX_Init(void) {……};
我所不明白的就是为什么当中断发生的时候,系统知道自动调用这个函数,而且在这个程序里面,这两个函数在exti.h文件里面并没有事先声明,但是 void EXTIX_Init(void) {……}这个函数声明了,是不是在中断操作中,中断函数的名称都是固定的,比如这个例子,如果GPIO_A对应的按键被按下,系统就知道自动调用对应的 void EXTI0_IRQHandler(void) {…… }函数,如果不是这个样子的话,那么中断和终端响应函数之间必须有连接,不然怎么知道启动哪个函数呢?    如果按照我说的这样这些函数名字是固定的,我在MDK中在这两个函数上右击——选择GO TO DEFINITION OF '函数名’就应该看到对应的定义,可是没有。


麻烦有知道的人为我解释,我已经把《例说stm32》有关这部分的内容看了好几遍了,包括system文件夹的内容。还是理解不了。







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-29 20:47:41 | 显示全部楼层
"我所不明白的就是为什么当中断发生的时候,系统知道自动调用这个函数"
看MDK给的STM32启动代码,里面有这两个函数的名字。
https://github.com/roxma
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2012-3-27
在线时间
0 小时
 楼主| 发表于 2012-3-29 20:51:45 | 显示全部楼层
回复【2楼】Pony279:
---------------------------------
在启动代码里面找到了,谢谢了啊
回复 支持 反对

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
发表于 2012-4-2 21:47:37 | 显示全部楼层
LZ应该学习怎么才能更好使用编译软件的快捷功能,其实一点就可以点到声明或者定义那里了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 10:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表