前面我们学习了RTT的UART设备的使用,不得不说真的超级给力呀,不到100行秒杀任何MCU最原始的串口编程模式,不得不感叹RTT发展如此强大,文章链接:

RT-Thread UART设备驱动框架初体验(中断方式接收带\r\n的数据)

今天来点简单的吧!RT-Thread PIN设备!学习一个新东西,我个人主张带着需求去学习,而不是漫无目的的去学,有了需求驱动,并且是一个努力付出就可以拥有的成果,那么这还不容易嘛!

我们接下来将基于小熊派开发平台进行实践。

1、实践需求

1.1 硬件配置

LED、两个按键

1.2 软件需求

当按下按键1,LED点亮,当按下按键2,LED熄灭

这个需求相当简单,入门级别,通过这个案例,也让我们重新认识到RTT开发的便捷性!先别扯淡,往下干就完了!我们将基于RT-Thread Studio来构建。

2、开始实践

2.1、RT-Thread Studio工程创建与基础配置

(1)创建RT-Thread项目

(2)配置项目

配置注意

需要添加项目名称和项目的位置,这里我用的是自定义路径,而不是默认的缺省位置。

RT-Thread选择v4.0.2,这个版本包含基本的组件,而选择nano的话则不包含。

厂商目前只支持ST,相信后面会支持更多。

基于芯片,可以选择更多支持RTT的STM32芯片,由于我用的是小熊派,所以需要基于STM32L4系列,芯片是STM32L431RCTx。

控制台串口,小熊派是UART1发送和接收分别是PA9和PA10,这里非常人性化,调试串口直接就可以在配置的时候预置了。

调试器选择ST-Link,SWD方式下载。

2.2、代码编写

工程配置完成后,默认生成的是一个实现LED翻转的例程,其实这个基础例程就是使用了PIN设备,我们按照需求简单修改一下,后续再进行分析。

2.2.1 打开原理图,找LED和按键的管脚

2.2.2 根据需求编写代码

写代码之前有必要了解下需求范围内的PIN设备的使用流程:

  • 第一、获取引脚编号 GET_PIN(port, pin)
port:比如你要获取GPIOA的第5个管脚,那么:port = Apin  = 5代码就这么写:GET_PIN(A,5)通常我们直接一个宏:#define LED_PIN GET_PIN(A,5)
  • 第二、设置引脚模式 void rt_pin_mode(rt_base_t pin, rt_base_t mode);
参数 描述
pin 引脚编号
mode 引脚工作模式

引脚编号就是通过GET_PIN获取的,而工作模式在RTT的pin.h里定义,根据我们的需求进行选择:

#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_write(rt_base_t pin, rt_base_t value);读取引脚电平 int rt_pin_read(rt_base_t pin);

设置引脚电平 void rt_pin_write(rt_base_t pin, rt_base_t value);

参数 描述
pin 引脚编号
value 电平逻辑值,可取 2 种宏定义值之一:PIN_LOW 低电平,PIN_HIGH 高电平

读取引脚电平 void rt_pin_read(rt_base_t pin);

参数 描述
pin 引脚编号
返回值 --
PIN_LOW 低电平
PIN_HIGH 高电平

了解了基本的使用后,我们可以开始根据需求编写应用程序。

根据需求编写应用程序

/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date           Author       Notes * 2019-09-09     RT-Thread    first version */

#include #include #include #define DBG_TAG "main"#define DBG_LVL DBG_LOG#include #define LED0_PIN    GET_PIN(C, 13)#define KEY0_PIN    GET_PIN(B, 2)#define KEY1_PIN    GET_PIN(B, 3)int main(void){    /*配置LED管脚为输出*/    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);    /*配置按键0为上拉输入*/    rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT_PULLUP);    /*配置按键1为上拉输入*/    rt_pin_mode(KEY1_PIN, PIN_MODE_INPUT_PULLUP);    /*配置LED管脚默认输出低电平*/    rt_pin_write(LED0_PIN, 0);    while (1)    {        /*读取KEY0按键,如果为低电平则点亮LED灯*/        if (rt_pin_read(KEY0_PIN) == PIN_LOW)        {            rt_pin_write(LED0_PIN, PIN_HIGH);        }        /*读取KEY1按键,如果为低电平则熄灭LED灯*/        if (rt_pin_read(KEY1_PIN) == PIN_LOW)        {            rt_pin_write(LED0_PIN, PIN_LOW);        }    }    return RT_EOK;}

2.2.3 编译程序

2.2.4 程序下载到小熊派,然后进行测试

测试通过!

PIN设备还支持配置其它模式,比如可编程控制中断等,后续根据需求单独列出来,相比stm32CubeMX+Keil MDK,RT-Thread Studio更具优势,节省很多配置的时间,让开发者可以更专注于应用,后期我们将会更加深入的去分析实现过程,我们不但要知其然,而且要知其所以然,这才是我们的终极目的!

