1回答

0收藏

[分享] 2路ADC+DHT11温湿度采集+串口发送数据

GD32 GD32 5059 人阅读 | 1 人回复 | 2016-02-23

采用GD32F207实现了2路ADC电压采集、DHT11温湿度采集和串口发送数据,总体感觉GD32和STM32使用起来很类似,STM32的程序移植到GD32上也很方便,只是库函数名称略有不同。中间走了点弯路,主要是被板上的丝印误导了:
GD32 Colibri-F207ZE开发板硬件手册 给出的引脚布置图实际上内外颠倒,在调试程序时一直没得到想要的结果。

后来看了原理图(下图),发现了接线错误,更改接线后一切正常。

简单描述一下实现过程:
1.数字温湿度传感器DHT11采用单总线输出数据,单次数据包共5Byte(40bit),包括先发送高位,数据格式为:湿度整数+湿度小数+温度整数+温度小数+校验和,各占1 Byte,校验和为前4个Byte相加,由此可计算出温湿度的数值。
DHT11通讯过程的时序图如下图所示,空闲状态时总线为高电平,MCU发送开始信号,拉低总线等待DHT11响应(至少18ms),之后拉高总线20~40μs;DHT11接收到开始信号,在其结束后发送80μs的低电平响应信号,之后拉高总线40~50μs,再拉低40~50μs,接着输出数据;主机读取到响应信号后开始接收数据;一次数据传输完成,DHT11拉低总线50μs,之后总线进入空闲状态。

根据以上分析,编写DHT11数据采集程序:

其中用到的延时函数采用cortex-M3内核中的跟踪组件DWT的时钟周期计数CYCCNT实现:

2.2路ADC配置如下:

分别读取ADC1的ADC_IN1和ADC_IN2的转换值,取3次的平均值后转换为0-3.3V电压值发送到PC。
3.USART发送程序采用colibri_bsp_uart.c中的EvbUart1Printf(char* fmt, ...)函数,该函数实现了printf()的功能,按照printf()的格式调用即可。
硬件接线如下:
PG8:DHT11 DATA
PA1:电位器1
PA2:电位器2
PB6:USART1 TX

运行结果如下:

附程序:
GD32F207.zip (3.97 MB, 下载次数: 64)

分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

糖悦之果飞

发表于 2016-2-24 08:56:29 | 只看该作者

亲,可以将内容一并发到经验频道,很有机会获得每月之星的呢http://jingyan.eeboard.com/
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条