一、前言
上篇讲解了如何解决工程报错的问题,本篇会讲解如何增加一个按键。
二、阅读说明
1、芯科芯片开发学习者。
2、zigbee爱好者。
3、使用的芯片为EFR32MG21A020F708IM32
三、正文
1、打开Simplicity Studio 6软件,新增按键组件
如上图所示,找到Driver->Button->Simple Button,然后点击Install进行安装,之后出现如下图所示的弹出。
如上图所示,在弹出的界面中,可以输入你想要命名的名字,之后点击Done就可以了。
2、配置按键的引脚2.1、当按键的组件安装好了之后,会出现如下的界面
图中的btn0,是我的按键的名字,对应这第1小节中instance name,大家可以自行进行命名。带年纪btn0之后,会看有右边有要给Configure的按键,这个按钮就是用来配置这个按键的。
2.2、配置按键的引脚
点击了Configure之后,会看到如上的两项可以进行配置,
2.3、配置SL_SIMPLE_BUTTON_BTN0_MODE
该模式有三种:
第一种是Interrupt模式,采用中断的方式来进行;
第二种是Poll and Debounce,不采用中断的方式,需要自己在主函数里面调用按键处理函数,带消抖;
第三种是Poll,不采用中断的方式,需要自己在主函数里面调用按键处理函数,消抖也需要自己写。在里面我们选择Interrupt模式。
2.4、引脚模式
这个引脚需要根据自己的原理图来进行设置,这里我选择的是PC05,然后给这个引脚重新命名了一个名字为KEY1。
3、 编写按键回调函数
3.1、编写按键回调函数的框架
void sl_button_on_change(const sl_button_t *handle){}
如上图所示,在app.c中编写按键回调函数,用来检测button按键的按下和释放。
3.2、编写按键回调函数的逻辑
void sl_button_on_change(const sl_button_t *handle){if(handle == &sl_button_btn0){if(sl_button_get_state(handle) == SL_SIMPLE_BUTTON_PRESSED){sl_zigbee_app_debug_println("button is pressed");}else {sl_zigbee_app_debug_println("button is released");}}}
如上图所示,编写按键的处理逻辑,当按键按下和释放的时候,打印相关的log出来。
4、程序下载和log打印
4.1、在vscode的侧边栏中打开Simplicity Commander软件
4.2、下载程序
按如上图所示的步骤进行下载程序,注意下载选择.s37的文件该文件位于工程目录下的这个目录,大家自行查找:
Zigbee_Switch_ZR/cmake_gcc/build/base/zigbee_minimal.s37
备注:这个只是应用程序,该代码运行需要先下载该芯片的bootloader代码,关于bootloader代码,下篇文章将进行介绍。
4.3、log打印
点击RTT->Connect之后,这时按按键可以看到如下的log
四、结尾
本篇讲解了如何添加按键,下一篇讲解该芯片的bootloader程序。
96