查看: 4417|回复: 1

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

[复制链接]
  • TA的每日心情
    开心
    2016-2-26 11:30
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-2-23 23:49:51 | 显示全部楼层 |阅读模式
    分享到:
    采用GD32F207实现了2路ADC电压采集、DHT11温湿度采集和串口发送数据,总体感觉GD32和STM32使用起来很类似,STM32的程序移植到GD32上也很方便,只是库函数名称略有不同。中间走了点弯路,主要是被板上的丝印误导了:
    GD32 Colibri-F207ZE开发板硬件手册 给出的引脚布置图实际上内外颠倒,在调试程序时一直没得到想要的结果。
    7.jpg
    后来看了原理图(下图),发现了接线错误,更改接线后一切正常。
    8.jpg
    简单描述一下实现过程:
    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,之后总线进入空闲状态。
    6.jpg
    根据以上分析,编写DHT11数据采集程序:
    5.jpg
    其中用到的延时函数采用cortex-M3内核中的跟踪组件DWT的时钟周期计数CYCCNT实现:
    9.jpg
    2.2路ADC配置如下:
    10.jpg
    分别读取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
    IMG_20160223_211133.jpg
    运行结果如下:
    1.jpg
    附程序:
    GD32F207.zip (3.97 MB, 下载次数: 64)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-2-24 08:56:29 | 显示全部楼层
    亲,可以将内容一并发到经验频道,很有机会获得每月之星的呢http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-22 10:42 , Processed in 0.125206 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.