初级会员

- 积分
- 151
- 金钱
- 151
- 注册时间
- 2018-1-31
- 在线时间
- 49 小时
|
1金钱
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上事件上升降沿触发
}
这是原子的源代码
注意看红色代码的第一条,得到 EXTADDR=0
红色代码的第三条 AFIO->EXTICR[EXTADDR]也就是 AFIO->EXTICR0
问题就出现在这里 我在STM32中文参考手册上看到 AFIO->EXTICR最小值是 AFIO->EXTICR1
如下:
AFIO->EXTICR1
AFIO->EXTICR2
AFIO->EXTICR3
AFIO->EXTICR4
四个寄存器 并没有 看到 AFIO->EXTICR0 这个寄存器 既然程序没有问题 那么就是参考手册的问题,或者是我的理解的问题?
|
最佳答案
查看完整内容[请看2#楼]
简单的说 就是手册上没有AFIO->EXTICR0 这个寄存器 只有
AFIO->EXTICR1
AFIO->EXTICR2
AFIO->EXTICR3
AFIO->EXTICR4
这四个寄存器 是用来设置外部中断具体在那个位的
|