STM32
直播中

晁莹

7年用户 212经验值
私信 关注
[问答]

EXTI可设置中断线有19条吗


同样EXti的问题,如图,这是参考手册上截图出来的,根据图中,可设置中断线有19条,不知道我这么理解正确不,上面的线的标号对应IO口的标号,例如,上面MR0对应GPIOA/GPIOB/GPIOC的PORTA/PORTB/PORTC的第0个IO口,假如设置了对应映射的话,例如,我想设置PA11作为外部中断,已经设置了相应映射,根据道理来说,EXTI->IMR|=1<<11;指令即可开启PA11的外部中断,这里就想不明白了,每个IO是16位的,可这里开房线上请求的线多达20根,是不是16位IO的器件,这里的MR16,MR17,MR18,MR19没用,可以直接无视了?

回帖(8)

李雯婷

2019-5-28 06:44:43
线16~19就不是给IO口用的了。
举报

王梅

2019-5-28 06:50:49
哦~~~
原来如此,估计是定时器中断啊之类的其他的了,我猜学到后面会弄明白,另外求NVIC结构体里面相应寄存器的详细讲解,STM32中文参考手册没说,权威指南说得很模糊,相当晕乎,貌相不配置NVIC里的中断优先级,中断服务程序得不到正确运行。
问题2:中断服务程序的名称貌相每个后面都带有这个IRQHandler,是不是可以随意根据情况定义中断服务程序?实际上是对下面这段程序不解:
//外部中断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上的中断标志位  
}
为什么是15——10,而不写EXTI15_IRQHandler和EXTI13_IRQHandler?(我知道这是一个函数名,所以删掉名称中的任何一个字符编译都能通过,但得不到正确执行结果(中断是跳到相应服务程序运行,应该有一个给编译器识别的标志的,例如51的void abc() interrupt 1,interrupt 1为识别,AVR的SIGNAL (SIG_OVERFLOW1),SIGNAL为识别)
而不是像下面这段程序那样写的是EXTI0_IRQHandler,和串口中断程序那样写USART1_IRQHandler?
void EXTI0_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY2==1) //按键2
{
LED0=!LED0;
LED1=!LED1;

EXTI->R=1<<0;  //清除LINE0上的中断标志位  
}
举报

刘静焱

2019-5-28 06:59:22
2,偷工减料
举报

韩宁

2019-5-28 07:14:47
哦~原来如此,为啥不把EXIT0也写在一个中断里?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分