范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

基于RTThread嵌入式物联网应用开发第二章GPIO操作实验!

  第二章 GPIO操作实验
  本章主要内容为通过使用RT-Thread中的PIN设备接口函数对开发板上板载的LED灯进行操作。主要实现功能为点亮LED灯让其规律闪烁。1.1 硬件介绍
  在IOT开发板上已经为我们集成焊接了一个三色的RGB灯,具体位置如下图所示:
  RGB灯图示
  在官方给的原理图资料中我们也可以找到LED模块的电路图。如电路图所示,我们可以发现3个LED灯外接了一个3V的直流电源接口,后面的引脚接入到了单片机的引脚,所以我只需要将单片机的引脚输出改为低电平输出即可点亮LED灯。
  LED灯电路原理图
  LED灯单片机引脚图
  1.2 软件设计1.2.1 单色灯点亮测试a) 功能实现思路分析
  从电路原理图中我们可以发现,LED_G对应了单片机的39号引脚(GPIO PE8)。若不想查看原理图,也可以查看官方给出的IO引脚分配表。分配表中也给出了LED_G对应的GPIO引脚为PE8。
  所以我们只需要利用RT-Thread为我们提供的通用GPIO驱动来将PE8设置为低电平输出即可点亮LED灯。
  我们需要使用的API函数主要有以下两个,功能分别为设置引脚模式与设置引脚电平。在stuido创建的工程下,有一个drivers的目录,此目录是RT-Thread为用户封装好的一些常用驱动库。此章节需要使用的为gpio驱动库。关于驱动库的使用方式以及介绍我们可以前往RT-Thread官方文档中进行查看,此部分内容为设备和驱动下的PIN设备。
  在基于传统HAL库开发中,我们总的开发流程可总结为以下步骤:1.对GPIO口进行配置;2.GPIO口初始化;3.设置GPIO口工作模式;4.设置GPIO口引脚电平状态。使用RT-Thread进行开发也可总结为以下几个步骤:1.定义引脚编号映射;2.设置引脚工作模式;3.设置引脚电平状态。基于此流程我们可以对软件进行设计。总流程图如图所示:
  软件设计流程图
  在RT-Thread中获取引脚编号的方式有三种,一种是利用API函数的方式、一种是利用宏定义的方式还有一种是查看驱动文件来获取引脚编号。此历程采用查看驱动文件来获取引脚编号,其他方式的使用场景请自行前往官方文档查看。
  查看驱动文件来获取引脚编号具体实现步骤如下:
  1. 打开drivers目录下的drv_gpio.c文件。打开过后我们可以看到已经给我们定义了非常多的相关宏定义以及结构体
  2. 找到static const struct pin_index pins[] 结构体,此结构体中为我们设置了单片机与操作系统引脚编号的映射关系。
  3. 找寻自己需要的端口号。以__STM32_PIN(72, E, 8) 为例,E为GPIO口名称,即GPIOE。8为引脚号,即PE8。则72就是对应的引脚编号。所以PE8端口在RT-Thread中对应的引脚编号为72。我们在使用过程中只需要定义一个宏定义值为72即可对应单片机的PE8端口。
  在我们得到了引脚编号后,即可进行代码编写,调用想用的API函数进行GPIO口的工作模式设定以及电平工作状态设定。b) 设置引脚模式
  引脚在使用前需要先设置好其工作模式是输入模式还是输出模式,需要调用的API函数接口如下:void rt_pin_mode(rt_base_t pin, rt_base_t mode);
  具体参数详解如下表:
  参数
  描述
  pin
  引脚编号
  mode
  引脚工作模式
  引脚编号即为我们在上一步中在驱动文件中查询到的引脚编号,比如PE8为72,我们只需要传入72即可。引脚的工作模式目前RT-Thread支持的宏定义为5中宏定义。具体解释如下表所示:
  参数
  描述
  #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
  /* 开漏输出  */
  所以参数mode我们只需要传入定义好的宏定义即可。c) 设置引脚电平
  上一步我们设置完了引脚的工作模式为输出模式,这一步我们需要对引脚的电平进行设置,从9.1节中我们可以得到只需要将GPIO引脚设置为低电平即可点亮LED灯。所以我们只需要利用API函数将其设置成为低电平即可完成此功能。
  需要使用的API函数接口如下:void rt_pin_write(rt_base_t pin, rt_base_t value);
  参数讲解如下:
  参数
  描述
  pin
  引脚编号
  value
  电平逻辑值,可取 2 种宏定义值之一:PIN_LOW 低电平,PIN_HIGH 高电平d) 具体代码实现
  在上一小节中,我们已经将从硬件到使用API函数接口去实现功能做了完整的分析。下面我们将开始着手编写代码,进行实际操作。
  具体实现步骤如下:
  1. 打开我们新建的工程,新建一个led的源文件。
  2. 在源文件中导入需要的头文件#include,#include;  定义led线程句柄、定义相关宏定义的值;
  3. 编写led线程入口函数,入口函数里实现在上一小节中梳理的引脚设置模式。
  4. 编译、下载运行。/*导入头文件*/ #include  #include  /*定义线程句柄与GPIO引脚宏定义*/ static rt_thread_t LEDG_Thread = RT_NULL; #define LEDG 72 #define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 512 #define THREAD_TIMESLICE 5 /*编写入口函数*/ static void LEDG_Thread_Entry(void *parmas) {     /*设置引脚模式*/     rt_pin_mode(LEDG, PIN_MODE_OUTPUT);     /*设置引脚电平状态*/     rt_pin_write(LEDG, PIN_LOW);     rt_kprintf("ledg on. "); } int led_G(void) {     /*创建线程*/ LEDG_Thread=rt_thread_create("led_thread",LEDG_Thread_Entry,RT_NULL,THREAD_STACK_SIZE,THREAD_PRIORITY,THREAD_TIMESLICE);     if (LEDG_Thread == RT_NULL)     {         rt_kprintf("create led thread failed. ");         return -1;     }     /*启动线程*/     rt_thread_startup(LEDG_Thread);     return 0; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(led_G, led_G);
  5. 打开终端命令行执行led_G命令,查看结果。我们可以发现在终端控制台中会打印一段话ledg on.且在开发板上会发现LED灯部分绿色的灯亮起。如下图所示:
  实验结果图1.2.2 呼吸灯应用a) 功能实现思路分析
  我们在上一小节中对开发板中单色RGB灯进行了点亮操作,从电路图中我们可以发现还有另外两只RGB灯可供使用。在此小节我们将实现三色灯交替闪烁的功能。
  对于电路原理图以及单片机引脚接口都可以在原理图中以及引脚分配表中查询到,LED_B对应了PE9,LED_G对应了PE8,LED_R对应了PE7。在代码实现部分我们的步骤也分为以下三步:1.定义引脚编号映射;2.设置引脚工作模式;3.设置引脚电平状态。在设置引脚电平状态时我们需要对另外两个RGB灯进行关闭,确保在一个时间段能开启一个RGB灯,依次循环即可实现呼吸灯的效果。具体流程图如下所示:
  软件流程图b) 具体代码实现
  我们需要使用的API接口函数和查看单片机引脚编号的方法已经在上小节中做了介绍,这里就不在赘述了。我们编写功能代码时,按照流程图的思路进行编写即可。
  1. 新建一个源文件,文件名自行更改。
  2. 导入相关的头文件。
  3. 创建RGB线程,并编写线程入口函数,入口函数中实现我们需要的功能。
  4. 编译、下载、运行。
  具体代码实现如下:/*导入头文件*/ #include  #include  /*定义线程句柄与GPIO引脚宏定义*/ static rt_thread_t RGB_Thread = RT_NULL; #define LEDB 73 #define LEDG 72 #define LEDR 71 #define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 512 #define THREAD_TIMESLICE 5 /*编写入口函数*/ static void RGB_Thread_Entry(void *parmas) {     /*设置引脚模式*/     rt_pin_mode(LEDB, PIN_MODE_OUTPUT);     rt_pin_mode(LEDG, PIN_MODE_OUTPUT);     rt_pin_mode(LEDR, PIN_MODE_OUTPUT);     /*设置引脚电平状态1.先打开LEDB 其他关闭 然后延迟500ms打开LEDG其他关闭延迟500ms,打开LEDR其他关闭*/     while (1)     {         rt_pin_write(LEDB, PIN_LOW);         rt_pin_write(LEDG, PIN_HIGH);         rt_pin_write(LEDR, PIN_HIGH);         rt_thread_mdelay(500);         rt_kprintf("LEDB on. ");         rt_pin_write(LEDB, PIN_HIGH);         rt_pin_write(LEDG, PIN_LOW);         rt_pin_write(LEDR, PIN_HIGH);         rt_thread_mdelay(500);         rt_kprintf("LEDG on. ");         rt_pin_write(LEDB, PIN_HIGH);         rt_pin_write(LEDG, PIN_HIGH);         rt_pin_write(LEDR, PIN_LOW);         rt_thread_mdelay(500);         rt_kprintf("LEDR on. ");     } } int RGB_Demo(void) {     RGB_Thread = rt_thread_create("RGB-Thread",RGB_Thread_Entry,RT_NULL,THREAD_STACK_SIZE,THREAD_PRIORITY,THREAD_TIMESLICE);     if (RGB_Thread == RT_NULL)     {         rt_kprintf("create rgb thread failed ");         return -1;     }     rt_thread_startup(RGB_Thread);     return 0; } MSH_CMD_EXPORT(RGB_Demo,RGB_Demo);
  我们把代码编译、下载到开发板中,打开终端命令行,输入RGB_Demo命令执行此线程代码。可以发现实验结果如下。
  1. RGB灯部分红、蓝、绿交替闪烁。
  2. 在终端命令行中循环打印led灯日志。

