NB-IoT BC260Y Open CPU SDK⑤点亮一个LED

NB-IoT BC260Y Open CPU SDK⑤点亮一个LED

    • 1、BC260Y gpio资源介绍
    • 2、相关API介绍
    • 3、调试信息串口打印
    • 3、实例分析

本章节将介绍BC260Y硬件GPIO相关操作

1、BC260Y gpio资源介绍

BC260Y-AA的sdk包中官方给出了16个可用IO
在ql_gpio.h文件中有定义如下
	/****************************************************************************
 * Enumeration for GPIO Pins available.
 ***************************************************************************/
typedef enum
{
    /**************************************************
    *  <<<BEGIN: The fowllowing PINs for BC260Y
    *            (TOTAL: 16)
    ***************************************************/
    PINNAME_SPI_MISO = 0,
    PINNAME_SPI_MOSI,
    PINNAME_SPI_SCLK,
    PINNAME_SPI_CS,
    PINNAME_GPIO1,			
    PINNAME_I2C_SCL,			
    PINNAME_I2C_SDA,
    PINNAME_MAIN_CTS,
    PINNAME_MAIN_RTS,
    PINNAME_GPIO2,
    PINNAME_RXD_AUX,		//not support eint
    PINNAME_TXD_AUX,		//not support eint
    PINNAME_GPIO3,
    PINNAME_GPIO4,
    PINNAME_GPIO5,
    PINNAME_GPIO6,		
    
	PINNAME_END
}Enum_PinName;

2、相关API介绍

平台不支持IO口设置下拉,所以在作为输入高电平的情况下,注意加下拉电阻

typedef enum{
    PINPULLSEL_PULLUP    = 0,    	/**< select internal pull up */
    //PINPULLSEL_PULLDOWN  = 1,   	/**< select internal pull down */    platform not support
    PINPULLSEL_DISABLE   = 2   		/**< Pull up/down is controlled by muxed alt function */
}Enum_PinPullSel;
/*****************************************************************
* Function:     Ql_GPIO_Init
*
* Description:
*               This function enables the GPIO function of the specified pin,
*               and initialize the configurations, including direction,
*               level and pull selection.
*
* Parameters:
*               pinName:
*                   Pin name, one value of Enum_PinName.
*               dir:
*                   The initial direction of GPIO, one value of Enum_PinDirection.
*               level:
*                   The initial level of GPIO, one value of Enum_PinLevel.
*               pullSel:
*                   Pull selection, one value of Enum_PinPullSel.
* Return:
*               QL_RET_OK, this function succeeds.
*               QL_RET_ERR_NOSUPPORTPIN, the input GPIO is invalid.
*               QL_RET_ERR_PINALREADYSUBCRIBE, the GPIO is in use in
*               other place. For example this GPIO has been using as EINT.
*****************************************************************/
s32 Ql_GPIO_Init(Enum_PinName pinName,Enum_PinDirection dir,Enum_PinLevel  level ,Enum_PinPullSel pullsel);

IO口设置成输出:

Enum_PinName gpioPin = PINNAME_GPIO1;
Ql_GPIO_Init(gpioPin, PINDIRECTION_OUT, PINLEVEL_LOW, PINPULLSEL_PULLUP);

3、调试信息串口打印

首先我们需要初始化一下串口
串口API:

/*****************************************************************
* Function:     Ql_UART_Open 
* 
* Description:
*               This function opens a specified UART port with the specified 
*               flow control mode. 
*               Which task call this function, which task will own the specified UART port.
*
* Parameters:
*               [in]port:       
*                       Port name
*               [in]baudrate:      
*                       The baud rate of the UART to be opened
*                       for the physical the baud rate support 4800,9600,
*                       19200,38400,57600,115200,230400,460800,921600.
*
*               [in]CallBack_UART_Notify:     
*                       The pointer of the UART call back function.
*
* Return:        
*               QL_RET_OK indicates success; otherwise failure.      
*               QL_RET_ERR_PARAM indicates uart_receive_call_back error. 
*               QL_RET_ERR_BAUDRATE indicates baudrate not support. 
*               QL_RET_ERR_UART_BUSY indicates uart init error. 
*               QL_RET_ERR_INVALID_PORT indicates port not support.    
*
*****************************************************************/
s32 Ql_UART_Open( Enum_SerialPort port,u32 baudrate,CallBack_UART_Notify uart_receive_call_back);

