K210学习笔记(二)按键与外部中断
这里将按键与外部中断联合在一起学习,因为都需要用到按键来进行实验,先说实验现象。通过板载按键(这里使用的是CanMv版本的K210),实现对板载LED的控制。按键按下,led灯反转亮灭。
点灯需要将gpio配置成输出模式,按键则需要使用gpio对应的输入模式。通过扫描gpio的value值,判断是否有按键按下。通过板子电路图我们可以知道,当按键按下时,IO16被拉低,所以当io16为低电平时,我们可知按键按下。
同时,我们可将该io映射到K210的任意内部IO上,因为要做外部中断,我们选择高速GPIO0(GPIOHS0),中断函数如下(K210只有高速GPIO有外部中断)
这里中断还是用中断回调的方式去执行,但是跟stm32还是有很多不同的地方(后面有机会总结一下)
同时还有一个中断关闭的函数
下面就是主要程序的编写啦
from maix import GPIO
from fpioa_manager import fm
import utime
#注册对应IO口
LEDB=fm.register(35,fm.fpioa.GPIO0)
Interrupt1=fm.register(16,fm.fpioa.GPIOHS0)
#配置对应GPIO口(led和外部中断按键)
LEDB=GPIO(GPIO.GPIO0,GPIO.OUT,value=1)
Interrupt1=GPIO(GPIO.GPIOHS0,GPIO.IN,GPIO.PULL_UP)
#led状态显示
state=1
#中断回调函数
def Interrupt(Interrupt1):
global state
utime.sleep_ms(10)#消除抖动
if Interrupt1.value()==0:
state=not state
LEDB.value(state)
Interrupt1.irq(Interrupt,GPIO.IRQ_FALLING)
while True:
pass
要注意就是消抖部分,这部分几乎是不可或缺的,按键在按下的过程中并不是完美的一个方波曲线,相反会有一部分抖动,如果不用消抖的话可能会影响整个程序的正常运行(比如莫名其妙的进中断)
这是理想情况下的,可以选择下降沿捕获进中断也可以选择上升沿捕获进中断,也可以采用双边沿触发
这是实际按键按下的情况,因为存在抖动所以最好加一个消抖让按键更稳定(也不会因为误触导致进入中断)
cointreau97: 如果跟我这套源码差不多的话应该不会出现啊,我做了完整的编码的呀
2301_81365140: 你好 我收到的数据都是单独一位一位的怎么办 比如我发的是 100 而收到的则是 1 0 0
cointreau97: 直接百度查一下吧,那个嘉楠的官网
weixin_47365232: KPU相关函数的链接还有吗,之前分享的已经失效了
cointreau97: 找到了hhhhhh