男篮赢球后!FIBA正式官宣庆祝,周琦提出希望,杜锋这次大局已定如果说赢下伊朗队不足以支撑男篮进入世界杯正赛的话,那么我们再赢下巴林。这一阶段取得两连胜之后,我们终于拿到了一个门票。也就是说,篮球世界杯,我们回来了。那么赢下巴林队之后,有哪些值火箭虽败犹荣!格林单节15分连续6场20小马丁3次暴扣点燃全场虽然火箭一度将分差缩小至个位数,但是快船深厚的轮转还是压制住了火箭,而火箭在拼尽全力之后也只能接受失利的结果。北京时间2022年11月15日,休斯敦火箭106122负于洛杉矶快船。斯诺克爆大冷!3大争冠热门相继出局,丁俊晖连获3大喜讯冲击冠军北京时间2022年11月15日,斯诺克英锦赛结束前三个比赛日的争夺,16强决出了12个席位,6位种子选手爆冷出局,包括世界冠军尼尔罗伯逊约翰希金斯和马克威廉姆斯。丁俊晖晋级16强,6154!勇士又捡漏24岁神枪火箭马刺都错过,年薪51万太超值一记记精准三分球命中,还连续送出妙传,安东尼兰姆在勇士获得了新生。北京时间11月15日,勇士132比95大胜马刺,兰姆贡献17分4篮板4助攻,三分球6投5中。这位24岁的落选秀,成库里成队史首人!科尔计划被打乱,两人离队成关键,管理层想太多几乎没有人能想到,贵为卫冕冠军,勇士赛季初会打得如此挣扎,他们表现差并非是主力核心的状态问题,相反,库里开赛至今可以说是打出了个人最佳状态,维金斯则是加量不加价,降薪之后,他反而数火箭惨败老板气坏!格林成唯一安慰,戈登趁早交易,小波特真毒瘤火箭今天好不容易回到主场,结果106122惨遭快船三杀,整场比赛被对手压着打,裁判也多次吹罚休城犯规,现场观看比赛的火箭老板费尔蒂塔脸色铁青,比赛没结束就离开了座位。比赛的唯一亮点湖人正式爆发内讧!詹姆斯指责佩林卡言而无信,巅峰期被白白浪费湖人队是本赛季NBA当中最让人失望的一支球队,开局到现在他们打出了让人非常失望的战绩,篮网队以及勇士还有76人,虽然开局阶段打得也都很差劲,但是随着比赛的进行,他们看起来已经有所好新赛季令人瞠目结舌的六大球星,利拉德华丽转身,保罗黯然销魂祸兮福所倚,福兮祸所伏。这句出自老子道德经的经典语录同样适用于NBA舞台。在变化莫测的舞台上,从来没有一成不变的事物。从跟腱断裂重返巅峰的杜兰特,再到从三双王沦为饮水机管理员的威少狂胜37分,爆砍363,普尔兑现价值,克莱该交易了5胜8负,排名西部倒数第3,你会相信这是卫冕冠军勇士队打出的战绩?没办法,不相信也得相信,短短的5个月时间,卫冕冠军就已经沦落到现如今的地步!勇士表现为什么会这么低迷呢?2个原因!火箭不敌快船火箭防守千疮百孔塞拉斯还能做些什么北京时间11月15日,火箭在主场以106122不敌快船,遭遇了3连败,本赛季面对快船的3场比赛,全部遭遇失利,目前仅2胜12负,是全联盟战绩最差的球队。本场比赛,杰伦格林带伤出战,1分进账!托弗毁了29号秀的NBA首秀,火箭真的可以放弃培养托弗了火箭惨败快船让比赛在第四节有6分多钟的垃圾时间,这也让球队今年的29号秀泰泰华盛顿迎来了NBA首秀。要知道,在对战快船比赛之前,火箭是刚刚把泰泰跟哈金斯从发展联盟给召回,因为从上周
手机存储已满完美解决华为手机如何升级内存本人到店亲测前几年用的苹果手机苹果手机就是因为充电慢截图不方便后来就换了华为手机Mate30华为手机mate30内存不足内存升级存储空间用了两年手机处理器速度没有问题就是老是提示存储已不足10寒气逼人!手机市场销量暴跌,国内市场谁第一?随着时间来到2023年1月下旬,关于去年全年智能手机市场的销售情况报告也正在陆续出现,就在几日前,小编刚刚给大家分享了2022年第四季度及全年全球智能手机出货量报告。就在今日,小伙人人都在聊的云原生数据库Serverless到底是什么?云计算的迅猛发展推动了数据库的变革,云原生数据库成为当前数据库发展的重要方向之一。云原生数据库与Serverless的结合,则进一步加速了云原生数据库的演进。虽然作为热门话题,但仍人工智能颠覆农业JohnDeere推出全新农田管理体验约翰迪尔公司生产了多种人工智能产品,其中最受欢迎的产品是智能农业机械。它们使用机器学习,计算机视觉等技术,帮助农民提高农田生产率,降低农田破坏率,同时减少农药和化肥的使用。约翰迪尔过完年想买新机,预算3000元旗舰芯片安卓机推荐天南地北大拜年预算3000元封顶,处理器芯片包括骁龙8Gen2骁龙8天玑9000,这些芯片属于最新一代旗舰芯片或上一代旗舰芯片。下面一起来看一下有哪些机型可选。本文只涉及基础硬件,关于华为P60系列,你想知道的都在这里了经历2022年大盘遇冷,手机销量创有史以来最大降幅后,2023年手机厂商之间的竞争愈发白热化。为了抢占更多的市场份额,春节之后将会迎来多款新机发布,其中就包括华为最新的P系列机型华蔚来接棒魅族,做三零手机还有戏吗?这些年,我们看惯了手机厂商进军汽车行业的消息,例如苹果华为小米,有的还在用研发之中,有的已联合传统车企推出产品。的确,新能源汽车仍在起步阶段,即使是没有基础的造车新势力,也有机会成夜间手机摄影,苹果iphone14PM与三星FOLD4,谁更出色?趁着初五晚上去龙庆峡看冰灯,用iphone14PM和三星FLOD4同时来进行夜景的拍摄,发现夜景下,依旧是苹果最能打。对于手机拍摄党而言,掏出来就能拍,而且拍的还说的过去这一条,对从热带走出来的人类何以适应寒冷人类已经使用技术来适应寒冷。图片来源对话杂志科技日报实习记者张佳欣人类是起源于热带的物种。在进化史的大部分时间里,人类也都生活在温暖的气候中。已知最古老的人类谱系(古人类)化石来自深圳市高质量发展大会龙华分会场企业代表谈落户龙华1月29日,深圳市高质量发展大会暨2023年首批重大项目开工仪式召开。在龙华区分会场,中石油深圳新能源研究院常务副院长王杭州和海克斯康制造智能技术(青岛)有限公司华南事业群副总裁滕四箭齐发的容桂,有四个新气象值得关注阅镇观击鼓催征,容桂新春开局捷报频传。1月29日,佛山市2023年一季度重大项目集中动工活动顺德分会场在容桂举行。这一天,容桂天悦集团东灶集团邦克厨卫总部开建,有利建筑摘地,四箭齐发迎开