//打开PA0的中断线
AFIO->EXTICR0 &= 0xFFFFFFF0;
AFIO->EXTICR0 |= 0xFFFFFFF0;<===这是脱裤子放屁,只是大家看明白一点而已.0代表A口,1代表B口,以此类推,6代表G口.参考手册第126--128页
//打开PA13的中断线
AFIO->EXTICR4 &= 0xFFFFFF0F;
AFIO->EXTICR4 |= 0xFFFFFF0F;<===这是脱裤子放屁,只是大家看明白一点而已.
//打开PA15的中断线
AFIO->EXTICR4 &= 0xFFFF0FFF;
AFIO->EXTICR4 |= 0xFFFF0FFF;<===这是脱裤子放屁,只是大家看明白一点而已.
大家看到没有,因为UV3定义是的是数组,所以AFIO->EXTICR0要写成AFIO->EXTICR[0].
定义成数组之后就没有4了,4是3了.我搞错了.原来AFIO_EXTICR 寄存器有4个,从AFIO_EXTICR1到AFIO_EXTICR4,但在UV3定义成数组AFIO_EXTICR[4],
分别是AFIO_EXTICR[0], AFIO_EXTICR[1], AFIO_EXTICR[2], AFIO_EXTICR[3].
以上的改成:
AFIO->EXTICR[0] &= 0xFFFFFFF0;
AFIO->EXTICR[0] |= 0xFFFFFFF0; //<===这是脱裤子放屁,只是大家看明白一点而已.0代表A口,1代表B口,以此类推,6代表G口.参考手册第126--128页
//打开PA13的中断线
AFIO->EXTICR[3] &= 0xFFFFFF0F;
AFIO->EXTICR[3] |= 0xFFFFFF0F; //<===这是脱裤子放屁,只是大家看明白一点而已.
//打开PA15的中断线
AFIO->EXTICR[3] &= 0xFFFF0FFF;
AFIO->EXTICR[3] |= 0xFFFF0FFF; //<===这是脱裤子放屁,只是大家看明白一点而已.
好了这次 显示 "TEXT.axf" - 0 Error(s), 0 Warning(s).
好我们小试一下中断PA0 .我写的中断服务程式如下:
void EXTI0_IRQHandler(void)
{
u8 i=0;
for (i=0;i<10;i++)
{
PAout(8)=!PAout(8);
PDout(2)=!PDout(2);
delay_ms(100);
PAout(8)=!PAout(8);
PDout(2)=!PDout(2);
delay_ms(100);
}
EXTI->

R=1<<0;
}
大家注意了,中断入口函数的开头写法是固定的,不能搞自由化,党中央的规定.
0口的中断函数是:
EXTI0_IRQHandler(void)
1口的是:
EXTI1_IRQHandler(void)
2口的是:
EXTI2_IRQHandler(void)
3口的是:
EXTI3_IRQHandler(void)
4口的是:
EXTI4_IRQHandler(void)
3到9口的是:
EXTI9_5_IRQHandler(void)
10到15口的是:
EXTI15_10_IRQHandler(void)
好了,main()写简单点,我写成这样:
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
IO_Init();
Int_init();
while(1)
{
 

Aout(8)=1;
 

Dout(2)=1;
}
}
上机一跑... .... ... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... .... 哈哈,成了.
一按WP_UP键 两个灯那个闪呀闪. ^-^
灯在闪的时候再按几次,灯闪完就不闪了,说明中断不能自己打断自己, 如已响应了一个高电平,在执行中断函数的时候,再出现一个高电平,或多个电平,
系统都不再鸟它了.
那其它的中断函数呢,好!! 我们再来写一个PA13脚和PA14脚的中断函数试一下.
void EXTI15_10_IRQHandler(void)
{
u8 i=0;
for (i=0;i<10;i++)
{
PAout(8)=!PAout(8);
delay_ms(100);
PAout(8)=!PAout(8);
delay_ms(100);
}
EXTI->

R=1<<13;
EXTI->

R=1<<15;
}
丢进ARM,运行~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
哈哈,按KEY1 红灯在闪呀那个闪!!!!!!!!!!!!!!!!!!!!!!! 然后立马按WP_UP键 , WP_UP键 立马打断KEY1的中断,执行两个灯在闪的动作!!!!!!
两个灯闪完后,回到KEY执行执行完的中断程式,就一个红灯在闪!!!!!!!!!优先中断代码运行正常!!!!!!!!!!!噢哇!!!!!!鸡动ING..............
闪完后,然后按一下KEY0键,满怀信心去看灯亮.....................?????? 没亮!! 灯坏了??? 没理由呀,丢进上几季试输入的程式,一试.......KEY0没事呀.
那里出错了!!!
我找呀找,找呀找.........找到了!!
还是:
//打开PA13的中断线
AFIO->EXTICR[3] &= 0xFFFFFF0F;
AFIO->EXTICR[3] |= 0xFFFFFF0F; //<===这是脱裤子放屁,只是大家看明白一点而已.
//打开PA15的中断线
AFIO->EXTICR[3] &= 0xFFFF0FFF;
AFIO->EXTICR[3] |= 0xFFFF0FFF; //<===这是脱裤子放屁,只是大家看明白一点而已.
后两句将 前两句的位抹掉了..........我容易吗我,我只想大家好看点而已......T.T
好更改一下,将4行代码直接改成:
//打开PA13的中断线 和 打开PA15的中断线
AFIO->EXTICR[3] &= 0xFFFF0F0F;
AFIO->EXTICR[3] |= 0xFFFF0F0F; //<===这是脱裤子放屁,只是大家看明白一点而已.
好,丢进ARM,再运行~~~~~~~~~~~~~~~~~~通了!!!!!!!!!!!!!!!!!!!!!!!!
无论按KEY0还是KEY1都进入中断,就是红灯闪呀闪~~~~~~~~~~~~~~
哈哈,玩一下,在KEY0和KEY1中断执行的时候,我连按几次WP_UP,几次打断EY0和KEY1的中断.哈哈.
好了,IO中断这学问偶毕业了,明天我们继续学习下边的.好好学习,天天向上.