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

基于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灯日志。

有人说网络彩票被禁止的原因是彩民买了彩票却没有出票,你怎么看?跟你玩个游戏石头剪刀布,你赢了给你五百万,你输了给我两块,但是你要先出,这种生意有多暴利你无法想象当年这么干的平台比比皆是。因为彩票从概率上来说,如果我卖空票,基本上是一定赚钱,不前国乒教练秦志戬正式复出,接受媒体采访时,他自曝复出原因,对此你怎么看?重情义的秦指导为了马龙,毅然决然的决心复出,说明两人的感情很深啊。据悉这次秦志戬复出的主要原因,还是源于原北京乒羽中心主任张雷的邀请。据悉,张雷教练是马龙的恩师之一,马龙从小就是跟对墙抽羽毛球时,羽毛球乱飞是什么原因呢?作为专业运动员回答你,对墙击球需要注意以下几点,才可将球击打平稳到最多次数1。击球点离墙面距离不可太近,当你离的太近,击球后,球头还没有转正就已经碰到墙面,当球头不正时触碰到墙面,如果一旦发生经济危机,什么行业承受风险能力相对较强?现金为王中的现金具体指什么?如果发生经济危机,什么行业承受风险能力较强?有些人说房地产股市,但问题是在经济下行压力较大的挤泡沫去杠杆的背景下,房地产和股市只要存在泡沫,就会被挤干净。不要指望经济形势不好,房价唐筛检查低风险,医生让做无创,有必要吗?为什么?唐筛检查低风险,医生让做无创,有必要吗?为什么?可做可不做,还得看自身情况。唐筛检查主要是一种筛查手段,通过抽取孕妇的血清,检测母体血清中甲型胎儿蛋白人类绒毛膜促性腺激素和游离雌三想买个华为手机或者是买个苹果手机?两个有没有可比性?咋选?要搁以前,那华为跟苹果的新机频率几乎一致,可能还有得比。但今年iPhone13都发布了,而Mate50还影子都没有,所以单纯从产品角度来说,华为就输了。目前华为最好的手机不是P50两个星期如何瘦8斤?两个星期瘦八斤,早上按食谱吃,早上喝杯豆浆,吃一片燕麦包,中餐吃八分饱,晚餐青菜或水果任选一样,这样体重就容易减重,我以前就是这样减下来的谢谢邀请!两个星期瘦8斤?那你就望着自己生篮球位置1,2,3,4,5号是怎么排的?1号位组织后卫,也叫控球后卫,负责组织进攻。一般开球后接球运过半场的就是组织后卫了,过半场之后还要组织进攻,看哪个队友比较适合得分,在适当的时机把球传到他手中。2号位得分后卫,也叫iPhone7Plus手机平放的时候两个扬声器都有声音,立起来的时候有一个不响是怎么回事?iPhone7代以上机型包括iPhone7P从外放上做了改变,增加高音单元也就是听筒和底部外放喇叭一起发声,从而增加音质效果,可以实测苹果7代以上机器不只是音量变大,音质也有很大的寝室连续坏了三台电脑的主板南桥,最有可能是什么原因?说电压不稳的都是不懂开关电源,纯粹臆测。开关电源就是起到稳压作用,即使电压不稳,烧坏电源也很难烧坏南桥,更不可能烧坏几块主板南桥。可能的原因,主要还应该从USB设备查起其次怀疑是否国家队的34号位,阿布的位置是否会被张镇麟和曾凡博取代?国家队的34号位,阿布的位置是否会被张镇麟和曾凡博取代?阿不都沙拉这次在国家队和日本队27日的比赛中,可用糟糕表现也不为过,虽然上场时间不长,在有一次上空篮竞没有将球送入篮筐,但阿
又一邻国乱了,俄西线被全面封锁,认清事实不灭北约没有安宁事实上,除了备受关注的乌克兰东部地区战事,更精彩的博弈在战场外,俄罗斯的多个邻国也开始出现了异常迹象。先前是摩尔多瓦和俄罗斯摩擦加剧,摩尔多瓦指责俄罗斯在其国内进行政变行动,乌克兰张捷火了,王福重却怂了张捷和王福重到底是哪方面的人物,他们是著名的经济学专家。王福重王福重岀身农民,当他飞黄腾达的时候,却如此蔑视和侮辱农民。人们常说吃水不忘挖井人,养儿才报父母恩,有的人吃着农民种植的3月15日收评美国银行黑天鹅或一闪而!国内将迎政策利好蜜月期近期A股出现了诡异的锯齿状走势,基本上都是涨一天跌一天,震荡非常的剧烈。不过从技术形态上看,本周前三天的走势其实都没有改变市场的运行方向。按照旌阳近期分析,大盘在上周五跌破20日线水清鱼跃,小时候的圭塘河回来了加强生态文明建设,今年我省将推进城市黑臭水体治理等八大标志性战役3月10日,长沙圭塘河两岸优美的环境。全媒体见习记者王普摄3月10日,长沙圭塘河羽燕湖段,刘科指导来自江西南昌的学生事实证明,42岁的张柏芝,已经活成了一个笑话近日,54岁王菲与43岁谢霆锋,时隔23年再次高调牵手,公然示爱。当然少不了好事的记者,第一时间跑到了张柏芝面前,采访张柏芝什么看法,她尬笑着回应,完全给他们一百分的祝福。这位堪称箭牌家居以品质为准绳,从用户出发,打造一流服务体系随着人们消费观念的不断提升,家居体验式消费时代已经到来。在新消费主义的推动之下,消费者逐渐成长为更积极的参与者,不断激发着消费模式的创新,推动着消费理念的升级。这一新形势下,家居行明确了!多地4月和5月电动车迎来52新管理,涉及罚款和扣车您在阅读前请点击上面的关注二字,后续会为您提供更多有价值的相关内容,感谢您的支持。电动车虽然在新国标之后,已经历经了三四年的规范治理,但作为拥有庞大体量的交通工具,涉及人群广范围大北向资金净买入7。55亿元,结束此前连续4日净卖出,逆市增持光伏设备行业近12亿元(名单)3月14日,A股三大指数集体收跌,沪指探底回升收跌0。72,深证成指收跌0。77,创业板指收跌0。59。沪深两市成交额约9324亿元,较上一交易日增量约931亿元。个股整体呈现跌多樱花摄影技巧5个,拿去用吧,摄影新手学起来我也没有你想得那么光鲜,我一直在碰壁,在各种事情上跌倒,可是,我绝对没有逃避过,我全都接受,这就是我唯一的骄傲。虽然辛苦,我还是会选择那种滚烫的人生。如果用一句话,来试着总结的你的最新官网发布!2023年研究生考试各大高校分数线(二)接着上一次统计,更新2023年硕士研究生招生考试的各大高校分数线,会持续更新,各位考生及家长及时收藏,关注我随时了解考研各项动态工作!让我们评论区祝贺!!!1。四川大学图片来源于四湖南60岁富太沉迷打牌,一年输上亿,丈夫我已仁至义尽2019年,60岁的姚莉被丈夫和儿子赶出家门,享受了20多年豪门太太的生活,却只能租到一间10平米的出租屋。她不顾丈夫和儿子的感受,为什么这么做?幸福的前半生,人生的转折点姚莉是家