Zephyr程序初探(4):中断程序

5 篇文章 0 订阅

之前分别尝试了LED、SENSOR、BLE程序,今天来试了下GPIO中断程序,也就是按键程序。

源码位置:samples\basic\button,查看Makefile文件,默认开发板是nucleo_f103rb,执行make编译程序。

因为我的是一个精简的STM32F103开发板,除了电源、时钟、LED、USB外无任何其它外设,只是把所有能够使用的GPIO全部通过排针的形式引出来了,所以要看要下源码找出使用的是哪个GPIO引脚作为按键,main.c中定义如下:

在boards\arm\nucleo_f103rb\board.h中定义如下:

从以上代码可以看出按键是GPIOC13,下降沿触发,将我的开发板接一个外部按键到GPIOC13和GND,烧录zephyr.bin,复位运行后出现了奇怪的现象,中断信息“Button pressed at….”并不是在我每次按下按键的时候输出的,而是当我手每次触碰相关引脚后就重复输出,而我按下按键后会停止输出。

这个现象很明显是PIN脚电平波动引起的,而程序未设置上拉导致即使没有将GPIOC13与地短路也会有中断产生,再次查看main.c

而在gpio.h中,上拉是如下定义的

可以看到代码中未并设置内部上拉,而我的开发板上也没有外部上拉电阻,修改定义

重新编译、烧录后验证功能正常。

分析代码之所以PULL_UP为0估计是nucleo_f103rb开发板的相应引脚有外部上拉电阻,到ST官网下载原理图后果然验证了我的猜测,如图:

然后又修改代码测试了上升沿和下降沿都触发中断,且在callback函数中读取PIN脚状态是按下还是释放。

至此按键程序测试完成,虽然目前只测试了几个小程序,但是已经能够感受到Zephyr的易用性,后续会针对目前所做的程序验证做一个简单的总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值