登录发现更多内容
首页
分类
发帖
账号
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
首页
Portal
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
产品教程
BBS
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
开发资料
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
样品购买
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
IoT云平台
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
GitHub
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
技术博客
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
搜索
搜索
热搜:
LoRa
ESP8266
安信可
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
立即注册
每日签到
任务
广播
导读
排行榜
设置
我的收藏
退出
40
3
6
首页
小安派·S1
›
(七)零基础开发小安派-Eyes-S1【外设篇】——GPIO输入 ...
1
2
3
4
5
/ 5 页
下一页
返回列表
(七)零基础开发小安派-Eyes-S1【外设篇】——GPIO输入输出
[ 复制链接 ]
发布帖子
Ai-Thinker小泽
论坛元老
38
主题
556
回帖
7012
积分
论坛元老
论坛元老, 积分 7012, 距离下一级还需 9992987 积分
论坛元老, 积分 7012, 距离下一级还需 9992987 积分
积分
7012
私信
39人留言
楼主
小安派·S1
17357
40
2023-9-12 15:22:58
> 本帖最后由 Ai-Thinker小泽 于 2023-9-12 15:21 编辑 # 零基础开发小安派-Eyes-S1【外设篇】——GPIO输入输出 博流系列的芯片驱动分为两类,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; }; ``` | parameter | description | | --------- | --------------------------------- | | name | 外设名称 | | reg_base | 外设寄存器基地址 | | irq_num | 外设中断号 | | idx | 外设 id | | idx | 外设 id,例如 UART0、UART1 | | sub_idx | 外设子 id,例如 DMA0_CH0、DMA0_CH1 | | dev_type | 外设类型 | | user_data | 用户变量 | | name | 外设名称 | | name | 外设名称 | 我们知道,我们对芯片的所有操作其实都是基于对寄存器的配置,所以该结构体的成员中较为重要的为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有如下:** √表示已支持,×表示未支持,-表示没有该外设 | parameter | BL616/BL618 | | --------- | ----------- | | ADC | √ | | CAM | × | | CKS | √ | | DAC | √ | | DMA | √ | | EFUSE | √ | | EMAC | √ | | FLASH | √ | | GPIO | √ | | I2C | √ | | IR | √ | | MJPEG | √ | | PWM_v1 | - | | PWM_v2 | √ | | RTC | √ | | SEC_AES | √ | | SEC_SHA | √ | | SEC_TRNG | √ | | SEC_PKA | √ | | SPI | √ | | TIMER | √ | | UART | √ | | USB_v1 | - | | USB_v2 | √ | | WDG | √ | ## 二、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); ``` | parameter | description | | --------- | ------------------------------------------------------------------------------------------------ | | dev | 设备句柄 | | pin | gpio pin | | cfgset | gpio 配置项:gpio mode、gpio function、gpio pupd、gpio smt、gpio drive,多个配置需要使用"与"连接 | ### 2.bflb_gpio_deinit 说明: 反初始化 gpio,默认为输入浮空状态 ``` void bflb_gpio_deinit(struct bflb_device_s *dev, uint8_t pin); ``` | parameter | description | | --------- | ----------- | | dev | 设备句柄 | | pin | gpio pin | ### 3.bflb_gpio_set 说明: gpio 输出高电平 ``` void bflb_gpio_set(struct bflb_device_s *dev, uint8_t pin); ``` | parameter | description | | --------- | ----------- | | dev | 设备句柄 | | pin | gpio pin | ### 4.bflb_gpio_reset 说明: gpio 输出低电平 ``` void bflb_gpio_reset(struct bflb_device_s *dev, uint8_t pin); ``` | parameter | description | | --------- | ----------- | | dev | 设备句柄 | | pin | gpio pin | ### 5.bflb_gpio_read 说明: 读取 gpio 电平 ``` bool bflb_gpio_read(struct bflb_device_s *dev, uint8_t pin); ``` | parameter | description | | --------- | ------------------------------ | | dev | 设备句柄 | | pin | gpio pin | | return | true 为 高电平,false 为低电平 | 四、示例——GPIO输出点亮LED灯、GPIO输入采集电平并打印 我直接用SDK里的GPIO示例稍作修改。并逐步解释代码实现。 查看原理图,这里我已经标注了预留的接口,需要飞线(幸好我找到一个合适的座子)   ### 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 output\r\n"); //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("\033[0;34m GPIO_PIN_1=%x\033[0m \r\n", bflb_gpio_read(gpio, GPIO_PIN_1)); //这里的\033[0;34m为函数的打印字体、前景色、后景色的设置,只是将打印的信息赋予颜色,感兴趣的同学可以百度 //bflb_gpio_read读取pin1的电平,返回true为高电平,false为低电平 bflb_mtimer_delay_ms(2000);//延迟2000毫秒,也就是2秒 bflb_gpio_reset(gpio, GPIO_PIN_0); printf("\033[0;35;40m GPIO_PIN_1=%x\033[0m \r\n", bflb_gpio_read(gpio, GPIO_PIN_1)); bflb_mtimer_delay_ms(2000); } } ``` 2.实现效果,GPIO0每两秒循环亮灭一次,每两秒打印GPIO1的电平  
点赞
3
收藏
6
淘帖
2
────
3
人觉得很赞
────
本主题由 管理团队 于 2026-7-3 10:39 移动
本帖被以下淘专辑推荐:
·
小安派S1&M61教程合集
|
主题: 19, 订阅: 5
·
小安派&M61零基础教程
|
主题: 19, 订阅: 5
回复
使用道具
举报
39 回复
电梯直达
正序浏览
倒序浏览
正序浏览
沙发
翁vjk
回复
使用道具
举报
2023-9-12 15:23:31
沙发
回复
评论
使用道具
举报
板凳
爱笑
回复
使用道具
举报
2023-9-12 15:25:47
板凳!
回复
评论
使用道具
举报
用心做好保姆工作
地板
Ject
来自手机
回复
使用道具
举报
2023-9-12 15:37:10
三楼
回复
评论
使用道具
举报
5
#
粉色小风扇
回复
使用道具
举报
2023-9-12 15:39:35
泽哥排版越来越好看了
回复
评论
使用道具
举报
6
#
ai_mcu
回复
使用道具
举报
2023-9-12 16:07:15
跟着泽哥学点灯
回复
评论
使用道具
举报
明天总会更好
7
#
WYG
回复
使用道具
举报
2023-9-12 16:24:55
打卡学习
回复
评论
使用道具
举报
8
#
妖猊
回复
使用道具
举报
2023-9-12 17:45:41
这太重要了
回复
评论
使用道具
举报
9
#
iiv
回复
使用道具
举报
2023-9-12 17:58:53
支持泽哥!
回复
评论
使用道具
举报
10
#
molun
回复
使用道具
举报
2023-9-12 18:36:13
又涨知识了
回复
评论
使用道具
举报
等风,等雨,也等你!
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
手机登录
点评
高级模式
本版积分规则
回帖并转播
回帖后跳转到最后一页
下一页 »
1
2
3
4
5
/ 5 页
下一页
今日推荐
九章开发板疑问
🔌手把手!1T1R 毫米波测距演示怎么跑?接入与 Python 环境配置
ONELAB开发套件常见问题Q&A:距离、角度、速度、距离门设置
【九章MCP验证板】开发环境配置教程
AI-WV02-32S 铁板烧焊接翻车
不用写代码,先跑通这两个开源例程,感受毫米波能做什么
【体验】Ai-WV02-32S 这不就跑起来了么
【问题】Ai-WV02-32S 短路
【B站/视频号直播预告】莫工带你跑通 AI→MCP 协议→硬件执行全
📘 一篇帖,把矽典微毫米波开发系列讲清楚
热帖排行
九章开发板疑问
🔌手把手!1T1R 毫米波测距演示怎么跑?接入与 Python 环境配置
ONELAB开发套件常见问题Q&A:距离、角度、速度、距离门设置
【九章MCP验证板】开发环境配置教程
TB-04模块 从机收不到主机信息
AI-WV02-32S 铁板烧焊接翻车
<Ai-WB2-12F>这个模组请教个问题-FTP下载
不用写代码,先跑通这两个开源例程,感受毫米波能做什么
统计信息
会员数: 31168 个
话题数: 42253 篇
首页
分类
我的