往期精彩

你真的会使用思维导图吗?四个方面阐释思维导图的运用

C语言#和##连接符在项目中的应用(漂亮)

超轻量级网红软件定时器multi_timer(51+stm32双平台实战)

变量命名还在谷歌百度翻译?OUT啦!分享一个我日常工作中常用的变量命名神器!

若觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

c++获取串口设备名称_RTThread PIN设备学习笔记相关推荐

  1. Qt 串口获取串口设备名称

    前言` 最近在用QT弄一个串口上位机,以前用QT做的串口工具在选择串口的时候只能通过串口号选择,在有多个串口设备的时候不是很方便,所以这次就想着搞成选择的时候可以显示串口设备名称的方式. 1.实现效果 ...

  2. 上海lin上海linux培训ux,lin教材ux字符驱动设备-学习笔记(最新实例).pdf

    - 1 - 字符驱动开发学习笔记 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过 这些函数使得Windows 的设备操作犹如文件一般.在应用程序看来,硬件设备只 是一个设备文件, ...

  3. 获取串口设备名称 获取设备管理器里的硬件名称 转

    简介:在串口通信的程序中,如果PC上同时连接有多个串口,那么从应用程序里打开串口时,就很难知道是哪一个串口,这时候就必须要通过设备管理器去查看串口名称,这份代码就是解决这个问题,调用系统api,读取串 ...

  4. RT_thread的IIC设备学习笔记

    目录 前言 1 IIC简介 2 RTthread IIC总线设备API 2.1 IIC设备相关结构体 2.2 rtthread的I2C初始化API 2.3 发现IIC总线设备API 2.4 IIC通信 ...

  5. [linux驱动]linux块设备学习笔记(二)

    1,gendisk结构体 在linux内核中,使用gendisk结构体来表示一个实际的磁盘设备的抽象,结构体定义如下所示: [cpp] view plaincopy struct gendisk { ...

  6. 嵌入式存储设备学习笔记

    更多内容可关注微信公众号 ##各种非易失性存储设备 ###ROM/PROM/EPROM/EEPROM 在NOR/NAND flash出现之前,主要的非易失性存储设备是EPROM和EEPROM. ROM ...

  7. 找一个网页,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间、名称和地点——python学习笔记

    1. 题目: 找一个网页,例如https://www.python.org/events/python-events/,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议 ...

  8. 关于Intel pin的学习笔记(一)——KNOB< TYPE>构造函数的解释

    关于KnobOutputFile()函数的解释 对于KnobOutputFile()这个函数我在网上很少能找到对他的详细解释,今天好好的研究了一下,顺便记录下来. 首先对这个函数的第一映像是,为啥文件 ...

  9. python pandas修改列名,Python_Pandas学习笔记02:DataFrame获取列名和修改列名

    Python_Pandas学习笔记02:DataFrame获取列名和修改列名 Python_Pandas学习笔记02:DataFrame获取列名和修改列名 一.参考资料 [1].?Pandas获取列名 ...

最新文章

  1. UVA 10570 Meeting with Aliens
  2. 装服务器显示磁盘脱机,服务器磁盘处于脱机
  3. Python dict() 函数
  4. Unity shader入门之数据类型
  5. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨3.55%
  6. 2017《Java技术》预备作业 杨阳
  7. CSP学习之ASN.1编码(一)
  8. 内核调试工具 — kdump crash
  9. Julia : 用@async提升循环性能
  10. linux shell 数字雨,cmd命令如何实现数字雨
  11. 手机端如何维持登录状态
  12. Vray材质学习笔记08——陶瓷材质
  13. 前端开发中的脚手架是什么意思
  14. java.sql.SQLException: 无效的列类型
  15. C语言关键字 restrict(一)
  16. 【干货】你常用的5种地图数据汇总对比,值得收藏~
  17. 计算机网络-以太网,局域网,城域网,广域网,互联网,因特网,万维网的区分
  18. 中天视听王 未来软件园
  19. 使用Keras进行单模型多标签分类
  20. 自用笔记-Qt5.14.2开发Android环境搭建

热门文章

  1. Python pandas使用
  2. 百度网盘svip下载时显示下载请求中无下载速度
  3. 贺利坚老师汇编课程73笔记:键盘输入的处理过程
  4. MySQL命令窗口下中文显示乱码的解决过程
  5. 更新T1表,要添加一个条件A,但T1表没有A字段
  6. asp.net项目发布打包研究
  7. 一个程序员一月的开销统计分析、(附上PC端和移动端android源码)
  8. 查询数据库里所有表名,字段名的语句
  9. 基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)
  10. asp.net 上传大文件控件