芯科BG22学习笔记:2-如何添加GPIO输入

实验目的:读取BG22芯片GPIO口的高低电平输入

实验环境:Simplicity Studio V5

实验器材:Wireless Starter Kit Mainboard (BRD4001A Rev A01) + EFR32xG22 2.4 GHz 6 dBm QFN32 Radio Board (BRD4183A)

实验开始:

1. 新建工程,蓝牙工程输入soc empty, 普通MCU工程输入empty c

 

 

 

 

 

 2. 打开SOFTWARE COMPONENTS,搜索对话框输入button,点击Install,用默认的名字btn0即可

 

 

 

 

 

   

 

 

 

 

 

 

3. 在app.c文件加入头文件

#include "sl_simple_button_instances.h"

4. 在应用程序中添加如下例程:

  if (sl_button_get_state(&sl_button_btn0))//如果按键按下
  {
 
      while (sl_button_get_state(&sl_button_btn0));//等待按键松开
  }

5. 如果并不需要按键程序在主程序执行而是在中断中处理,则添加中断服务子程序:

//外部中断子程序
void sl_button_on_change(const sl_button_t *handle)
{
  if(&sl_button_btn0 == handle)//判断是否中断来自btn0
  {
      if (sl_button_get_state(handle) == SL_SIMPLE_BUTTON_PRESSED)//Button 0按键按下
      {
          //sl_bt_external_signal(1);
          //app_log("Button 0 pushed\r\n");
      } 
      else //Button 0按键松开
      {
          //app_log("Button 0 released\r\n");
      }
  }
}

6. 如果需要添加新的输入,点击下图中的 Add New Instances 继续添加btn1,btn2 ...

7. 补充说明:

一旦定义了按钮结构,就可以通过传递一个 sl_button_t 实例来调用通用按钮函数,该实例将被重定向到调用该函数的特定类型版本。常用功能包括:

sl_button_init

sl_button_get_state

sl_button_poll_step

sl_button_on_change

其中sl_button_init必须在读取按钮状态之前调用。

按钮驱动程序可以与中断模式、轮询或带去抖动的轮询一起使用。在使用中断模式的情况下,可以由应用程序实现sl_button_on_change 。该函数可以包含响应按钮事件或回调适当功能而执行的功能。在使用去抖动模式进行轮询或轮询的情况下,sl_button_poll_step用于更新状态,需要用户从tick(滴答)函数或类似函数中调用。这些模式可以在实例特定的配置文件中为每个按钮实例配置。

中断和轮询方法都通过调用sl_button_get_state为用户获取按钮状态。

 

 完

posted @ 2022-02-09 09:48  J-Dub  阅读(520)  评论(0编辑  收藏  举报