调用方法

Ql_UART_Open(UART_PORT0,9600,MainUartRecvCallback);

主串口为uart0,串口数据接收官方给出以回调函数的方式:

static void MainUartRecvCallback(u32 event, void* dataPtr, u32 dataLen)
{
	if((USART_EVENT_RX_TIMEOUT == event) || (USART_EVENT_RECEIVE_COMPLETE == event))
	{
	    Ql_UART_Write(UART_PORT0,(u8 *)dataPtr,dataLen);
	}
}

参数event:接收完成或接收超时

/****** USART Event *****/
#define USART_EVENT_RECEIVE_COMPLETE    (1UL << 1)  ///< Receive completed
#define USART_EVENT_RX_TIMEOUT          (1UL << 6)  ///< Receive character timeout (optional)

dataPtr:接收到的数据
dataLen:数据的长度

打开调试信息
#define DEBUG_ENABLE 1

#define DEBUG_ENABLE 1
#if DEBUG_ENABLE > 0
#define DEBUG_PORT  PORT_DBG_LOG
#define APP_DEBUG(FORMAT,...)	Ql_DebugPort_Trace((Enum_SerialPort)(DEBUG_PORT),FORMAT, ##__VA_ARGS__)
#else
#define APP_DEBUG(FORMAT,...) 
#endif

其他api介绍:
禁止休眠,系统默认是开启休眠

Ql_SleepDisable();//一定要禁止休眠,不然20s之后就会进入休眠状态

设置IO电平口

/*****************************************************************
* Function:     Ql_GPIO_SetLevel
*
* Description:
*               This function sets the level of the specified GPIO.
*
* Parameters:
*               pinName:
*                   Pin name, one value of Enum_PinName.
*               level:
*                   The initial level of GPIO, one value of Enum_PinLevel.
* Return:
*               QL_RET_OK, this function succeeds.
*               QL_RET_ERR_PARAM, the input GPIO is invalid.
*               QL_RET_ERR_ALREADYUNSUBCRIBE, can't operate,Maybe the GPIO not Init.
*****************************************************************/
s32 Ql_GPIO_SetLevel(Enum_PinName pinName, Enum_PinLevel level);

Ql_GPIO_SetLevel(gpioPin, PINLEVEL_HIGH);

3、实例分析

SDK及实例代码
链接:https://pan.baidu.com/s/1NcFoi0TiKax7owLHQkbQ6g
提取码:temz

在Makefile文件中取消注释GLOBAL_EXPORT_FLAG += EXAMPLE_GPIO
其他注释掉其他的实例:
打开example_gpio.c
在这里插入图片描述

在这里插入图片描述

#ifdef __EXAMPLE_GPIO__
#include <stdio.h>
#include <string.h>
#include "cmsis_os2.h"
#include "ril.h"
#include "ql_gpio.h"
#include "ql_power.h"
#include "ql_dbg.h"

#define DEBUG_ENABLE 1
#if DEBUG_ENABLE > 0
#define DEBUG_PORT  PORT_DBG_LOG
#define APP_DEBUG(FORMAT,...)	Ql_DebugPort_Trace((Enum_SerialPort)(DEBUG_PORT),FORMAT, ##__VA_ARGS__)
#else
#define APP_DEBUG(FORMAT,...) 
#endif
Enum_PinName gpioPin = PINNAME_GPIO1;

