小熊派Hi3863——GPIO按键中断

目录

1. 准备工作

1.1 环境准备

1.2 原理图

1.3 案例代码完善

​编辑   

2. 编译烧录

2.1编译

2.2 烧录

3. 代码详解

3.1 程序的运行流程

3.2 源码

3.3 入口函数 app_run:程序的起点

3.4 button_entry 函数:初始化按钮

3.5 gpio_callback_func 函数:中断回调逻辑

4. 现象观察


官方文档:点击跳转

1. 准备工作

1.1 环境准备

  • 准备一块BearPi-Pico H3863开发板和母对母杜邦线(用杜邦线短接模拟按键按下)
  • 完成环境搭建(SDK中自带按键中断案例)

1.2 原理图

本次通过杜邦线短接GPIO0和GND来模拟按键按下

1.3 案例代码完善

   

2. 编译烧录

2.1编译

2.2 烧录

3. 代码详解

3.1 程序的运行流程

  • 入口函数 app_run(button_entry):启动程序,调用 button_entry
  • button_entry 函数:初始化按钮的GPIO引脚,配置为输入模式并注册中断回调函数 gpio_callback_func
  • gpio_callback_func 函数:当按钮被按下时触发,打印消息“Button pressed.”到调试控制台

3.2 源码

/**
 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
 *
 * Description: Button Sample Source. \n
 *
 * History: \n
 * 2023-04-03, Create file. \n
 */

#include "pinctrl.h"
#include "gpio.h"
#include "osal_debug.h"
#include "cmsis_os2.h"
#include "app_init.h"

#define CONFIG_BUTTON_PIN 0
static void gpio_callback_func(pin_t pin, uintptr_t param)
{
    UNUSED(pin);
    UNUSED(param);
    osal_printk("Button pressed.\r\n");
}

static void button_entry(void)
{
    uapi_pin_set_mode(CONFIG_BUTTON_PIN, HAL_PIO_FUNC_GPIO);
    uapi_pin_set_pull(CONFIG_BUTTON_PIN, PIN_PULL_TYPE_UP);
    uapi_gpio_set_dir(CONFIG_BUTTON_PIN, GPIO_DIRECTION_INPUT);    
    uapi_gpio_register_isr_func(CONFIG_BUTTON_PIN, GPIO_INTERRUPT_DEDGE, gpio_callback_func);
}

/* Run the button_entry. */
app_run(button_entry);

3.3 入口函数 app_run:程序的起点

app_run(button_entry);

3.4 button_entry 函数:初始化按钮

static void button_entry(void)
{
    uapi_pin_set_mode(CONFIG_BUTTON_PIN, HAL_PIO_FUNC_GPIO);
    uapi_pin_set_pull(CONFIG_BUTTON_PIN, PIN_PULL_TYPE_UP);
    uapi_gpio_set_dir(CONFIG_BUTTON_PIN, GPIO_DIRECTION_INPUT);    
    uapi_gpio_register_isr_func(CONFIG_BUTTON_PIN, GPIO_INTERRUPT_DEDGE, gpio_callback_func);
}

在 button_entry 函数中,程序依次完成了以下初始化操作:

  • uapi_pin_set_mode(CONFIG_BUTTON_PIN, HAL_PIO_FUNC_GPIO):将按钮引脚模式设置为普通GPIO功能
  • uapi_pin_set_pull(CONFIG_BUTTON_PIN, PIN_PULL_TYPE_UP):将按钮引脚设置为上拉模式,确保在未按下时为高电平
  • uapi_gpio_set_dir(CONFIG_BUTTON_PIN, GPIO_DIRECTION_INPUT):将按钮引脚方向设置为输入模式
  • uapi_gpio_register_isr_func(CONFIG_BUTTON_PIN, GPIO_INTERRUPT_DEDGE, gpio_callback_func):注册中断回调函数,当按钮按下时触发 gpio_callback_func

3.5 gpio_callback_func 函数:中断回调逻辑

static void gpio_callback_func(pin_t pin, uintptr_t param)
{
    UNUSED(pin);
    UNUSED(param);
    osal_printk("Button pressed.\r\n");
}
  • UNUSED(pin) 和 UNUSED(param):标记函数参数未使用,避免编译器警告。
  • osal_printk("Button pressed.\r\n"):当按钮被按下时,打印消息“Button pressed.”到调试控制台,提示按钮被触发。

4. 现象观察

打开串口工具

使用杜邦线短接GPIO0和GND

打印输出Button pressed

