[STM32] STM32 IO口外部中断程序问题

[复制链接]
1778|5
 楼主| MeterLeader 发表于 2021-5-25 14:08 | 显示全部楼层 |阅读模式

如上图,我在主函数中初始化了两个函数:Adc_Init() 和 EXTIX_Init(),当把 EXTIX_Init()放在Adc_Init() 前面先初始化时,EXTIX_Init()定义的IO口外部中断服务程序能正常进入;但是当把 EXTIX_Init()放在Adc_Init() 后面初始化时,IO口外部中断服务程序能进不去。通过逐步排除,表面现象是,Adc_Init() 函数中的ADC_Init()函数中定义的局部变量tmpreg1,把它屏蔽了后,哪怕把EXTIX_Init()放在Adc_Init() 后面初始化,IO外部中断服务程序也能正常进入了。注意:只要不屏蔽局部变量tmpreg1,那么就是把ADC_Init()函数中的程序体全部屏蔽也没用(如上图)。请教原因!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2021-5-25 15:56 | 显示全部楼层
这只是表现现象,
最大的可能是中断与ADC PIN有冲突了,谁后初始化谁最后有效
 楼主| MeterLeader 发表于 2021-5-25 16:05 | 显示全部楼层
ayb_ice 发表于 2021-5-25 15:56
这只是表现现象,
最大的可能是中断与ADC PIN有冲突了,谁后初始化谁最后有效 ...

外部中断用的是PB12~PB14,而ADC中断用的管脚是PC1。并且此处现象刚好是反的,外部中断初始化函数放在ADC初始化之前才是正常的,放到ADC后面反而进不了外部中断服务程序。
ayb_ice 发表于 2021-5-25 17:24 | 显示全部楼层
MeterLeader 发表于 2021-5-25 16:05
外部中断用的是PB12~PB14,而ADC中断用的管脚是PC1。并且此处现象刚好是反的,外部中断初始化函数放在ADC ...

调试下,看下相关寄存器的值是否是预期的值
 楼主| MeterLeader 发表于 2021-5-25 17:49 | 显示全部楼层
ayb_ice 发表于 2021-5-25 17:24
调试下,看下相关寄存器的值是否是预期的值

恩,测一下电平变化,标志寄存器的状态位变化等等,看到底是那个环节异常。
laocuo1142 发表于 2021-5-26 08:24 | 显示全部楼层
有可能还IO冲突了,初始化了ADC就不能用IO了,不管前还是后,只要没有重新初始化端口
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

94

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部