static void MainUartRecvCallback(u32 event, void* dataPtr, u32 dataLen)
{
	if((USART_EVENT_RX_TIMEOUT == event) || (USART_EVENT_RECEIVE_COMPLETE == event))
	{
	    Ql_UART_Write(UART_PORT0,(u8 *)dataPtr,dataLen);
	}
}
void proc_main_task(void)
{
	s32 ret;

 	Ql_UART_Open(UART_PORT0,9600,MainUartRecvCallback);
	APP_DEBUG("<-- QuecOpen: GPIO Example -->\r\n");
	Ql_GPIO_Init(gpioPin, PINDIRECTION_OUT, PINLEVEL_LOW, PINPULLSEL_PULLUP);
	Ql_SleepDisable();//一定要禁止休眠,不然20s之后就会进入休眠状态

    while (1)
    {
		osDelay(500);
		Ql_GPIO_SetLevel(gpioPin, PINLEVEL_LOW);
		APP_DEBUG("gpioPin -----PINLEVEL_LOW\r\n",ret);
		osDelay(500);
		Ql_GPIO_SetLevel(gpioPin, PINLEVEL_HIGH);
		APP_DEBUG("gpioPin -----PINLEVEL_HIGH\r\n",ret);
	}

}

#endif

实验结果:看到LED 灯每 1s闪烁一次
链接:
https://live.csdn.net/v/342947
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/202508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud原理】OpenFeign之FeignClient动态代理生成原理

大家好&#xff0c;前面我已经剖析了OpenFeign的动态代理生成原理和Ribbon的运行原理&#xff0c;这篇文章来继续剖析SpringCloud组件原理&#xff0c;来看一看OpenFeign是如何基于Ribbon来实现负载均衡的&#xff0c;两组件是如何协同工作的。 一、Feign动态代理调用实现rpc流…

并查集带权并查集

定义 : 并查集 : 一种数据结构&#xff0c;用于处理一些不相交集合的合并与查询问题&#xff1b; 例题 : 如 : 有n种元素&#xff0c;分属于不同的n个集合&#xff1b; 有两种操作 : 1.给出两个元素的亲属关系&#xff0c;合并两个集合(x与y是亲戚&#xff0c;亲戚的亲戚…

基于Java SSM框架+Vue实现实现大学生企业推荐网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现大学生企业推荐网站演示 摘要 大学生企业推荐系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和学生、企业三部分&#xff0c;管理员主要功能包括&#xff1a;首页、个人中心、学生管理、企业管理、招聘信息管理、个人简历…

【探索Linux】—— 强大的命令行工具 P.18(进程信号 —— 信号捕捉 | 信号处理 | sigaction() )

阅读导航 引言一、信号捕捉1. 内核实现信号捕捉过程2. sigaction() 函数&#xff08;1&#xff09;函数原型&#xff08;2&#xff09;参数说明&#xff08;3&#xff09;返回值&#xff08;4&#xff09;函数使用 二、可重入函数与不可重入函数1. 可重入函数条件2. 不可重入函…

MQTT发布_订阅架构(Pub_Sub)

MQTT发布/订阅架构&#xff08;Pub/Sub&#xff09; 本文中&#xff0c;将深入研究Pub/Sub架构&#xff0c;在软件架构中一个消息模式&#xff0c;它支持不同组件或系统之间以解耦的方式进行通信。 在前一片文章[MQTT简介]http://t.csdnimg.cn/6lNeZ中&#xff0c;对MQTT有一个…

Gitee-PicGo-Typora

Gitee-PicGo-Typora 问题引出 问题1&#xff1a;根据相关法律法规和政策&#xff0c;您的部分文件因存在敏感信息而无法显示 就在昨晚&#xff0c; 我在记笔记的时候&#xff0c;发现之前配置的七牛云图床出了问题&#xff1a; 1、根据相关法律法规和政策&#xff0c;您的部…

RabbitMQ消息模型之Routing-Topic

Routing Topic Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key的时候使用通配符&#xff01;这种模型Routingkey一般都是由一个或多个单词组成&#xff0c;多个单词之间以”…

Mysql安全之基础合规

一、背景 某次某平台进行安全性符合型评估时&#xff0c;列出了数据库相关安全选项&#xff0c;本文特对此记录&#xff0c;以供备忘参考。 二、安全配置 2.1、数据库系统登录时的用户进行身份标识和鉴别&#xff1b; 1&#xff09;对登录Mysql系统用户的密码复杂度是否有要…

