0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

零基础开发小安派-Eyes-S1外设篇——GPIO 输入输出

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2024-10-25 13:50 次阅读

AiPi-Eyes-S1是安信可开源团队专门为Ai-M61-32S设计的一款开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的外设接口,具体包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太网 (EMAC)、SD/MMC(SDH)、SPI、UARTI2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。

AiPi-Eyes-S1集成了SPI屏幕接口,DVP摄像头接口,外置ES8388音频编解码芯片以及预留TF卡座,并且引出USB接口,可接入USB摄像头。

从零开始学习小安派:

1、零基础开发小安派-Eyes-S1【入门篇】——初识小安派-Eyes-S1

2、零基础开发小安派-Eyes-S1【入门篇】——安装VMware与Ubuntu

3、入门篇:零基础开发小安派-Eyes-S1——新建工程并烧录调试

4、零基础开发小安派-Eyes-S1入门篇——Win下SSH连接Linux

5、零基础开发小安派-Eyes-S1【入门篇】——Samba共享文件夹

6、零基础开发小安派-Eyes-S1【入门篇】——工程文件架构

博流系列的芯片驱动分为两类,LHAL 和 SOC,使用 LHAL 库驱动外设十分方便,因为其对通用外设进行了统一的封装,在使用博流的不同芯片时他们的接口一致,方便使用和移植。而 SOC 则是作为特殊部分使用,如 GLB、HBN、PDS、AON 等等。

一、了解 LHAL 库和小安派-Eyes-S1 外设

LHAL 库配备了一个结构体作为通用外设的配置工具——struct bflb_device_s

struct bflb_device_s {
const char *name;uint32_t reg_base;
uint8_t irq_num;
uint8_t idx;
uint8_t sub_idx;
uint8_t dev_type;
void *user_data;
};

对芯片的所有操作其实都是基于对寄存器的配置,所以该结构体的成员中较为重要的为 reg_base 和 irq_num ,有了这两个才能操作外设寄存器和外设中断。

在配置之前,我们也得先初始化结构体获得它的句柄,有两种方式

1.bflb_device_get_by_name 通过 name 获取
2.bflb_device_get_by_id 通过 dev_type 和 idx 获取

获得的句柄会在一个 table 表中,详情可以看 lhal/config/xxx/device_table.c 文件。

小安派-Eyes-S1 所支持的外设 LHAL 库 API 有如下:√ 表示已支持,× 表示未支持,-表示没有该外设

wKgaomcbMaOAXRzEAACRGM3g1mU839.jpg

二、GPIO 配置简介

1.头文件 bflb_gpio.h

2.gpio mode

gpio 的模式可以设置为四种,分别是输入、输出、模拟、复用

#define GPIO_INPUT (0 << GPIO_MODE_SHIFT) /* Input Enable */
#define GPIO_OUTPUT (1 << GPIO_MODE_SHIFT) /* Output Enable */
#define GPIO_ANALOG (2 << GPIO_MODE_SHIFT) /* Analog Enable */
#define GPIO_ALTERNATE (3 << GPIO_MODE_SHIFT) /* Alternate Enable */

3.gpio pupd

gpio 可以选择上拉、下拉、浮空

#define GPIO_FLOAT (0 << GPIO_PUPD_SHIFT) /* No pull-up, pull-down */
#define GPIO_PULLUP (1 << GPIO_PUPD_SHIFT) /* Pull-up */
#define GPIO_PULLDOWN (2 << GPIO_PUPD_SHIFT) /* Pull-down */

4.gpio smt

gpio 滤波开关

#define GPIO_SMT_DIS (0 << GPIO_SMT_SHIFT)
#define GPIO_SMT_EN (1 << GPIO_SMT_SHIFT)

5.gpio drive

gpio 输出能力选择

#define GPIO_DRV_0 (0 << GPIO_DRV_SHIFT)
#define GPIO_DRV_1 (1 << GPIO_DRV_SHIFT)
#define GPIO_DRV_2 (2 << GPIO_DRV_SHIFT)
#define GPIO_DRV_3 (3 << GPIO_DRV_SHIFT)

6.gpio init trig mode

gpio 外部中断的触发模式

#define GPIO_INT_TRIG_MODE_SYNC_FALLING_EDGE 0
#define GPIO_INT_TRIG_MODE_SYNC_RISING_EDGE 1
#define GPIO_INT_TRIG_MODE_SYNC_LOW_LEVEL 2
#define GPIO_INT_TRIG_MODE_SYNC_HIGH_LEVEL 3
#if defined(BL702)
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE 4
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE 5
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL 6
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL 7
#else
#define GPIO_INT_TRIG_MODE_SYNC_FALLING_RISING_EDGE 4
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE 8
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE 9
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL 10
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL 11
#endif

7.gpio uart function

每个 gpio 都可以选择到 Uart 的任意一个功能,当然区别是在初始化时的选择

