NRF52832 外部中断设置 和按键设置的冲突

文章讲述了在升级设备后,使用加速计的外部中断唤醒功能导致原有按键中断不稳定的问题。问题在于GPIOTE_CONFIG_IN_SENSE_HITOLO模式遮蔽了NRF_GPIOTE_POLARITY_TOGGLE的中断响应,解决办法是将外部中断设置为NRF_GPIOTE_POLARITY_TOGGLE模式并利用NRFxGPIOTE_driver处理中断响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在之前的设备中, 有俩个按键, 使用gpiote 中断来对按键动作进行响应, 工作正常。 后来, 设备升级, 增加3轴加速计来检测设备是否有移动来唤醒设备。 也就是使用外部中断来唤醒设备, 原理上来说,很简单。 可实际应用时, 发现一旦使能了这个加速计的外部中断, 设备就出现很多的异常, 尤其明显的是, 设备的按键功能时好,时坏。 

         分析应该是中断之间有冲突。 反复检查, 发现 按键的中断 类型设置都是 NRF_GPIOTE_POLARITY_TOGGLE。 而, 加速计的外部中断设置是, GPIOTE_CONFIG_IN_SENSE_HITOLO。 进一步研究发现, 原因就出在这里。 GPIOTE_CONFIG_IN_SENSE_HITOLO 中断模式 会遮蔽掉 NRF_GPIOTE_POLARITY_TOGGLE 的部分中断响应。 安全的方式就是把外部中断页设置成 NRF_GPIOTE_POLARITY_TOGGLE 模式, 由nrfx gpiote driver来处理如何响应上升沿还是下降沿。 

我有一份完全可以实现循迹功能无线遥控功能的代码。具体功能为当系统上电时初始状态为循迹模式,按下按键KEY2会切换到遥控模式(此时就算检测到黑线也不会自动循迹),当重新按下按键KEY1时则会重新返回到循迹模式。并且只有在检测到无线模块存在的时候功能才会正常,否则Led3则会一直闪烁。但是自从我添加了一个OLED 屏幕用来实时显示循迹或遥控模式下的状态时,循迹遥控功能均已失效,按下按键KEY2也不会正确的切换到遥控模式了。难道是新添加的OLED 通信与原有的代码“打架”(冲突)了?定时器?中断?初始化顺序?请仔细做出一些分析,并给出我合理的答案!!!必要的话我可以提供给你在没加入OLED 屏幕显示下的好用代码逻辑,并于现在我加入OLED 屏幕显示的代码逻辑做出一个合理的比较!!注意尽量不要怀疑我之前的可用代码,它是切实好用的!!就算要新加或者修改逻辑,也尽量不要动我原有的代码!!注意不要随意修改我原来好用代码中的任何东西!!尤其是延时函数,定时器,中断等。若OLED中需要用到延时函数,定时器,中断等如果我循迹的相关代码有直接调用即可,若没有则单独写一个新的只服务于OLED的相关函数代码等。仔细思考,并生成修改后的全部代码!!!不要怕麻烦!!也要有必要的注释易于理解!注:无线模块使用的通信方式为SPI,OLED 屏幕使用的通信方式为I2C,使用的单片机型号为STC89C52RC。第一个main.c文件为我一开始好用的初始化顺序逻辑等,第二个mian.c文件为我添加完OLED 显示后的逻辑。现在我会将我没添加OLED 显示之前添加之后的代码全部给你,请仔细比较并判断出问题到底出现在了哪里!!!前13个代码文件为没添加OLED 显示之前(功能正常)的代码,后面的其余代码文件为添加之后(功能异常)的代码。
最新发布
07-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值