Stream API练习题

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 考虑到Stream API在实际…

2023-11-30 事业-代号s-资质-香港公司-带注册服务商-盛森国际-分析

摘要: 基于合法避税及其他因素&#xff0c;考虑在香港注册公司. 选择的服务商为盛森国际&#xff0c;对该公司做彻底的背调和服务分析, 以规避潜在的风险. 并分析该公司在香港代注册的服务商中的行业竞争力, 以保证其服务的质量及成本的控制. 盛森国际官方资料: 官网: 注册香港…

Nuxt.js:下一代Web开发框架的革命性力量

文章目录 一、Nuxt.js简介二、Nuxt.js的特点1. 集成Vue.js和Node.js2. 自动代码分割和优化3. 服务端渲染&#xff08;SSR&#xff09;4. 强大的路由管理5. 丰富的插件系统 三、Nuxt.js的优势1. 提高开发效率2. 降低维护成本3. 提高用户体验 四、Nuxt.js在实际应用中的案例1. 电…

YOLOv5独家原创改进:自研独家创新FT_Conv,卷积高效结合傅里叶分数阶变换

💡💡💡本文自研创新改进:卷积如何有效地和频域结合,引入分数阶傅里叶变换(FrFT)和分数阶Gabor变换(FrGT),最终创新到YOLOv5。 使用方法:1)直接替换原来的C2f;2)放在backbone SPPF后使用;等 推荐指数:五星 在道路缺陷检测任务中,原始map为0.8,FT_Conv为0.82 …

linux用户组_创建_删除_修改

2.2.2 用户组 每个用户都有一个用户组&#xff0c;系统可以对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同&#xff0c;如Linux下的用户属于与它同名的用户组&#xff0c;这个用户组在创建用户时同时创建。 组的类型&#xff1a; 基本组&#x…

基于STM32+定时器中断和定时器外部时钟(标准库函数讲解)

前言 本篇博客主要学习了解定时器的标准库函数&#xff0c;以及定时器中断进行LED灯的反转&#xff0c;还有定时器外部时钟获取脉冲计数功能。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联系我删除。 本篇博客主要是对通用定时器来讲解&#xff0c;功能适中比较常…

判断数组中每个元素是否为负数 numpy.signbit()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中每个元素是否为负数 numpy.signbit() [太阳]选择题 请问以下代码中最后输出结果是&#xff1f; import numpy as np a np.array([-1, 0, 1]) print("【显示】a ",a) pr…

智能优化算法应用:基于帝国主义竞争算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于帝国主义竞争算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于帝国主义竞争算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.帝国主义竞争算法4.实验参数设定5.算…

运维知识点-PostgreSql

PostgreSql 下载安装地址安装组件数据目录设置superuser密码 端口安装语言安装完成&#xff0c;是否安装Stack Builder 下载 https://www.postgresql.org/download/windows/ https://get.enterprisedb.com/postgresql/postgresql-13.7-1-windows-x64.exe 我下载的 13.7 安装…

【MySQL数据库】SQL查询语句总结

目录 一、查询数据 1.1 基本查询语句 1.2 表单查询 1.3 WHERE子句 1.3.1 IN关键字查询 1.3.2 Between查询范围 1.3.3 Like匹配查询 1.3.4 AND多条件查询&#xff08;等同于&&&#xff09; 1.3.5 OR多条件查询&#xff08;等同于||&#xff09; 1.3.6 LIMIT子句 1.3.7 对…

基于Java SSM框架实现母婴儿用品网站系统项目【项目源码+论文说明】

基于java的SSM框架实现母婴儿用品网站系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 母婴用品网站&#xff0c;主要的模块包括管理员&#xff1b;主页、个人中心、用户管理、商品分…

架构图是什么,该怎么制作?

架构图是指可视化展示软件、系统、应用程序、网络等各种体系结构的一类图表或图形&#xff0c;它能够形象地展示体系结构中各个组成部分和它们之间的关系。 架构图的类型 架构图的种类比较多&#xff0c;逐一列举不太合适&#xff0c;这里只列举一些常见的架构图类型&#…