#define GPIO_UART_FUNC_UART0_RTS 0
#define GPIO_UART_FUNC_UART0_CTS 1
#define GPIO_UART_FUNC_UART0_TX 2
#define GPIO_UART_FUNC_UART0_RX 3
#define GPIO_UART_FUNC_UART1_RTS 4
#define GPIO_UART_FUNC_UART1_CTS 5
#define GPIO_UART_FUNC_UART1_TX 6
#define GPIO_UART_FUNC_UART1_RX 7
#if defined(BL808) || defined(BL606P)
#define GPIO_UART_FUNC_UART2_RTS 8
#define GPIO_UART_FUNC_UART2_CTS 9
#define GPIO_UART_FUNC_UART2_TX 10
#define GPIO_UART_FUNC_UART2_RX 11
#endif

三、gpio 的初始化及使用

1.bflb_gpio_init

说明: gpio 的初始化函数

void bflb_gpio_init(struct bflb_device_s *dev, uint8_t pin, uint32_t cfgset);

wKgaomcbMaSAXxN2AAA3LT1qgzk855.jpg

2.bflb_gpio_deinit

说明: 反初始化 gpio,默认为输入浮空状态

void bflb_gpio_deinit(struct bflb_device_s *dev, uint8_t pin);

wKgZomcbMaSAfNeMAAAc9IJJlXc616.jpg

3.bflb_gpio_set

说明: gpio 输出高电平

void bflb_gpio_set(struct bflb_device_s *dev, uint8_t pin);

4.bflb_gpio_reset

说明: gpio 输出低电平

void bflb_gpio_reset(struct bflb_device_s *dev, uint8_t pin);

wKgaomcbMaWAR_ROAAAgFLFceRs366.jpg

5.bflb_gpio_read

说明: 读取 gpio 电平

bool bflb_gpio_read(struct bflb_device_s *dev, uint8_t pin);

wKgZomcbMaaASFp1AAAkxrfhvII101.jpg

编辑

四、示例——GPIO 输出点亮 LED 灯、GPIO 输入采集电平并打印

直接用 SDK 里的 GPIO 示例稍作修改。并逐步解释代码实现。

查看原理图,这里已经标注了预留的接口,需要飞线(幸好找到一个合适的座子)

wKgaomcbMaaAeizGAABaXyZjPLk675.jpg

wKgZomcbMaiAciTkAADpwF1xnmg088.jpg

1.main

#include "bflb_gpio.h" //gpio头文件
#include "bflb_mtimer.h" //mtimer定时器头文件,可使用里面的延时函数
#include "board.h" //开发板头文件,包含LHAL库等
struct bflb_device_s *gpio; //初始化一个结构体指针作为外设句柄命名为gpio,
int main(void)
{
board_init(); //开发板初始化
gpio = bflb_device_get_by_name("gpio"); //给前面的gpio句柄赋值对外设进行操作,这里的名字
//可使用的外设全部命名在bl616_device_table这个结构体数组里,我们所有使用的外设命名与上面列表中支持的外设列表
//也可以在函数定义里查看所有可支持的外设名称,命名一定要匹配。
printf("gpio outputrn"); //printf函数已经重定义为输出在串口0上,我们作为LOG查看
bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
//gpio初始化,第一个参数为句柄,第二个参数为pin,第三个为GPIO的配置,这里配置为输出、浮空、滤波打开、驱动等级0
bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_INPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
//gpio初始化,第一个参数为句柄,第二个参数为pin,第三个为GPIO的配置,这里配置为输入、浮空、滤波打开、驱动等级0
while (1) {
bflb_gpio_set(gpio, GPIO_PIN_0);//将pin0设置为高电平
printf("33[0;34m GPIO_PIN_1=%x33[0m rn", bflb_gpio_read(gpio, GPIO_PIN_1));
//这里的33[0;34m为函数的打印字体、前景色、后景色的设置,只是将打印的信息赋予颜色,感兴趣的同学可以百度
//bflb_gpio_read读取pin1的电平,返回true为高电平,false为低电平
bflb_mtimer_delay_ms(2000);//延迟2000毫秒,也就是2秒
bflb_gpio_reset(gpio, GPIO_PIN_0);
printf("33[0;35;40m GPIO_PIN_1=%x33[0m rn", bflb_gpio_read(gpio, GPIO_PIN_1));
bflb_mtimer_delay_ms(2000);
}
}

2.实现效果,GPIO0 每两秒循环亮灭一次,每两秒打印 GPIO1 的电平

wKgaomcbMamAaPTLAAAyEIkK2Bs959.jpg

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8372

    浏览量

    150561
  • 开发板
    +关注

    关注

    25

    文章

    4845

    浏览量

    96872
  • GPIO
    +关注

    关注

    16

    文章

    1184

    浏览量

    51747
