前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全志R128按键控制蜂鸣器GPIO配置详解

全志R128按键控制蜂鸣器GPIO配置详解

作者头像
阿志小管家
发布2024-02-02 19:27:07
960
发布2024-02-02 19:27:07
举报

按键控制蜂鸣器

首先我们搭建电路,如下:

引脚

按键

PA25

按键1脚

GND

按键3脚

PA29

蜂鸣器触发脚

载入方案

我们使用的开发板是 R128-Devkit,需要开发 C906 核心的应用程序,所以载入方案选择r128s2_module_c906

代码语言:javascript
复制
$ source envsetup.sh 
$ lunch_rtos 1

勾选 GPIO 驱动

mrtos_menuconfig 找到下列驱动

代码语言:javascript
复制
Drivers Options  --->
    soc related device drivers  --->
            GPIO devices --->
                [*] enable GPIO driver
                [*] enbale GPIO hal APIs Test command
在这里插入图片描述
在这里插入图片描述

编写程序

打开你喜欢的编辑器,修改文件:lichee/rtos/projects/r128s2/module_c906/src/main.c

在这里插入图片描述
在这里插入图片描述
引入头文件
代码语言:javascript
复制
#include <hal_gpio.h>
在这里插入图片描述
在这里插入图片描述
使用 GPIO 配置引脚
配置 GPIO 的上下拉状态

使用 hal_gpio_set_pull(gpio_pin_t pin, gpio_pull_status_t pull); 来设置。这里我们设置 PA25 引脚为默认上拉状态。

代码语言:javascript
复制
hal_gpio_set_pull(GPIOA(25), GPIO_PULL_UP);
配置 GPIO 输入输出模式

使用 hal_gpio_set_direction(gpio_pin_t pin, gpio_direction_t direction); 来设置 GPIO 的输入输出模式,这里配置为输入模式。

代码语言:javascript
复制
hal_gpio_set_direction(GPIOA(25), GPIO_DIRECTION_INPUT);
配置 GPIO 的 MUX 功能

GPIO 通常有多种功能,需要配置 MUX 选择需要的功能,使用 hal_gpio_pinmux_set_function(gpio_pin_t pin, gpio_muxsel_t function_index); 来设置 GPIO 的复用功能,这里配置为GPIO 输入模式(GPIO_MUXSEL_IN

代码语言:javascript
复制
hal_gpio_pinmux_set_function(GPIOA(25), GPIO_MUXSEL_IN);
获取 GPIO 的电平

使用 int hal_gpio_get_data(gpio_pin_t pin, gpio_data_t *data); 来获取 GPIO 的电平,这里配置 PA25 为高电平点亮 LED

代码语言:javascript
复制
gpio_data_t gpio_data;
hal_gpio_get_data(GPIOA(25), GPIO_DATA_HIGH);
配置 GPIO 的电平

使用 hal_gpio_set_data(gpio_pin_t pin, gpio_data_t data); 来配置 GPIO 的电平,这里配置 PA18 为高电平点亮 LED

代码语言:javascript
复制
hal_gpio_set_data(GPIOA(18), GPIO_DATA_HIGH);
完整的配置 GPIO
代码语言:javascript
复制
gpio_data_t gpio_data;
// 配置按键输入脚为输入,默认拉高
hal_gpio_set_pull(GPIOA(25), GPIO_PULL_UP);
hal_gpio_set_direction(GPIOA(25), GPIO_DIRECTION_INPUT);
hal_gpio_pinmux_set_function(GPIOA(25), GPIO_MUXSEL_IN);

// 配置按键输入脚为输出,默认拉高
hal_gpio_set_pull(GPIOA(29), GPIO_PULL_UP);
hal_gpio_set_direction(GPIOA(29), GPIO_DIRECTION_OUTPUT);
hal_gpio_pinmux_set_function(GPIOA(29), GPIO_MUXSEL_OUT);
hal_gpio_set_data(GPIOA(29), GPIO_DATA_HIGH);

while(1){
    hal_gpio_get_data(GPIOA(25), &gpio_data);
    // 检测按键输入,如果有输入则输出buzz
    if(gpio_data == GPIO_DATA_LOW){
        printf("Key Pressed! And Buzz\n");
        hal_gpio_set_data(GPIOA(29), GPIO_DATA_LOW);
    } else {
        hal_gpio_set_data(GPIOA(29), GPIO_DATA_HIGH);
    }
}

结果

编译固件后烧录,按下按键蜂鸣器会发出声音,同时串口输出 Key Pressed! And Buzz

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 按键控制蜂鸣器
    • 载入方案
      • 勾选 GPIO 驱动
        • 编写程序
          • 引入头文件
          • 使用 GPIO 配置引脚
        • 结果
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档