野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26287|回复: 6

EXTI外部中断中不开启gpio时钟,不初始化也可以实现中断

[复制链接]
发表于 2020-7-9 23:16:20 | 显示全部楼层 |阅读模式
今天,学习stm32f103时翻看霸道的EXTI例程代码发现在KEY2中断时没有添加gpioc的时钟使能

2020-07-09 (1).png

但是把这个程序烧到开发板还是可以实现中断功能,然后我又试着把gpio_init()给删掉,发现也没影响,就是说gpio这个外设开不开启对EXTI中断没有影响,但是EXTI的输入线不就是从GPIO来的吗,那又为什么会没有影响?求大神给我一些指导,翻了半天手册也没发现哪里有问题。







2020-07-09 (1).png
回复

使用道具 举报

发表于 2020-7-12 13:42:17 | 显示全部楼层
我是个小白,但希望我的回答能帮到你。
这里删去GPIO的初始化仍然可以实现中断。具体原因是,输入源的信号是直接通过EXTI内部电路从而发生中断的,和GPIO的配置无关。
可以理解为EXTI的内部电路和GPIO的内部电路是并联的关系。从PA0输入的信号会直接通过EXTI0内部电路从而发生中断。
在这个例子中,GPIO的配置可以删去。

但火哥视频的最后也提到了一个问题,就是如果EXTI0连接了多个输入源如:PA0,PB0,PC0....如何判断是哪一个输入源引发的中断。
给出的解决办法是读取IDR寄存器,判断电平的变化。这时,初始化GPIO就有必要了,因为如果不初始化,IDR寄存器不会记录外部电平的变化。
回复 支持 3 反对 0

使用道具 举报

 楼主| 发表于 2020-7-12 15:26:37 | 显示全部楼层
1111111.png
其实我也是小白,感谢你的回答,哈哈哈,刚看了你的回答又翻了一会手册,找到一个和你差不多的想法
但是其实EXTI没有单独的输入线它还是从GPIO的输入线进来的
没有使能GPIO应该是不能使用GPIO的寄存器吧(数电学的一般我是这样理解的哈哈哈)
但是还是可以使用它的线路,而GPIO的复位就浮空输入模式所以那个触发器开关复位时就是开的
所以就算不使能,不初始化,还是可以使用EXTI,只是不能使用GPIO的读取功能
回复 支持 2 反对 0

使用道具 举报

发表于 2020-7-13 17:19:14 | 显示全部楼层
哈哈哈,你看的好细好认真!强强强!是我讲错了。输入信号是要经过GPIO框图内的电路,通过复用功能AFIO,作为输入源,所以只要开启AFIO的时钟就可以了。
我看到手册里也提到使用EXTI必须把端口配置为输入模式。
虽然复位状态下是浮空输入,但GPIO时钟并未开启,所以实际上IDR寄存器应该是不工作的。我想为了解决多个输入源对应一个中断线的问题,端口配置是必须的,其中开启GPIO的时钟是最重要的。
野火论坛202007131706416914..png
野火论坛202007131714236629..png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 16:05:18 | 显示全部楼层
IN_X 发表于 2020-7-13 17:19
哈哈哈,你看的好细好认真!强强强!是我讲错了。输入信号是要经过GPIO框图内的电路,通过复用功能AFIO,作 ...

嗯嗯,感谢感谢,终于弄懂了,也不要每天惦记了
回复 支持 反对

使用道具 举报

发表于 2020-7-17 15:12:11 | 显示全部楼层
赞一个!
回复

使用道具 举报

发表于 2021-3-19 16:45:27 | 显示全部楼层
为啥我GPIOA,GPIOC,AFIO三个的时钟都关了还能按键翻转电平呢。。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 21:34 , Processed in 0.033863 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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