ML307R OpenCPU GPIO使用
一、GPIO使用流程图
二、函数介绍
三、GPIO 点亮LED
四、代码下载地址
一、GPIO使用流程图
这个图是官网找到的,ML307R GPIO引脚电平默认为1.8V,需注意和外部电路的电平匹配,具体可参考《ML307R_硬件设计手册_OpenCPU版本适用.pdf》中的描述。
二、函数介绍
SDK中有一个GPIO常规使用方法的demo程序,GPIO demo提供了GPIO参数设置、输入输出设置、电平设置和中断设置等功能示例程序,可在cm_demo_gpio.c文件中查看
2.1 cm_gpio_cfg_t结构体说明
typedef struct{cm_gpio_mode_e mode;/*!< 不支持*/cm_gpio_direction_e direction;cm_gpio_pull_e pull;
} cm_gpio_cfg_t;
这个主要是看 cm_gpio_direction_e direction;和cm_gpio_pull_e pull
cm_gpio_direction_e direction 是设置GPIO是输入还是输出
/** I/O方向 */
typedef enum{CM_GPIO_DIRECTION_INPUT = 0,CM_GPIO_DIRECTION_OUTPUT,
}cm_gpio_direction_e;
cm_gpio_pull_e pull 是设置上下拉
/** 上/下拉 */
typedef enum{CM_GPIO_PULL_NONE,CM_GPIO_PULL_DOWN,CM_GPIO_PULL_UP,
}cm_gpio_pull_e;
比如我是要控制lED 闪烁,那么可以配置如下
cm_gpio_cfg_t cfg = {0};cfg.direction = CM_GPIO_DIRECTION_OUTPUT; //配置成输出cfg.pull = CM_GPIO_PULL_UP; //上拉
2.2 cm_iomux_set_pin_func 函数介绍
* @brief IOMUX 设置引脚复用功能** @param [in] pin PIN 定义号* @param [in] fun FUN 定义号** @return * = 0 - 成功 \n* = -1 - 失败*/
int32_t cm_iomux_set_pin_func(cm_iomux_pin_e pin, cm_iomux_func_e fun);
此函数第一个参数 cm_iomux_pin_e 是一个枚举,代表的是那个管脚,这个要和GPIO功能的管脚区分,比如我这里使用GPIO4 控制LED灯,可以查看 “ML307R_OpenCPU资源综述”手册 ,LED对应的引脚号是16,所以我们选择CM_IOMUX_PIN_16,而不是对应的GPIO4,这里需要注意。
第二个参数是复用功能 ,从下图可以看到GPIO4 是OpenCPU复用功能1,既选择CM_IOMUX_FUNC_FUNCTION1
2.3 cm_gpio_init介绍
/*** @brief 初始化GPIO* * @param [in] gpio_num GPIO号* @param [in] cfg 配置* * @return * = 0 - 成功 \n* < 0 - 失败, 返回值为错误码* * @details 初始化之前一定要先设置引脚复用*/
int32_t cm_gpio_init(cm_gpio_num_e gpio_num, cm_gpio_cfg_t *cfg);
第一个参数是cm_gpio_num_e 是指对应的GPIO,LED控制是使用了 GPIO4,既选择CM_GPIO_NUM_4
第二个参数 cm_gpio_cfg_t,就是上面配置的方向和上下拉
2.4 cm_gpio_set_level函数介绍
/*** @brief 设置输出电平* * @param [in] gpio_num GPIO号* @param [in] level 输出电平* * @return * = 0 - 成功 \n* < 0 - 失败, 返回值为错误码* * @details More details*/
int32_t cm_gpio_set_level(cm_gpio_num_e gpio_num, cm_gpio_level_e level);
这个函数设置对应GPIO 输出高低电平
第一个参数 cm_gpio_num_e 对应的GPIO
第二个参数cm_gpio_level_e 对应的是设置的电平
/** 高低电平 */
typedef enum{CM_GPIO_LEVEL_LOW,CM_GPIO_LEVEL_HIGH,
}cm_gpio_level_e;
2.5 cm_gpio_get_level函数介绍
/*** @brief 读取输入电平* * @param [in] gpio_num GPIO号* @param [out] level 输入电平* * @return * = 0 - 成功 \n* < 0 - 失败, 返回值为错误码* * @details More details*/
int32_t cm_gpio_get_level(cm_gpio_num_e gpio_num, cm_gpio_level_e *level);
这个函数是读对应的GPIO 电平
第一个参数 cm_gpio_num_e 对应的GPIO
第二个参数cm_gpio_level_e 对应的是读的电平
三、GPIO 点亮LED
osTimerId_t gpio_timer_id = NULL;// LED定时器回调函数
void gpio_TimerCallback(void *argument) {static unsigned char i = 0;if(i == 0){cm_gpio_set_level(CM_GPIO_NUM_4, CM_GPIO_LEVEL_LOW);i = 1;}else{cm_gpio_set_level(CM_GPIO_NUM_4, CM_GPIO_LEVEL_HIGH);i = 0;}
}
void gpio_create_timer(void)
{osTimerAttr_t timer_attr = {.name = "Gpio_Timer",
};gpio_timer_id = osTimerNew(gpio_TimerCallback, osTimerPeriodic, NULL, &timer_attr);osTimerStart(gpio_timer_id, 200);
}void gpio_set_output(void)
{cm_gpio_cfg_t cfg = {0};cfg.direction = CM_GPIO_DIRECTION_OUTPUT;cfg.pull = CM_GPIO_PULL_UP;cm_iomux_set_pin_func(CM_IOMUX_PIN_16, CM_IOMUX_FUNC_FUNCTION1);//初始化之前一定要先设置引脚复用cm_gpio_init(CM_GPIO_NUM_4, &cfg);gpio_create_timer();
}void bsp_gpio_init(void)
{gpio_set_output();}
以上就是控制LED灯闪烁,在定时器里面实现 ,实际上是1S闪烁一次
四、代码下载地址
ML307R OpenCPU GPIO使用 代码
相关文章:

ML307R OpenCPU GPIO使用
一、GPIO使用流程图 二、函数介绍 三、GPIO 点亮LED 四、代码下载地址 一、GPIO使用流程图 这个图是官网找到的,ML307R GPIO引脚电平默认为1.8V,需注意和外部电路的电平匹配,具体可参考《ML307R_硬件设计手册_OpenCPU版本适用.pdf》中的描…...

python基于深度学习的聊天机器人设计
python基于深度学习的聊天机器人设计 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录注册功能 用户在没有登录自己的用户名之前只能浏览本网站的首页,想要使用其他功能都…...
Golang设计模式(四):观察者模式
观察者模式 什么是观察者 观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe…...

huggingface 笔记:查看GPU占用情况
0 准备部分 0.1 创建虚拟数据 import numpy as npfrom datasets import Datasetseq_len, dataset_size 512, 512 dummy_data {"input_ids": np.random.randint(100, 30000, (dataset_size, seq_len)),"labels": np.random.randint(0, 1, (dataset_size…...

JavaSE 学习记录
1. Java 内存 2. this VS super this和super是两个关键字,用于引用当前对象和其父类对象 this 关键字: this 关键字用于引用当前对象,即调用该关键字的方法所属的对象。 主要用途包括: 在类的实例方法中,通过 this …...

HTML与CSS的学习
什么是HTML,CSS? HTML(HyperText Markup Language):超文本标记语言。 超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等 标记语言:由标签构成的语言 >HTML标签都是预定义好的。例如:使用<a>…...

【单片机】STM32F070F6P6 开发指南(一)STM32建立HAL工程
文章目录 一、基础入门二、工程初步建立三、HSE 和 LSE 时钟源设置四、时钟系统(时钟树)配置五、GPIO 功能引脚配置六、配置 Debug 选项七、生成工程源码八、生成工程源码九、用户程序下载 一、基础入门 f0 pack下载: https://www.keil.arm…...

源码编译安装Rsync数据同步
源码编译安装 RPM软件包:rpm -ivh 或者 yum -y install 需要开发编译工具gcc、gcc-c、make等... 源码包----开发工具gcc与make----》可以执行的程序-----》运行安装 •主要优点 –获得软件的最新版,及时修复bug –软件功能可按需选择/定制ÿ…...

SQL Server2019安装步骤教程(图文)_最新教程
一、下载SQL Server2019 1.到微软官网下载SQL Server Developer版本,官网当前的2019版本下载需要注册账号。 不想注册的朋友,可以选择从网盘下载:点击此处直接下载 2.下载之后先解压,解压后执行exe安装程序。打开之后的界面如下…...

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)
📝个人主页:哈__ 期待您的关注 目录 🌼前言 🔒单机环境下防止接口重复提交 📕导入依赖 📂项目结构 🚀创建自定义注解 ✈创建AOP切面 🚗创建Conotroller 💻分布…...
零基础学Java(全170集)
课程概述 本课程旨在全面深化对 Java 语言的核心技术理解,并提升编程实践能力。课程内容涵盖以下关键领域: 掌握Java核心语法,为后续学习打下扎实的基础。熟练运用Java常用的类库与开发工具,提高开发效率与质量。解决面向对象编…...

摄像头应用测试
作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…...
Golang框架HTTP客户端框架zdpgo_resty发送表单请求
核心代码 这里通过字典传递了一个简单的表单数据。 发送的是POST请求。 resp, err : client.R().SetFormData(map[string]string{"username": "jeeva","password": "mypass",}).Post("http://127.0.0.1:3333/login")fmt.P…...

【机器学习300问】99、多通道卷积神经网络在卷积操作时有哪些注意事项?
一、多通道卷积神经网络示例 还是以图像处理为例,如果你的目标不仅是分析灰度图像特性,还打算捕捉RGB彩色图像的特征。如下图,当面对一张66像素的彩色图像时,提及的“3”实际上是指红、绿、蓝三种颜色通道,形象地说&am…...
Rust之函数、单元测试
1、函数 类似于C函数。 1.1、普通函数 在Rust中,函数的定义使用fn关键字,后跟函数名、参数列表、返回类型和函数体。函数体由一系列语句组成,用于执行特定的操作和计算。 函数定义: 使用fn关键字定义函数,函数由函数…...

Linux环境下TensorFlow安装教程
TensorFlow是学习深度学习时常用的Python神经网络框 下面以Mask R-CNN 的环境配置为例: 首先进入官网:www.tensorflow.org TensorFlow安装的总界面: 新建anaconda虚拟环境: conda create -n envtf2 python3.8 (Pyth…...
基于Open3D的点云处理19-模拟生成点云
如果没有设备,怎么得到点云进行学习研究呢,一般通过以下方法: 模型采样+增加噪声:简单方便,但结果比较理想与真实扫描不一致;光线投射:简单方便,可以模仿传感器的一个扫描视角Blensor点云仿真:能够模仿传感器本身的一些噪声,适合激光雷达和tof相机的仿真,传感器较少…...

安全分析[1]之网络协议脆弱性分析
文章目录 威胁网络安全的主要因素计算机网络概述网络体系结构 网络体系结构脆弱性分组交换认证与可追踪性尽力而为匿名与隐私对全球网络基础实施的依赖无尺度网络互联网的级联特性中间盒子 典型网络协议脆弱性IP协议安全性分析IPSec(IP Security)IPv6问题 ICMP协议安…...
数据湖对比(hudi,iceberg,paimon,Delta)
Delta 数据湖 Delta 更新原理 update/delete/merge 实现均基于spark的join功能。 定位 做基于spark做流批一体的数据处理 缺点 本质为批处理。强绑定spark引擎。整体性能相较其他数据湖比较差 hudi 数据湖 hudi 更新原理 通过hudi自定义的主键索引hoodiekey 布隆过…...

基于ssm的蛋糕商城系统java项目jsp项目javaweb
文章目录 蛋糕商城系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码(9.9¥带走) 蛋糕商城系统 一、项目演示 蛋糕商城管理系统 二、项目介绍 系统角色 : 管理员、用户 一,管理员 管理员有…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...