打印

关于外部中断中的AFIO时钟的开启

[复制链接]
1398|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
哆来咪| | 2015-11-21 14:04 | 只看该作者
楼主查到代码的时候可以用Ctrl+F全文查找关键字"AFIO",很容易定位到

使用特权

评论回复
板凳
Thefantasy| | 2015-11-21 15:39 | 只看该作者
给你一段代码看看
在中断分组设置里面就有开启AFIO时钟
//外部中断配置函数
//只针对GPIOA~G;不包括PVD,RTC和USB唤醒这三个
//参数:
//GPIOx:0~6,代表GPIOA~G
//BITx:需要使能的位;
//TRIM:触发模式,1,下升沿;2,上降沿;3,任意电平触发
//该函数一次只能配置1个IO口,多个IO口,需多次调用
//该函数会自动开启对应中断,以及屏蔽线      
void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)  
{
u8 EXTADDR;
u8 EXTOFFSET;
EXTADDR=BITx/4;//得到中断寄存器组的编号
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上事件上升降沿触发
}>

使用特权

评论回复
地板
旧影子| | 2015-11-21 16:53 | 只看该作者
在数据手册的引脚定义中(pin definitions),复用功能"Alternate functions"栏下分为两栏:默认"Default"和重映射"Remap"。其中,在默认栏中的功能只需要开启相应外设功能的时钟,无需开启AFIO时钟(注意:一个引脚在一个时间段内只能使用一个外设功能)。而在重映射栏中的功能,则需要开启相应外设功能的时钟,并且开启AFIO时钟。

使用特权

评论回复
5
大叔乔东| | 2015-11-21 17:20 | 只看该作者
其实库函数操作也很快的,又方便,足以满足所有的需求了。

使用特权

评论回复
6
麦可可| | 2015-11-21 17:24 | 只看该作者
楼主可以试试下载野火或者原子的例程,有对应的操作寄存器的例程

使用特权

评论回复
7
blong75| | 2015-11-23 21:41 | 只看该作者
Thefantasy 发表于 2015-11-21 15:39
给你一段代码看看
在中断分组设置里面就有开启AFIO时钟
//外部中断配置函数

谢谢了!我试试这个代码怎么样!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

29

帖子

0

粉丝