[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设备相关推荐

  1. RT-Thread记录(十三、I/O 设备模型之PIN设备)

    讲完UART设备之后,我们已经熟悉RT-Thread I/O 设备模型了,回头看看基本的 PIN 设备. 目录 前言 一.PIN 设备模型解析 1.1 初识 GPIO 操作函数 1.2 PIN 设备框 ...

  2. bluez 设置绑定pin码_「RT-Thread笔记」IO设备模型及PIN设备

    RTT内核对象--设备 RT-Thread有多种内核对象,其中设备device就是其中一种. 内核继承关系图如下: 设备继承关系图如下: device对象对应的结构体如下: 其中,设备类型type有如 ...

  3. linux设备驱动第一篇:设备驱动程序简介

    为什么80%的码农都做不了架构师?>>>    首先,我们知道驱动是内核的一部分,那么驱动在内核中到底扮演了什么角色呢? 设备驱动程序在内核中的角色:他们是一个个独立的"黑 ...

  4. Linux设备驱动篇——[I2C设备驱动-1]

    Linux 设备驱动篇之I2c设备驱动 fulinux 一.I2C驱动体系 虽然I2C硬件体系结构和协议都很容易理解,但是Linux I2C驱动体系结构却有相当的复杂度,它主要由3部分组成,即I2C设 ...

  5. 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 ...

  6. 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. ...

  7. RT-Thread Pin设备驱动API应用介绍

    概要 本文主要涉及Pin驱动相关的API接口的简要介绍及使用示例,有兴趣深入了解Pin驱动程序框架可参考:RT-Thread pin设备驱动代码结构剖析 PIN设备的操作方法 应用程序通过RT-Thr ...

  8. RT-Thread学习笔记——PIN 设备

    前言 本文主要学习RT-Thread的设备驱动框架之PIN 设备,这里以及后面更新的博客内容将不会详细介绍I/O 设备模型,当学习PIN 设备以及其他设备需要对I/O 设备模型有所了解,请和我一样刚学 ...

  9. 零基础学Linux内核之设备驱动篇(8)_设备模型

    零基础学Linux内核系列文章目录 前置知识篇 1. 进程 2. 线程 进程间通信篇 1. IPC概述 2. 信号 3. 消息传递 4. 同步 5. 共享内存区 编译相关篇 1. GCC编译 2. 静 ...

最新文章

  1. ue4 4.24启动无响应_UE4项目问题集合
  2. 刚刚,三名中国航天员奔赴太空!其中一位刚参加完博士毕业典礼!
  3. linux自学笔记——RAID级别特性以及软RAID的实现
  4. 微服务小范围发布影响小
  5. Android中如何使控件保持固定宽高比
  6. authenticate总是返回None
  7. =空值返回空值_@ParameterizedTest在@CvsSource中具有空值
  8. Win10系统添加 Win10 LTSC2019闹钟
  9. 论坛用的两个函数:积分计算排名和楼层函数
  10. RocketMQ源码解析-PullConsumer取消息(1)
  11. 最全的TCP面试知识点
  12. java调用一个外部url_java 从程序内部调用外部url/接口
  13. wget 下载百度网盘文件
  14. SQL Server - 无法将数据库从SINGLE_USER模式切换回MULTI_USER模式(Error 5064)
  15. win7怎么重置计算机,win7系统怎么重置网络?win7重置网络到初始状态的方法
  16. 190115_Vue下路由History mode导致页面无法渲染的原因
  17. 微信小程序JS 字符串string与arraybuffer的相互转换
  18. 别人都是笑起来很好看,但是你却不一样,你是看起来很好笑。
  19. 多台服务器连一个显示器如何切换,多台主机一台显示器怎么弄
  20. 谷歌插件开发ajax请求,谷歌扩展程序设置ajax请求容许跨域(极少人知道的解决方案)...

热门文章

  1. Three.js 手机端 touch用法
  2. 2007软件英雄大会,小弟我会众英雄
  3. JAVA抽奖系统设计任务书_JAVA用户抽奖系统设计(幸运大转盘作业)
  4. css拖动音乐进度条,用css3绘制酷狗音乐闪烁的进度条
  5. 不想活了,想找个时间去烧炭,起一卦看看效果
  6. 华为VR Glass 6DoF 评测
  7. 技术人员如何成为技术领域专家
  8. 认证服务器管理系统,微服务系统之认证管理详解
  9. BUI树形控件TreeList的异步加载
  10. C++键盘输入创建链表