GD32 Colibri-F190R8开发板+DHT11+USART
GD32
7924 人阅读
|
11 人回复
|
2016-05-23

TA的每日心情 | 开心 2018-11-14 16:42 |
|---|
签到天数: 136 天 连续签到: 1 天 [LV.7]常住居民III
进士
- 积分
- 1189

|
本帖最后由 糖悦之果飞 于 2016-5-23 17:27 编辑
1.用GD32 Colibri-F190R8开发板采集温湿度值,传感器采用的是常见的DHT11。把采集到的数据通过串口发送到PC端串口助手。传感器链接电源3.3V,数据脚接PA15。LED6(PB9)作为工作指示灯,不停的闪烁。
2.串口采用USART2,波特率115200.
3.读取DHT11 数据 dht11.c (这个程序是根据原子哥的教学程序改的)- #include "dht11.h"
- #include "delay.h"
- #include "gd32f1x0_gpio.h"
- //////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////
- /*******************************************************************************************************
- ** 函 数 名: DHT11_Mode_IPU
- **------------------------------------------------------------------------------------------------------
- ** 函数原型:
- ** 函数功能: 使DHT11-DATA引脚变为输入模式
- ** 入口参数:
- ** 返 回 值:
- ** 作者:
- ********************************************************************************************************/
- static void DHT11_IO_IN(void)
- {
- GPIO_InitPara GPIO_InitStructure; /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitStructure.GPIO_Pin = DHT11_DQ; /*选择要控制的GPIOA引脚*/
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN; /*设置引脚模式为输入*/
- GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; /*设置引脚速率为50MHz */
- GPIO_Init(GPIOA, &GPIO_InitStructure); /*调用库函数,初始化GPIOA*/
- }
- //IO方向设置
- /*******************************************************************************************************
- ** 函 数 名:
- **------------------------------------------------------------------------------------------------------
- ** 函数原型:
- ** 函数功能: 使DHT11-DATA引脚变为输出模式
- ** 入口参数: NONE
- ** 返 回 值: NONE
- ** 作者:
- ********************************************************************************************************/
- static void DHT11_IO_OUT(void)
- {
- GPIO_InitPara GPIO_InitStructure; /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitStructure.GPIO_Pin = DHT11_DQ; /*选择要控制的GPIOA引脚*/
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT; /*设置引脚模式为输出*/
- GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; /*设置引脚速率为50MHz */
- GPIO_Init(GPIOA, &GPIO_InitStructure); /*调用库函数,初始化GPIOA*/
- }
- //复位DHT11
- void DHT11_Rst(void)
- {
- DHT11_IO_OUT(); //SET OUTPUT
- GPIO_ResetBits(GPIOA, DHT11_DQ);//拉低DQ
- delay_ms(20); //拉低至少18ms
- GPIO_SetBits(GPIOA, DHT11_DQ); //DQ=1
- delay_us(30); //主机拉高20~40us
- }
- //等待DHT11的回应
- //返回1:未检测到DHT11的存在
- //返回0:存在
- uint8_t DHT11_Check(void)
- {
- uint8_t retry=0;
- DHT11_IO_IN();//SET INPUT
- while (GPIO_ReadInputBit(GPIOA, DHT11_DQ)&&retry<100)//DHT11会拉低40~80us
- {
- retry++;
- delay_us(1);
- };
- if(retry>=100)return 1;
- else retry=0;
- while (!GPIO_ReadInputBit(GPIOA, DHT11_DQ)&&retry<100)//DHT11拉低后会再次拉高40~80us
- {
- retry++;
- delay_us(1);
- };
- if(retry>=100)return 1;
- return 0;
- }
- //从DHT11读取一个位
- //返回值:1/0
- uint8_t DHT11_Read_Bit(void)
- {
- uint8_t retry=0;
- while(GPIO_ReadInputBit(GPIOA, DHT11_DQ)&&retry<100)//等待变为低电平
- {
- retry++;
- delay_us(1);
- }
- retry=0;
- while(!GPIO_ReadInputBit(GPIOA, DHT11_DQ)&&retry<100)//等待变高电平
- {
- retry++;
- delay_us(1);
- }
- delay_us(40);//等待40us
- if(GPIO_ReadInputBit(GPIOA, DHT11_DQ))return 1;
- else return 0;
- }
- //从DHT11读取一个字节
- //返回值:读到的数据
- uint8_t DHT11_Read_Byte(void)
- {
- uint8_t i,dat;
- dat=0;
- for (i=0;i<8;i++)
- {
- dat<<=1;
- dat|=DHT11_Read_Bit();
- }
- return dat;
- }
- //从DHT11读取一次数据
- //temp:温度值(范围:0~50°)
- //humi:湿度值(范围:20%~90%)
- //返回值:0,正常;1,读取失败
- uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)
- {
- uint8_t buf[5];
- uint8_t i;
- DHT11_Rst();
- if(DHT11_Check()==0)
- {
- for(i=0;i<5;i++)//读取40位数据
- {
- buf[i]=DHT11_Read_Byte();
- }
- if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
- {
- *humi=buf[0];
- *temp=buf[2];
- }
- }else return 1;
- return 0;
- }
- //初始化DHT11的IO口 DQ 同时检测DHT11的存在
- //返回1:不存在
- //返回0:存在
- uint8_t DHT11_Init(void)
- {
- GPIO_InitPara GPIO_InitStructure; /*定义一个GPIO_InitTypeDef类型的结构体*/
- RCC_AHBPeriphClock_Enable( RCC_AHBPERIPH_GPIOA, ENABLE ); /*开启GPIOA的外设时钟*/
-
- //GPIO_InitPara GPIO_InitStructure; /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitStructure.GPIO_Pin = DHT11_DQ; /*选择要控制的GPIOA引脚*/
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT; /*设置引脚模式为输出*/
- GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; /*设置引脚速率为50MHz */
-
- GPIO_Init(GPIOA, &GPIO_InitStructure); /*调用库函数,初始化GPIOA*/
- GPIO_SetBits(GPIOA, DHT11_DQ); /* 拉高GPIOA3 */
- DHT11_Rst(); //复位DHT11
- return DHT11_Check(); //等待DHT11的回应
-
- }
复制代码 4.由于才接触32位单片机,对串口中断不是很明白,程序还有些BUG,程序仅作参考。同时希望有那位大神,拿去改改,重新分享给大家学习。
|
|
|
|
|
|
|
|
|
TA的每日心情 | 擦汗 2014-2-12 10:49 |
|---|
签到天数: 150 天 连续签到: 1 天 [LV.7]常住居民III
翰林
- 积分
- 10637
|
沙发
zada小明
发表于 2016-5-24 09:15:57
|
只看该作者
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2018-11-14 16:42 |
|---|
签到天数: 136 天 连续签到: 1 天 [LV.7]常住居民III
进士
- 积分
- 1189