<think>嗯,用户想要了解BearPi-Pico H3863的使用手册,首先我需要确认这个开发板的具体信息。BearPi-Pico H3863应该是基于树莓Pico的物联网开发板,可能用的是华为的LiteOS或者HarmonyOS系统。 首先,我需要回忆一下BearPi系列开发板的特点。BearPi通常针对物联网应用,可能集成了Wi-Fi、传感器等模块。H3863这个型号可能具体指某个硬件版本,比如主控芯片、外设接口等。可能需要查看硬件组成,比如主控芯片是RP2040还是其他型号,支持的开发环境,比如MicroPython、C/C++,或者HarmonyOS的开发框架。 接下来,用户需要的是使用手册的内容,所以应该分步骤介绍,包括硬件概述、开发环境搭建、示例项目、常见问题等部分。需要确保信息准确,比如GPIO引脚分配是否正确,开发环境的配置步骤是否适用于H3863。可能存在不同版本的BearPi-Pico,需要确认H3863的具体参数,避免给出错误的信息。 另外,用户提到系统级指令中的LaTeX格式,需要注意在回答中使用正确的数学表达式格式,虽然这个问题可能不涉及太多数学内容,但如果有涉及参数或公式的地方,比如电压、频率等,需要按照要求使用$...$或$$...$$。 用户可能希望快速上手,所以步骤需要简明,比如如何安装驱动、下载示例代码、烧录程序等。同时,可能遇到的问题比如驱动安装失败、编译错误,应该在常见问题部分给出解决方法。需要确保推荐的资源链接是有效的,比如GitHub仓库或官方文档链接。 还要注意使用中文回答,结构清晰,分点说明。可能需要检查是否有过时的信息,比如开发工具版本更新导致的步骤变化,确保回答的时效性。如果有不确定的部分,应该建议用户参考官方文档或社区支持,避免误导。</think>以下为BearPi-Pico H3863开发板的系统级使用指南(信息基于公开技术文档整理,具体以官方手册为准): --- ### 一、硬件架构 1. **核心芯片** - 主控:Raspberry Pi RP2040双核ARM Cortex-M0+ @133MHz - 协处理器:Hi3861V100 Wi-Fi6模组(支持2.4GHz 802.11b/g/n) 2. **关键外设** - GPIO接口:26个可编程引脚(含12位ADC、PWM、UART、I2C、SPI) - 存储:2MB Flash(RP2040)+ 16MB SPI Flash(Hi3861) - 通信接口:Micro-USB(供电/调试)、Wi-Fi/BLE双模 --- ### 二、开发环境搭建 #### 步骤1:驱动安装 1. 连接开发板至PC的USB口 2. 自动识别为**串口设备**(需安装CH340驱动,官网下载地址:`https://www.wch.cn/downloads/CH341SER_EXE.html`) #### 步骤2:工具链配置 ```bash # 推荐使用VS Code + PlatformIO插件 1. 安装PlatformIO IDE扩展 2. 新建项目选择"Raspberry Pi RP2040"框架 3. 添加Hi3861 SDK依赖项(需从华为开发者平台获取) ``` --- ### 三、基础示例:LED闪烁 ```c #include "pico/stdlib.h" #define LED_PIN 25 // 板载LED对应GPIO25 int main() { gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); while (true) { gpio_put(LED_PIN, 1); sleep_ms(500); gpio_put(LED_PIN, 0); sleep_ms(500); } } ``` 烧录命令: ```bash $ openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "program blink.elf verify reset exit" ``` --- ### 四、物联网通信示例(MQTT协议) 1. **Wi-Fi连接配置** ```c hi_wifi_sta_config config = { .ssid = "Your_SSID", .password = "Your_Password", .auth = HI_WIFI_SECURITY_WPA2PSK }; hi_wifi_sta_connect(&config); ``` 2. **MQTT发布消息** ```c mqtt_client client; mqtt_init(&client, "broker.hivemq.com", 1883); mqtt_publish(&client, "bearpi/topic", "Hello from H3863!"); ``` --- ### 五、引脚分配表(关键部分) | 功能 | RP2040引脚 | Hi3861引脚 | |-------------|------------|------------| | UART0_TX | GPIO0 | GPIO5 | | I2C0_SDA | GPIO4 | GPIO13 | | ADC0 | GPIO26 | - | --- ### 六、常见问题 1. **烧录失败** - 检查BOOTSEL按钮是否进入下载模式(上电时按住BOOTSEL) 2. **Wi-Fi连接不稳定** - 更新Hi3861固件至最新版本 - 调整天线方向(板载PCB天线位于右上角) --- ### 七、官方资源 1. [GitHub仓库](https://github.com/bearpi/bearpi-pico) 2. [华为Hi3861开发文档](https://device.harmonyos.com/cn/docs/documentation/doc-guides/installation-3861-0000001104902678) 请根据实际开发需求选择MicroPython或C/C++开发模式,复杂项目建议使用HarmonyOS分布式能力进行多设备协同开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值