OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4082|回复: 3

问一个低级问题, 关于RCC_APB2Periph_AFIO

[复制链接]

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4519
金钱
4519
注册时间
2018-5-11
在线时间
946 小时
发表于 2018-5-30 22:16:10 | 显示全部楼层 |阅读模式
1金钱
问一个低级问题, 关于RCC_APB2Periph_AFIO
是不是只要用到外部中断, 就必须使能RCC_APB2Periph_AFIO时钟.
这个RCC_APB2Periph_AFIO是不是只要在某一个地方ENABLE一次,
就不管PA/PB/PC/......PGx都可以使用外部中断功能了?

我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-5-30 22:16:11 | 显示全部楼层
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4519
金钱
4519
注册时间
2018-5-11
在线时间
946 小时
 楼主| 发表于 2018-5-31 12:56:31 | 显示全部楼层

谢谢原子哥亲自回复,我看了一下AFIO有关寄存器,要用外部中断必须先打开时钟来配置这些寄存器,但其中的每一个外部中端号有4比特用于指定引脚组,那么有另一个问题,假如我想同时利用PA1和PB1作为外部中断源,能够做到吗?
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
发表于 2020-8-29 20:03:34 | 显示全部楼层
warship 发表于 2018-5-31 12:56
谢谢原子哥亲自回复,我看了一下AFIO有关寄存器,要用外部中断必须先打开时钟来配置这些寄存器,但其中的 ...

楼主我也有这一个问题,当时我们需要用PA8,PA9做电机输入捕获(板子条件不允许用编码器),效果不理想。尝试用外部中断。但9-5是用同一个中断函数的,当时也就没有成功,后面查了一下寄存器版本的代码
  1. //外部中断配置函数
  2. //只针对GPIOA~G;不包括PVD,RTC和USB唤醒这三个
  3. //参数:
  4. //GPIOx:0~6,代表GPIOA~G
  5. //BITx:需要使能的位;
  6. //TRIM:触发模式,1,下升沿;2,上降沿;3,任意电平触发
  7. //该函数一次只能配置1个IO口,多个IO口,需多次调用
  8. //该函数会自动开启对应中断,以及屏蔽线               
  9. void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
  10. {
  11.         u8 EXTADDR;
  12.         u8 EXTOFFSET;
  13.         EXTADDR=BITx/4;//得到中断寄存器组的编号
  14.         EXTOFFSET=(BITx%4)*4;
  15.         RCC->APB2ENR|=0x01;//使能io复用时钟                         
  16.         AFIO->EXTICR[EXTADDR]&=~(0x000F<<EXTOFFSET);//清除原来设置!!!
  17.         AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTI.BITx映射到GPIOx.BITx
  18.         //自动设置
  19.         EXTI->IMR|=1<<BITx;//  开启line BITx上的中断
  20.         //EXTI->EMR|=1<<BITx;//不屏蔽line BITx上的事件 (如果不屏蔽这句,在硬件上是可以的,但是在软件仿真的时候无法进入中断!)
  21.         if(TRIM&0x01)EXTI->FTSR|=1<<BITx;//line BITx上事件下降沿触发
  22.         if(TRIM&0x02)EXTI->RTSR|=1<<BITx;//line BITx上事件上升降沿触发
  23. }
复制代码
它有一段清除原来的设置是不是会把上一个IO口的中断配置给覆盖掉,当时也搞不明白
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 23:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表