哦~~~
原来如此,估计是定时器中断啊之类的其他的了,我猜学到后面会弄明白,另外求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上的中断标志位
}
哦~~~
原来如此,估计是定时器中断啊之类的其他的了,我猜学到后面会弄明白,另外求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上的中断标志位
}
举报