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

来源:互联网 发布:什么叫网络销售 编辑:程序博客网 时间:2024/05/16 00:47

之前分别尝试了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的易用性,后续会针对目前所做的程序验证做一个简单的总结。