|
板凳
chen_hang
发表于 2016-5-27 13:37:33
|
只看该作者
本帖最后由 chen_hang 于 2016-5-27 13:40 编辑
jinglixixi 发表于 2016-5-27 13:07 ![]()
DHT11的上拉电阻是多大,已将它移到LCD5110来显示,但所提供的代码没采到数据,只显示零值。 ...
上拉用的 5.1K 管脚 有没有 接错 我接的是PA15 |
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2018-11-14 16:42 |
|---|
签到天数: 136 天 连续签到: 1 天 [LV.7]常住居民III
进士
- 积分
- 1189

|
地板
chen_hang
发表于 2016-5-27 13:38:25
|
只看该作者
zada小明 发表于 2016-5-24 09:15 ![]()
感谢分享!支持!
一起学习 一起分享 |
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2018-11-14 16:42 |
|---|
签到天数: 136 天 连续签到: 1 天 [LV.7]常住居民III
进士
- 积分
- 1189

|
5#
chen_hang
发表于 2016-5-30 09:40:36
|
只看该作者
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2018-11-19 16:39 |
|---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
超级版主
- 积分
- 14133
|
6#
糖悦之果飞
发表于 2016-5-31 15:15:22
|
只看该作者
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2018-6-22 11:10 |
|---|
签到天数: 49 天 连续签到: 1 天 [LV.5]常住居民I
举人
- 积分
- 552
|
7#
enenge
发表于 2016-8-7 23:07:46
|
只看该作者
糖悦之果飞 发表于 2016-5-31 15:15 ![]()
文章不错,将内容去经验频道一并发一下,可以有双重奖励哟http://jingyan.eeboard.com/ ...
经验频道和论坛不是一个频道啊? |
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2018-11-19 16:39 |
|---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
超级版主
- 积分
- 14133
|
8#
糖悦之果飞
发表于 2016-8-8 17:19:37
|
只看该作者
enenge 发表于 2016-8-7 23:07 ![]()
经验频道和论坛不是一个频道啊?
不是的呢,直接复制过去即可 |
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2018-6-22 11:10 |
|---|
签到天数: 49 天 连续签到: 1 天 [LV.5]常住居民I
举人
- 积分
- 552
|
9#
enenge
发表于 2016-8-9 11:23:18
|
只看该作者
糖悦之果飞 发表于 2016-8-8 17:19 ![]()
不是的呢,直接复制过去即可
好的 |
|
|
|
|
|
|
|
|
TA的每日心情 | 擦汗 2017-10-15 13:21 |
|---|
签到天数: 183 天 连续签到: 1 天 [LV.7]常住居民III
进士
- 积分
- 1300
|
10#
jackten
发表于 2016-12-3 14:30:15
|
只看该作者
|
|
|
|
|
|
|
|