Toggle navigation
首页
(current)
问答
文章
话题
商城
登录
注册
2、RDA8910CSDK二次开发:尝试使用CSDK开发控制GPIO输出
RDA8910
cat1
724UG
csdk
# 目录 [点击这里查看所有博文](https://blog.csdn.net/weixin_44570083/article/details/104285283) 本系列博客基于紫光展锐的`RDA8910 LTE Cat 1` bis芯片平台开发。理论...
# 目录 [点击这里查看所有博文](https://blog.csdn.net/weixin_44570083/article/details/104285283) 本系列博客所诉资料`均来自合宙官方`,并不是本人原创(只有博客是自己写的),csdk只是得到了`口头的允许公开授权`。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,`没有为自己谋取私利的想法`。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。 本系列博客基于紫光展锐的`RDA8910 LTE Cat 1` bis芯片平台开发。理论上适用于合宙的Air720U、Air724U、广和通L610以及安信可的cat-01模块。 先不管支不支持,如果你用的模块是是紫光展锐的RDA8910,那都不妨一试,也许会有意外收获(`也有可能变砖,慎重!!!`)。 我使用的是`Air724UG`开发板,如果在其他模块上不能用,那也不要强怼,也许是开发包不兼容吧。这里的代码是没有问题的。例程仅供参考! # 一、前言 拿到CSDK首先搭建好环境,然后就是点灯,点灯才是迈向驱动众多外设的第一步。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519170852461.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) 有人讲你这真是闲的没事干,拿这个好几百软妹币的模块用来点灯,51它不香吗。小伙子还是年轻,听我一句劝。学习是次要的,最重要是要学会装逼,用51还怎么装逼呢,`too young,too simple`。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519171652828.gif) 反正我不管你们说什么我都不听,谁也拦不住我,我就是要点灯,今天这个灯我就点定了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519172500804.png) # 二、编写测试程序 首先我们创建两个任务作为对比 ```c //main函数 int appimg_enter(void *param) { //创建一个任务 osiThreadCreate("GPIO0", GPIO0, NULL, OSI_PRIORITY_NORMAL, 1024, 0); //再创建一个任务 osiThreadCreate("GPIO1", GPIO1, NULL, OSI_PRIORITY_NORMAL, 1024, 0); return 0; } ``` 编写GPIO0的输出程序,实现1s为周期的循环闪烁。 ```c static void GPIO0(void *param) { T_AMOPENAT_GPIO_CFG output_cfg = {0}; output_cfg.mode = OPENAT_GPIO_OUTPUT; //配置输出 output_cfg.param.defaultState = 0; // 默认低电平 BOOL err = 0; // gpio0初始化 err = iot_gpio_config(0, &output_cfg); if (!err) return; while (1) { //将GPIO0设置为高电平 iot_gpio_set(0, 1); //设置为高电平 iot_debug_print("GPIO0 :%d", 1); //线程休眠500ms osiThreadSleep(500); //将GPIO0设置为低电平 iot_gpio_set(0, 0); //设置为高电平 iot_debug_print("GPIO0 :%d", 0); //线程休眠500ms osiThreadSleep(500); } osiThreadExit(); } ``` 编写GPIO1的输出程序,实现2s为周期的循环闪烁。 ```c static void GPIO1(void *param) { T_AMOPENAT_GPIO_CFG output_cfg = {0}; output_cfg.mode = OPENAT_GPIO_OUTPUT; //配置输出 output_cfg.param.defaultState = 0; // 默认低电平 BOOL err = 0; // gpio1初始化 err = iot_gpio_config(1, &output_cfg); if (!err) return; while (1) { //将GPIO1设置为高电平 iot_gpio_set(1, 1); //设置为高电平 iot_debug_print("GPIO1 :%d", 1); //线程休眠1000ms osiThreadSleep(1000); //将GPIO1设置为低电平 iot_gpio_set(1, 0); //设置为高电平 iot_debug_print("GPIO1 :%d", 0); //线程休眠1000ms osiThreadSleep(1000); } osiThreadExit(); } ``` 使用GPIO的驱动需要包含`#include "iot_gpio.h"`头文件,我们这里只用到了两个函数,分别是: >/**初始化gpio *@param port: GPIO编号 *@param cfg: 配置信息 *@return TRUE: 成功 FALSE: 失败 **/ * BOOL `iot_gpio_config`(E_AMOPENAT_GPIO_PORT port,T_AMOPENAT_GPIO_CFG *cfg); > /**设置gpio > *@param port: GPIO编号 > *@param value: 0 or 1 > *@return TRUE: 成功 > FALSE: 失败 **/ * BOOL `iot_gpio_set`(E_AMOPENAT_GPIO_PORT port, UINT8 value); # 三、编译并下载程序 完整代码在这,自取。 ```c /* * @Author: your name * @Date: 2020-05-19 14:05:32 * @LastEditTime: 2020-05-19 17:34:30 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \RDA8910_CSDK\USER\user_main.c */ #include "osi_log.h" #include "osi_api.h" #include "string.h" #include "iot_debug.h" #include "iot_uart.h" #include "iot_os.h" #include "iot_gpio.h" static void GPIO0(void *param) { T_AMOPENAT_GPIO_CFG output_cfg = {0}; output_cfg.mode = OPENAT_GPIO_OUTPUT; //配置输出 output_cfg.param.defaultState = 0; // 默认低电平 BOOL err = 0; // gpio0初始化 err = iot_gpio_config(0, &output_cfg); if (!err) return; while (1) { //将GPIO0设置为高电平 iot_gpio_set(0, 1); //设置为高电平 iot_debug_print("GPIO0 :%d", 1); //线程休眠500ms osiThreadSleep(500); //将GPIO0设置为低电平 iot_gpio_set(0, 0); //设置为高电平 iot_debug_print("GPIO0 :%d", 0); //线程休眠500ms osiThreadSleep(500); } osiThreadExit(); } static void GPIO1(void *param) { T_AMOPENAT_GPIO_CFG output_cfg = {0}; output_cfg.mode = OPENAT_GPIO_OUTPUT; //配置输出 output_cfg.param.defaultState = 0; // 默认低电平 BOOL err = 0; // gpio1初始化 err = iot_gpio_config(1, &output_cfg); if (!err) return; while (1) { //将GPIO1设置为高电平 iot_gpio_set(1, 1); //设置为高电平 iot_debug_print("GPIO1 :%d", 1); //线程休眠1000ms osiThreadSleep(1000); //将GPIO1设置为低电平 iot_gpio_set(1, 0); //设置为高电平 iot_debug_print("GPIO1 :%d", 0); //线程休眠1000ms osiThreadSleep(1000); } osiThreadExit(); } //main函数 int appimg_enter(void *param) { //创建一个任务 osiThreadCreate("GPIO0", GPIO0, NULL, OSI_PRIORITY_NORMAL, 1024, 0); //再创建一个任务 osiThreadCreate("GPIO1", GPIO1, NULL, OSI_PRIORITY_NORMAL, 1024, 0); return 0; } //退出提示 void appimg_exit(void) { OSI_LOGI(0, "application image exit"); } ``` 编译成功 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519174109150.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) 这是GPIO0以1s为周期翻转 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519175704611.gif) 这是GPIO1以2s为周期翻转 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519175636354.gif) 查看输出,分析前六个日志,`GPIO0`的动作是`0->1->0->1`,`GPIO1`的动作是`0->1`,正好GPIO0翻转两次,GPIO1翻转一次,符合设计需求 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020051918013160.png) > 不会下载的[点击这里](https://blog.csdn.net/weixin_44570083/article/details/104285283),进去查看我的`RDA8910 CSDK二次开发入门教程`专题第一篇博文`1、RDA8910CSDK二次开发:环境搭建`里面讲了怎么下载 > 这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束
发表于 2020-05-19 18:12
阅读 ( 1995 )
0 推荐
收藏
你可能感兴趣的文章
13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库
5385 浏览
1.1、RDA8910CSDK二次开发:CSDK极致开发体验
7714 浏览
12、RDA8910CSDK二次开发:c语言中最好用的JSON解析库---cJSON
6017 浏览
11、RDA8910CSDK二次开发:新鲜出炉的MQTT库
7852 浏览
10、RDA8910CSDK二次开发:简易的http通讯库
1804 浏览
9、RDA8910CSDK二次开发:趁热打铁干脆顺带把UDP通讯也给撸了吧
1844 浏览
相关问题
724UG 点亮LED,看下哪里不对,打印正常,LED没反应
1 回答
Air724UG 阿里云MQTT固件升级失败
0 回答
724ug 新推出的开发板,有待cam的接口,想咨询下
0 回答
0 条评论
请先
登录
后评论
陈夏
26 篇文章
作家榜
»
技术销售Delectate
43 文章
陈夏
26 文章
国梁
24 文章
miuser
21 文章
晨旭
20 文章
朱天华
19 文章
金艺
19 文章
杨奉武
18 文章
×
发送私信
发给:
内容:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!