【rtthread设备】第一篇:pin设备
[rtthread设备]系列文章
【rtthread设备】第零篇:IO设备
【rtthread设备】第一篇:pin设备
【rtthread设备】第二篇:rtc设备
【rtthread设备】第三篇:adc设备
【rtthread设备】第五篇:hwtimer设备
【rtthread设备】第六篇:i2c设备
【rtthread设备】第七篇:spi设备
【rtthread设备】第八篇:看门狗设备
文章目录
- 一、pin设备概念
- 二、pin设备api
- 三、pin设备示例
一、pin设备概念
rtthread根据引脚编号访问硬件的引脚和设置外部中断。
二、pin设备api
rtthread根据编号访问硬件的引脚,在stm32中通过宏GET_PIN(port,pin)获取引脚编号,之后可以
- 设置引脚模式
- 读写引脚
- 设置引脚中断回调
- 使/失能引脚中断
//获取pin编号
GET_PIN(port, pin)//设置引脚模式
/*
pin:引脚编号
mode:模式,可取#define PIN_MODE_OUTPUT 0x00 /* 输 出 */#define PIN_MODE_INPUT 0x01 /* 输 入 */#define PIN_MODE_INPUT_PULLUP 0x02 /* 上 拉 输 入 */#define PIN_MODE_INPUT_PULLDOWN 0x03 /* 下 拉 输 入 */#define PIN_MODE_OUTPUT_OD 0x04 /* 开 漏 输 出 */
*/
void rt_pin_mode(rt_base_t pin, rt_base_t mode);//设置引脚电平
/*
pin:引脚编号
value:设置电平值,可取PIN_LOW、PIN_HIGH
*/
void rt_pin_write(rt_base_t pin, rt_base_t value);//读取引脚电平
/*
pin:引脚编号
*/
int rt_pin_read(rt_base_t pin);//引脚绑定中断回调
/*
pin:引脚编号
mode:中断触发模式,可取#define PIN_IRQ_MODE_RISING 0x00 /* 上 升 沿 触 发 */#define PIN_IRQ_MODE_FALLING 0x01 /* 下 降 沿 触 发 */#define PIN_IRQ_MODE_RISING_FALLING 0x02 /* 边 沿 触 发 (上 升 沿 和 下 降 沿 都 触 发 ) */#define PIN_IRQ_MODE_HIGH_LEVEL 0x03 /* 高 电 平 触 发 */#define PIN_IRQ_MODE_LOW_LEVEL 0x04 /* 低 电 平 触 发 */
hdr:中断回调函数
args:中断回调函数参数
*/
rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode,void (*hdr)(void *args), void *args);
//使能中断引脚
/*
pin:引脚编号
enabled:使/失能,可取PIN_IRQ_ENABLE、PIN_IRQ_DISABLE
*/
rt_err_t rt_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled);//引脚脱离中断
/*
pin:引脚编号
*/
rt_err_t rt_pin_detach_irq(rt_int32_t pin);
三、pin设备示例
/** Copyright (c) 2006-2018, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2018-08-15 misonyo first implementation.*/
/** 程序清单:这是一个 PIN 设备使用例程* 例程导出了 pin_beep_sample 命令到控制终端* 命令调用格式:pin_beep_sample* 程序功能:通过按键控制蜂鸣器对应引脚的电平状态控制蜂鸣器
*/#include <rtthread.h>
#include <rtdevice.h>/* 引脚编号,通过查看驱动文件drv_gpio.c确定 */
#ifndef BEEP_PIN_NUM#define BEEP_PIN_NUM 35 /* PB0 */
#endif
#ifndef KEY0_PIN_NUM#define KEY0_PIN_NUM 55 /* PD8 */
#endif
#ifndef KEY1_PIN_NUM#define KEY1_PIN_NUM 56 /* PD9 */
#endifvoid beep_on(void *args)
{rt_kprintf("turn on beep!\n");rt_pin_write(BEEP_PIN_NUM, PIN_HIGH);
}void beep_off(void *args)
{rt_kprintf("turn off beep!\n");rt_pin_write(BEEP_PIN_NUM, PIN_LOW);
}static void pin_beep_sample(void)
{/* 蜂鸣器引脚为输出模式 */rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT);/* 默认低电平 */rt_pin_write(BEEP_PIN_NUM, PIN_LOW);/* 按键0引脚为输入模式 */rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP);/* 绑定中断,上升沿模式,回调函数名为beep_on */rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL);/* 使能中断 */rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE);/* 按键1引脚为输入模式 */rt_pin_mode(KEY1_PIN_NUM, PIN_MODE_INPUT_PULLUP);/* 绑定中断,上升沿模式,回调函数名为beep_off */rt_pin_attach_irq(KEY1_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_off, RT_NULL);/* 使能中断 */rt_pin_irq_enable(KEY1_PIN_NUM, PIN_IRQ_ENABLE);
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(pin_beep_sample, pin beep sample);
【rtthread设备】第一篇:pin设备相关推荐
- RT-Thread记录(十三、I/O 设备模型之PIN设备)
讲完UART设备之后,我们已经熟悉RT-Thread I/O 设备模型了,回头看看基本的 PIN 设备. 目录 前言 一.PIN 设备模型解析 1.1 初识 GPIO 操作函数 1.2 PIN 设备框 ...
- bluez 设置绑定pin码_「RT-Thread笔记」IO设备模型及PIN设备
RTT内核对象--设备 RT-Thread有多种内核对象,其中设备device就是其中一种. 内核继承关系图如下: 设备继承关系图如下: device对象对应的结构体如下: 其中,设备类型type有如 ...
- linux设备驱动第一篇:设备驱动程序简介
为什么80%的码农都做不了架构师?>>> 首先,我们知道驱动是内核的一部分,那么驱动在内核中到底扮演了什么角色呢? 设备驱动程序在内核中的角色:他们是一个个独立的"黑 ...
- Linux设备驱动篇——[I2C设备驱动-1]
Linux 设备驱动篇之I2c设备驱动 fulinux 一.I2C驱动体系 虽然I2C硬件体系结构和协议都很容易理解,但是Linux I2C驱动体系结构却有相当的复杂度,它主要由3部分组成,即I2C设 ...
- IOT-OS之RT-Thread(七)--- I/O设备模型框架与PIN设备对象管理
文章目录 一.I/O设备模型 1.1 I/O设备模型框架 1.2 I/O设备对象描述 1.3 I/O设备对象接口函数 二.PIN设备管理示例 2.1 PIN设备驱动框架层 2.2 PIN设备驱动层 2 ...
- 2.1 rtthread pin设备详解
目录 1.PIN设备说明 2.PIN设备的初始化及注册 3.PIN设备的操作 3.1 获取管脚编号的实现 3.1.1使用API 3.1.2使用宏定义 3.1.3查看驱动文件 3.2 设置引脚模式 3. ...
- RT-Thread Pin设备驱动API应用介绍
概要 本文主要涉及Pin驱动相关的API接口的简要介绍及使用示例,有兴趣深入了解Pin驱动程序框架可参考:RT-Thread pin设备驱动代码结构剖析 PIN设备的操作方法 应用程序通过RT-Thr ...
- RT-Thread学习笔记——PIN 设备
前言 本文主要学习RT-Thread的设备驱动框架之PIN 设备,这里以及后面更新的博客内容将不会详细介绍I/O 设备模型,当学习PIN 设备以及其他设备需要对I/O 设备模型有所了解,请和我一样刚学 ...
- 零基础学Linux内核之设备驱动篇(8)_设备模型
零基础学Linux内核系列文章目录 前置知识篇 1. 进程 2. 线程 进程间通信篇 1. IPC概述 2. 信号 3. 消息传递 4. 同步 5. 共享内存区 编译相关篇 1. GCC编译 2. 静 ...
最新文章
- ue4 4.24启动无响应_UE4项目问题集合
- 刚刚,三名中国航天员奔赴太空!其中一位刚参加完博士毕业典礼!
- linux自学笔记——RAID级别特性以及软RAID的实现
- 微服务小范围发布影响小
- Android中如何使控件保持固定宽高比
- authenticate总是返回None
- =空值返回空值_@ParameterizedTest在@CvsSource中具有空值
- Win10系统添加 Win10 LTSC2019闹钟
- 论坛用的两个函数:积分计算排名和楼层函数
- RocketMQ源码解析-PullConsumer取消息(1)
- 最全的TCP面试知识点
- java调用一个外部url_java 从程序内部调用外部url/接口
- wget 下载百度网盘文件
- SQL Server - 无法将数据库从SINGLE_USER模式切换回MULTI_USER模式(Error 5064)
- win7怎么重置计算机,win7系统怎么重置网络?win7重置网络到初始状态的方法
- 190115_Vue下路由History mode导致页面无法渲染的原因
- 微信小程序JS 字符串string与arraybuffer的相互转换
- 别人都是笑起来很好看,但是你却不一样,你是看起来很好笑。
- 多台服务器连一个显示器如何切换,多台主机一台显示器怎么弄
- 谷歌插件开发ajax请求,谷歌扩展程序设置ajax请求容许跨域(极少人知道的解决方案)...