Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
[第三期空气质量分析仪]第一周作业
发布于 2019-10-16 21:21:04 浏览:1181
订阅该版
写一份作业真是一波三折啊!先来说说任务把,一共是四个分别是: 任务 1:BSP 跑起来 任务 2:完成报警模块 任务 3:完成按键模块 任务 4:完成温湿度传感器的驱动 前面几个多看文档完成起来还是挺简单的,下面我简述下我是怎么完成的。 **任务一:**BSP 跑起来 这个任务对着文档完成就可顺利的跑起来了,[_下载:STM32 系列 BSP 制作教程_](https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B.md) **任务二:**完成报警模块 这个任务完成起来比较简单,主要是要熟悉[_rt-thread_](https://github.com/RT-Thread/rt-thread)[_PIN设备_](https://www.rt-thread.org/document/site/programming-manual/device/pin/pin/)的操作 任务实现: #include "led.h" #define LED0_RED GET_PIN(C, 7) void led_init(void) { rt_pin_write (LED0_RED , PIN_HIGH); //LED置高点位(防止启动时闪烁) rt_pin_mode (LED0_RED ,PIN_MODE_OUTPUT);//设置LED模式 } void led_on(void) { rt_pin_write(LED0_RED, PIN_LOW); //点亮 led } void led_off(void) { rt_pin_write(LED0_RED, PIN_HIGH); //熄灭 led } void led_blink(rt_int32_t led_delay,rt_bool_t Start_stop) { while(Start_stop) { led_on(); rt_thread_mdelay(led_delay); led_off(); rt_thread_mdelay(led_delay); } } **任务三:**完成按键模块 这个任务和报警模块操作方法无太大区别,重点是“绑定引脚中断回调函数”和编写“回调函数”,最重要的一点别忘记开“引脚中断” 任务的实现: #include "key.h" #include "led.h" #define KEY1_PIN GET_PIN(C, 11) //注册PIN void key_cb(void *args) //键盘中断回调函数 { rt_thread_mdelay(50); //消抖处理 if (rt_pin_read(KEY1_PIN) == PIN_LOW)//判断当前键盘状态 led_on (); //开LED else led_off (); //关LED } void key_init(void) { rt_pin_mode(KEY1_PIN,PIN_MODE_INPUT_PULLUP); //设置键盘引脚模式 rt_pin_attach_irq(KEY1_PIN,PIN_IRQ_MODE_RISING_FALLING, key_cb,RT_NULL);//绑定引脚中断回调函数 rt_pin_irq_enable(KEY1_PIN,PIN_IRQ_ENABLE); //启动引脚中断 } **任务四:**完成温湿度传感器的驱动 刚开开始的时候这个困扰了我好几天,困扰我的是刚开始的时候不太了解[_ENV_](https://realthread.cowtransfer.com/s/c31c839364fa40)这个工具,走了很多弯路,跟我一样的刚初学的人如果看到的 话,我想跟你说:“ENV很重要,ENV很重要,ENV很重要”,要入门rt-thread一定要了解这个工具。 前几个任务除了第一个任务以外它两个任务没用到这个工具为什么也能用呢,我相信很多跟我一样还是刚从裸奔转过来的初学者都有这个疑问,我 刚开始的错误操作是这样的**:“直接把驱动拷贝到指定的文件夹,在用MDK5把驱动添加进系统里,结果发现一堆代码显示错误,一直死循环找错误。”** 后来一直在网上找帖子,在群里问问题,花了不少时间后找到了一篇相关的帖子,忘记是什么名字了。才知道ENV工具的重要性,前期基本不会使用这 个软件。下面是我实现任务四的过程: 1:按照任务一的方法进入软件并输入命令“menuconfig”回车 ![1.png](/uploads/201910/16/211704igegqguedegeqlyj.png) 2:选择适合自己的驱动,我使用的传感器是SHT20 ![2.png](/uploads/201910/16/211642ts9ohi5xwp1vzaii.png)![4.png](/uploads/201910/16/211644rzq1q9iikr2rg6zj.png) 3:“ENV软件不要关”,打开drv_gpio.c文件查看对应的IIC通讯脚 ![P16@GW`0P@CB3@LJ%})3YU4.png](/uploads/201910/16/211650vdz7aaujpu4wzpaa.png) 4:配置IIC通讯引脚 ![4.png](/uploads/201910/16/211644rzq1q9iikr2rg6zj.png) 5:保存,退出到命令窗口并输入命令:“pkgs --update”回车 ![5.png](/uploads/201910/16/211645rfqjxzyn9x2jj332.png) 6:等待下来完成后输入命令“scons --target=mdk5”(我已经下载过驱动,下载窗口有些差异) ![6.png](/uploads/201910/16/211647c6p69b6p6bvkphht.png) 7:完成后关闭窗口(关闭软件) ![7.png](/uploads/201910/16/211648yfd9ogovrd6qfcde.png) 任务的实现: #include
#include
#include
#include "sht20.h" #include
#define SHT20_I2C_BUS_NAME "i2c1" /* 传感器连接的I2C总线设备名称 */ #include "led.h" #include "key.h" int main(void) { float sht20_temperature_Date = 0.00; //温度缓存 float sht20_humidity_Date = 0.00; //湿度缓存 char str[2]; //字符缓存 sht20_device_t dev; //定义SHT20结构体 dev = sht20_init(SHT20_I2C_BUS_NAME);//初始化SHT20 if(dev!= NULL) //判断是否初始化成功并打印输出 rt_kprintf("sht20初始化成功
"); else rt_kprintf("sht20初始化失败
"); while (1) { rt_thread_mdelay(1000); //延时(刷新) sht20_temperature_Date = sht20_read_temperature(dev); //读取温度 sht20_humidity_Date = sht20_read_humidity(dev); //读取湿度 if((sht20_temperature_Date != 0.0)&&(sht20_humidity_Date != 0.0))//判断温湿度是否读取成功 { /*小提示 rt_kprintf是没有打印浮点输出功能的*/ rt_kprintf("sht20读取温湿度成功:
"); sprintf(str, "%.2f", sht20_temperature_Date); //把浮点数转成字符打印字符缓存器(保留两位小数) rt_kprintf("sht20温度: %s°C
",str); //打印字符缓存器的温度数据 sprintf(str, "%.2f", sht20_humidity_Date); //把浮点数转成字符打印字符缓存器(保留两位小数) rt_kprintf("sht20湿度: %s%
",str); //打印字符缓存器的温度数据 }else{ rt_kprintf("sht20读取温湿度失败:
"); } } } 完成后打印输出效果: ![MHQ6WK1F]FYGY~UC~[8SW53.png](/uploads/201910/16/211649qvm1iiv571miipg5.png) ![3.png](https://oss-club.rt-thread.org/uploads/201910/16/211643ndtzv1a464ahhqu0.png)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1.2k
关于作者
yangdehuan
这家伙很懒,什么也没写!
提问
6
回答
15
被采纳
1
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部