收藏 人收藏

    评论

    相关推荐

    零基开发小安-Eyes-DU之【PWM循环呼吸灯】

    上周发布了新的开源硬件——小安-Eyes-DU,DU板子亮点是什么?小安来解释下。 小安-
    的头像 发表于 08-14 15:37 701次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU之【PWM循环呼吸灯】

    如何用小安-Eyes-S1做一个电子木鱼?

    2024年的第一教程来了,本篇学习如何添加LVGL事件,并制作完成一个电子木鱼(小美苦苦哀求,我略微出手而已)。祝大家2024积德累功,心想事成!接下来看看如何用小安-Eyes-S1
    的头像 发表于 01-13 15:18 901次阅读
    如何用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一个电子木鱼?

    零基开发安信可小安-Eyes-S1【入门】——初识小安-Eyes-S1

    初识小安-Eyes-S1 前言:本教程针对零基础人员可以快速上手小安-
    发表于 09-08 11:06

    04、STM8通用输入输出口(GPIO)

    04、STM8通用输入输出口(GPIO)文章目录04、STM8通用输入输出口(GPIO)1、概述2、GP
    发表于 11-26 15:21 9次下载
    04、STM8通用<b class='flag-5'>输入输出</b>口(<b class='flag-5'>GPIO</b>)

    GPIO通用输入输出

    GPIO通用输入输出一、GPIO的功能概述用途:GPIO是通用输入输出(General Purpose I/O)的简称,主要用于工业现场需要
    发表于 12-20 18:58 6次下载
    <b class='flag-5'>GPIO</b>通用<b class='flag-5'>输入输出</b>

    小安-Eyes-S1/S2多功能开发板简介

    今天,我们在小安放出新鲜的开发板产品AiPi-Eyes-S1小安-
    的头像 发表于 06-19 10:10 831次阅读
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>/<b class='flag-5'>S</b>2多功能<b class='flag-5'>开发</b>板简介

    安信可开源工程——小安-Eyes-S1/S2多功能开发

    前言 AiPi-Eyes-S1 是安信可开源团队专门为Ai-M61-32S设计的一款开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的
    的头像 发表于 06-20 09:51 583次阅读
    安信可开源工程——<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>/<b class='flag-5'>S</b>2多功能<b class='flag-5'>开发</b>板

    -Eyes-DU开发板的参数说明

    本周又来一款小安开源硬件——小安-Eyes-DU开发板,来看看参数~
    的头像 发表于 08-06 10:18 580次阅读
    安<b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU<b class='flag-5'>开发</b>板的参数说明

    安信可开源硬件——小安-Eyes-DU开发

    安信可科技又来一款小安开源硬件——小安-Eyes-DU开发板,来看看参数~ 01概述
    的头像 发表于 08-07 14:52 738次阅读
    安信可开源硬件——<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU<b class='flag-5'>开发</b>板

    小安-Eyes-S1外设接口简介

    前言:本教程针对零基础人员可以快速上手小安-Eyes-S1实现一些简单的应用开发,仅供参考学习,本人也在学习的过程中,感谢大家支持。
    的头像 发表于 09-18 09:55 758次阅读

    零基开发小安-Eyes-S1【入门】——初识小安-Eyes-S1

    前言:本教程针对零基础人员可以快速上手小安-Eyes-S1实现一些简单的应用开发,仅供参考学习,本人也在学习的过程中,感谢大家支持。
    的头像 发表于 09-18 15:41 634次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入门<b class='flag-5'>篇</b>】——初识<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>

    小安-Eyes-S1安装VMware与Ubuntu教程

    设置了中文,换好了国内的清华APT源,安装VScode与必要的插件,拉取了截至目前更新的小安最新的SDK和子模块,配置好了编译环境。由于集成度较高,本次下载的压缩包高达10G。选择上传了百度云(主要是莫工有会员),若有其他需求后期也可以上传至其他云。
    的头像 发表于 09-24 10:58 799次阅读
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>安装VMware与Ubuntu教程

    零基开发安信可小安-Eyes-S1【入门】——安装VMware与Ubuntu

    Ubuntu 18.04已经给大家设置了中文,换好了国内的清华APT源,安装VScode与必要的插件,拉取了截至目前更新的小安最新的SDK和子模块,配置好了编译环境。由于集成度较高,本次下载的压缩包
    的头像 发表于 09-26 09:00 700次阅读
    <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b>安信可<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入门<b class='flag-5'>篇</b>】——安装VMware与Ubuntu

    功德+1,用小安-Eyes-S1做一个电子木鱼

    2024积德累功,心想事成!接下来 看看如何用小安-Eyes-S1做一个电子木鱼 。 01、GUI-Guider 页面设计 先新建一个工程。 直接进入 UI 设计界面,这里用到了两个组件, 一个是图片按钮,一个是文本框 。 先
    的头像 发表于 01-16 14:33 568次阅读
    功德+<b class='flag-5'>1</b>,用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一个电子木鱼

    开发教程 零基开发小安-Eyes-S1入门——Win下SSH连接Linux

    AiPi-Eyes-S1 是安信可开源团队专门为Ai-M61-32S设计的一款开发板,支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的
    的头像 发表于 09-24 14:31 174次阅读
    <b class='flag-5'>开发</b>教程 <b class='flag-5'>零基</b>础<b class='flag-5'>开发</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>入门<b class='flag-5'>篇</b>——Win下SSH连接Linux