void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
{
u8 EXTADDR;
u8 EXTOFFSET;
EXTADDR=BITx/4;//得到中断寄存器组的编号 疑问1,如果bitx是0的时候 EXTADDR的值也是0
EXTOFFSET=(BITx%4)*4;
RCC->APB2ENR|=0x01;//使能io复用时钟
AFIO->EXTICR[EXTADDR]&=~(0x000F<<EXTOFFSET);//清除原来设置!!!
AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTI.BITx映射到GPIOx.BITx
//自动设置
EXTI->IMR|=1<<BITx;// 开启line BITx上的中断
//EXTI->EMR|=1<<BITx;//不屏蔽line BITx上的事件 (如果不屏蔽这句,在硬件上是可以的,但是在软件仿真的时候无法进入中断!)
if(TRIM&0x01)EXTI->FTSR|=1<<BITx;//line BITx上事件下降沿触发
if(TRIM&0x02)EXTI->RTSR|=1<<BITx;//line BITx上事件上升降沿触发
}
这是原子的源代码
注意看红 {MOD}代码的第一条,得到 EXTADDR=0
红 {MOD}代码的第三条 AFIO->EXTICR[EXTADDR]也就是 AFIO->EXTICR0
问题就出现在这里 我在STM32中文参考手册上看到 AFIO->EXTICR最小值是 AFIO->EXTICR1
如下:
AFIO->EXTICR1
AFIO->EXTICR2
AFIO->EXTICR3
AFIO->EXTICR4
四个寄存器 并没有 看到 AFIO->EXTICR0 这个寄存器 既然程序没有问题 那么就是参考手册的问题,或者是我的理解的问题?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
AFIO->EXTICR1
AFIO->EXTICR2
AFIO->EXTICR3
AFIO->EXTICR4
这四个寄存器 是用来设置外部中断具体在那个位的
AFIO->EXTIC2对应AFIO->EXTIC1
AFIO->EXTIC3对应AFIO->EXTIC2
AFIO->EXTIC4对应AFIO->EXTIC3
不好意思,看错了
一周热门 更多>