Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
玩溜GD32303E-EVAL BSP系列(三)----读取温度湿度传感器数据
发布于 2018-05-02 10:28:07 浏览:2923
订阅该版
[tocm] * 本帖最后由 misonyo 于 2019-1-25 14:39 编辑 * ## 1. 准备 ## 本章节将介绍使用RT-Thread提供的GPIO驱动框架获取温湿度传感器的数据,并在shell显示出来。 本文使用的温湿度传感器型号是SHT10,供电电压范围为2.4-5.5V, 建议供电电压为3.3V。 SHT10模块各引脚说明如下: ![sht10-pin.png](/uploads/201805/02/101753vtyc3un3vgkmjydj.png) SHT10模块和GD32303E-EVAL开发板连接情况如下: | GPS引脚 | GD32303E-EVAL开发板引脚 | | ----- | --------| | GND | GND | | DATA | PD5 | | SCK | PD6 | | VDD | 3.3V | 开发板供电及连接情况: * 供电方式:开发板使用 Mini USB 接口或者 DC-005 连接器提供 5V 电源。 * 下载程序:下载程序到开发板需要一套 JLink 或者使用 GD-Link 工具。 * 串口连接:使用 USB 转串口线连接开发板的串口0对应的 PA9 和 PA10 引脚,并连接电脑。 ## 2. 运行测试代码 ## 打开 MDK 或者 IAR 工程文件,添加附件的测试代码文件到工程,如下图所示: ![sht10-add.png](/uploads/201805/02/101753x1uu1u4offobiofe.png) 然后再 main 函数里调用测试代码的`app_init()`函数: ``` #include
#include
extern rt_err_t app_init(void); int main(void) { /* user app entry */ if (RT_EOK != app_init()) { rt_kprintf("app operate failed!
"); } return 0; } ``` `app_init()`函数会创建一个 sht10 的线程,线程会每秒钟获取一次温湿度传感器的数据,并通过串口0打印出来。 ** 运行结果 ** 在电脑端使用 putty 打开对应端口,波特率配置为115200,编译代码并下载至开发板,然后按 reset 重启开发板,putty 会显示从温湿度传感器获取到的温度和湿度信息。 ``` \ | / - RT - Thread Operating System / | \ 3.0.3 build Apr 27 2018 2006 - 2018 Copyright by rt-thread team msh />Temp=26, Humi=47 Temp=26, Humi=47 Temp=26, Humi=47 Temp=26, Humi=47 Temp=26, Humi=47 ``` ## 3. 如何使用RT-Thread GPIO驱动获取温湿度传感器数据? ## ### 3.1 使用哪一个PIN脚? ### GD32303E-EVAL BSP 默认已经使能了 GPIO 驱动,每个 PIN 脚都有唯一的编号,确定了使用 PIN 脚的编号后就可以调用 GPIO 驱动提供的各种接口操作PIN脚。`drv_gpio.h` 文件里定义的 pins[]数组定义了各个引脚对应的编号,部分定义如下图所示: ``` static const struct pin_index pins[] = { __GD32_PIN_DEFAULT, __GD32_PIN(1, E, 2), __GD32_PIN(2, E, 3), __GD32_PIN(3, E, 4), __GD32_PIN(4, E, 5), __GD32_PIN(5, E, 6), ... ... } ``` GD32_PIN(5, E, 6)表示PE6引脚对应的编号是5,本次温湿度传感器使用 PD5和 PD6引脚,查看这张表可知对应编号分别为119和122。 `sht10.c`中 pin 脚相关宏定义如下: ``` /* 查看drv_gpio.h的pin_index pins[]获取通用GPIO引脚对应的编号 */ #define SHT10_DATA_PIN 119 /* 对应PD5 */ #define SHT10_SCK_PIN 122 /* 对应PD6 */ ``` ### 3.2 配置PIN脚模式 ### 使用PIN脚之前需要先配置PIN脚模式,调用`rt_pin_mode()` 函数配置,此函数会配置PIN脚模式并初始化PIN脚,PIN脚模式使用如下宏定义: ``` #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 ``` 对温湿度传感器使用到的PIN脚进行配置的源代码如下: ``` void SHT10_Config(void) { rt_pin_mode(SHT10_DATA_PIN,PIN_MODE_OUTPUT); rt_pin_mode(SHT10_SCK_PIN, PIN_MODE_OUTPUT); SHT10_ConReset(); //复位通讯 } ``` ### 3.3 读取PIN脚状态 ### 调用`rt_pin_read()`可读取对应PIN脚的状态,源码如下: ``` #define SHT10_DATA_R() rt_pin_read(SHT10_DATA_PIN) ``` ### 3.4 设置PIN脚状态 ### 调用`rt_pin_write()`可设置PIN脚输出电平,设置值使用如下宏定义: ``` #define PIN_LOW 0x00 /* 低电平 */ #define PIN_HIGH 0x01 /* 高电平 */ ``` 修改温湿度传感器对应PIN脚状态源码如下: ``` #define SHT10_DATA_H() rt_pin_write(SHT10_DATA_PIN,PIN_HIGH) #define SHT10_DATA_L() rt_pin_write(SHT10_DATA_PIN,PIN_LOW) #define SHT10_SCK_H() rt_pin_write(SHT10_SCK_PIN,PIN_HIGH) #define SHT10_SCK_L() rt_pin_write(SHT10_SCK_PIN,PIN_LOW) ``` 本章节大致讲解了RT-Thread GPIO设备接口的使用,更多源码请参考示例代码。GPIO设备驱动更多介绍请参考RT-Thread 通用GPIO设备应用笔记,若要对工程进行配置请参考ENV工具的使用。 ## 4. 参考 ## * [ENV工具](https://www.rt-thread.org/document/site/rtthread-development-guide/rtthread-tool-manual/env/env-user-manual/) * [GD32303E-EVAL](http://gd32mcu.21ic.com/site) * [通用GPIO设备应用笔记](https://www.rt-thread.org/document/site/rtthread-application-note/driver/gpio/an0002-rtthread-driver-gpio/) * [玩溜GD32303E-EVAL BSP系列(一)------基本系统跑起来~](https://www.rt-thread.org/qa/thread-7027-1-1.html) * [玩溜GD32303E-EVAL BSP系列(二)----读取GPS传感器数据](https://www.rt-thread.org/qa/thread-7033-1-1.html) * [SHT10测试代码参考源码链接](https://github.com/lhl8023/wechat/blob/749c0dc3f4baa41458bb6c5f8b1af9192f01d5c3/Tenlink/Software/NB_IOT/NB_COL/BSP/SHT10.c) * [GD32303E-EVAL BSP源码及资料百度云盘链接](https://pan.baidu.com/s/1uHza1tiVUnmg8ixMzZLAFA)
查看更多
1
个回答
默认排序
按发布时间排序
misonyo
2018-05-02
这家伙很懒,什么也没写!
> 在markdown模式下显示乱码了~~
撰写答案
登录
注册新账号
关注者
0
被浏览
2.9k
关于作者
misonyo
这家伙很懒,什么也没写!
提问
5
回答
180
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
rt-thread使用cherryusb实现虚拟串口
2
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
3
《原子操作:程序世界里的“最小魔法单位”解析》
4
《C++设计模式:重塑游戏角色系统类结构的秘籍》
5
rt-thread官方usb驱动之虚拟串口
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
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
rt_mq_消息队列_msg_queue
keil_MDK
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
6
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部