【IAR工程】STM8S基于ST标准库读取DHT11数据

这篇具有很好参考价值的文章主要介绍了【IAR工程】STM8S基于ST标准库读取DHT11数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【IAR工程】STM8S基于ST标准库读取DHT11数据


  • ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!
  • 🍁对于文中所提供的相关资源链接将作不定期更换。
  • 🔖基于ST STM8S/A标准外设库:STSW-STM8069,版本号:2.3.1
  • 📌STSW-STM8069官方资源下载地址:https://www.st.com/zh/embedded-software/stsw-stm8069.html
  • 🔧IAR编译器版本:IAR Assembler for STMicroelectronics STM8 3.11.1
  • 📌STM8S207/208RBT6最小系统板:https://oshwhub.com/perseverance51/stm8s207rbt6-kai-fa-ban
  • 🎯本工程使用STM8S208RB+DHT11实物验证没有问题。
  • 📜通过串口对于爱你DHT11数据:

【IAR工程】STM8S基于ST标准库读取DHT11数据文章来源地址https://www.toymoban.com/news/detail-424378.html

  • 🌿温湿度传感器
    【IAR工程】STM8S基于ST标准库读取DHT11数据

📑引脚定义

  • ✨如果是其他型号可以根据自由更换其他引脚。注意修改相关定义。
                STM8S单片机-->DHT11
                  PC2-->DAT
                  3.3V----VCC

📓STM8驱动代码

  • 🌿DHT11.C
#include "dht11.h"


static uint8_t debug[5] = {0};

/**
  * @brief  获得DHT11 1 bit数据
  * @param  None
  * @retval 数据
  */
static uint8_t dht11_bit_get( void )
{
    uint8_t temp = 0;
    for( int j = 0; j < 8; j++ )    //获取一个字节
    {
        while( DHT11_READ == RESET ); //等待字节起始低电平结束     	
        delay_us( 40 );//大于40us (要求大于30us,小于70us)
        temp <<= 1;
        if( DHT11_READ != RESET )
        {
            temp |= 0x01;
        }
        while( DHT11_READ != RESET ); //等待高电平结束
    }
    return temp;
}


/**
  * @brief  获得DHT11温湿度数据
  * @param  data  数据接收缓存(5字节)
  * @retval true 获取成功   false 获取失败
  * @note   采样间隔必须大于1s,采样过程禁止打断
  */
static BitStatus dht11_data_get( uint8_t *data )
{
    DHT11_OUT;
    DHT11_H;                //准备--总线空闲
    delay_ms( 2 ); //延时2ms

    DHT11_L;                //总线拉低--主机开始信号
    delay_ms( 25 ); //保持25ms --大于18ms
    DHT11_H;                //结束开始信号
 
    delay_us( 30 );//延时 20us~40us
    DHT11_IN;               //切换输入模式 准备读响应

    if( DHT11_READ != RESET )   //未检测到应答
    {
        return RESET;
    }
    while( DHT11_READ == RESET ); //等待应答结束
    while( DHT11_READ != RESET ); //等待DHT11发送起始高电平结束

    for( int i = 0; i < 5; i++ ) //共5字节
    {
        data[i] = dht11_bit_get();
    }

    DHT11_OUT;
    DHT11_H;                	//准备--总线空闲
    return SET;
}


/**
  * @brief  获得DHT11温湿度数据
  * @param  temp 温度     hum 湿度
  * @retval false 数据错误  true 数据正常
  */
BitStatus dht11_read_data( double *temp, double *hum )
{
    uint8_t dht11_data[5] = {0};
    if( !dht11_data_get( dht11_data ) )
        return RESET;
    memcpy( debug, dht11_data, 5 );
    if( dht11_data[0] + dht11_data[1] + dht11_data[2] + dht11_data[3] != dht11_data[4] )
        return RESET;

    *hum = dht11_data[0] + dht11_data[1] * 0.1;
    *temp  = dht11_data[2] + dht11_data[3] * 0.1;

    return SET;
}


  • 🌿DHT11.h
#ifndef _DHT11_H
#define _DHT11_H

#include <stm8s.h>
#include "delay.h"
#include <string.h>

#define DHT11_PORT  GPIOC
#define DHT11_PIN   GPIO_PIN_2

#define DHT11_OUT   GPIO_Init(DHT11_PORT, DHT11_PIN, GPIO_MODE_OUT_PP_HIGH_FAST)   //输出模式
#define DHT11_IN    GPIO_Init(DHT11_PORT, DHT11_PIN, GPIO_MODE_IN_PU_NO_IT)        //输入模式
#define DHT11_H     GPIO_WriteHigh(DHT11_PORT,DHT11_PIN)                           //输出高
#define DHT11_L     GPIO_WriteLow(DHT11_PORT,DHT11_PIN)                            //输出低
#define DHT11_READ  GPIO_ReadInputPin(DHT11_PORT,DHT11_PIN)                        //数据读出

BitStatus dht11_read_data(double *temp,double *hum);

#endif



📝主程序代码

/**************************************************************************************
实验现象:打开串口调试助手,选择CH340对应串口号,波特率设置9600, 串口助手上会显示DHT11数据:
        "DHT11_Temp: 25. 9℃ DHT11_Hum:95. 0%"
			

接线说明:	1、STM8S单片机-->LED1 ->PC7
                                 LED2 ->PC6
-------------------------------------------------------
		 PC2-->DHT11 DATA
      DHT11对延时要求比较高,微妙延时函数(delay_us())  中的形参调整为:nCount*=3;
      如果使用其他参数将会导致读取的数据不对。

注意事项:       1、采用内部16MHz晶振频率。
                2、针对读取DHT11传感器,确保微妙延时函数形参:nCount*=3;
                3、点击“Download active application”按钮,程序下载完成后,即可运行程序。
		4、串口1使用的是PA4和PA5引脚,所以这两个IO口不要被占用
***************************************************************************************/

#include "stm8s.h"      /*  添加库函数头文件 */
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "dht11.h"
#include <stdio.h>//包含此头文件调用printf函数串口才能有输出
/* 主函数 */
int main( void )
{
    u8 i = 0;
    double temp, hum;
    disableInterrupts();    //关闭系统中断
    //内部时钟为1分频 = 16Mhz
    CLK_SYSCLKConfig( CLK_PRESCALER_HSIDIV1 );
    LED_Init();
    USART1_Init( 9600 ); //初始化USART1 , 并设置波特率为9600
    while( dht11_read_data(&temp,&hum) == RESET )	//DS18B20初始化
    {
        printf( "DHT11 Error \r\n" );
        delay_ms( 500 );
    }
    enableInterrupts();     //使能系统中断

    while( 1 )
    {
        i++;
        if( i % 20 == 0 )
        {
            LED1_TOGGLE;
            LED2_TOGGLE;
        }
        if( i % 100 == 0 )
        {
            if( dht11_read_data(&temp,&hum) ) //判断是否获取到数据
            {
                printf( "DHT11_Temp: %2d.%2d℃ DHT11_Hum:%2d.%2d%%\r\n", ( u16 )temp, Get_decimal( temp, 2 ) ,( u16 ) hum,Get_decimal( hum, 2 )  );
            }
            else
            {
               
                printf( "DHT11 Error \r\n" );
            }

        }
        delay_ms( 10 );
    }
}
//是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数
void assert_failed( u8* file, u32 line )
{
    while ( 1 )
    {

    }
}

📚程序源码

  • ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!
  • 🍁对于文中所提供的相关资源链接将作不定期更换。
链接: https://pan.baidu.com/s/1uFtVokUx_AXLEy6VgmTpAQ
提取码: 9h9x

到了这里,关于【IAR工程】STM8S基于ST标准库读取DHT11数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IAR开发环境的安装、配置和新建STM32工程模板

    瑞典著名软件开发商IAR Systems公司2014年推出了最新版本IAR Embedded Workbench For ARM V7.1 (简称IAR EWARM V7.1),它是一种增强型一体化开发平台,其中完全集成了开发嵌入式系统所需要的文件编辑、项目管理、编译、链接和调试工具。IAR公司独具特色的CSPY调试器,不仅可以在系统开发

    2024年02月14日
    浏览(41)
  • stm32读取DHT11温湿度传感器

    我们知道DHT11是单总线协议,只有一根数据线。 且内部有个上拉电路(下图)。那么数据线默认就是高电平那接下来就可以讲解主机如何和DHT11通讯的 读取DHT11的芯片手册,可以知道,DHT11一次完成的数据输出是40bit,高位先出。 格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温

    2024年02月09日
    浏览(51)
  • Proteus仿真STM32读取DHT11并串口打印输出

           心血来潮,来试试proteus里STM32的仿真功能,我选用的是STM32F103C8T6这款入门级芯片。        踩了不少坑,因此写篇博文记录一下。        开始采用的是 嵌入式技术公开课邴哲松老师 写的代码,是 keil4 版本,采用最新的V6.19解释器报错。 安装最新版keil5编译报错*

    2024年02月07日
    浏览(62)
  • STM32+DHT11 读取数据为0或温湿度过高的常见原因及解决办法

    如果代码正确的话,我遇到的温湿度为0的原因主要还是电源的问题,比如没有给开发板单独供电或者连线松动。因为有时候插着ST-Link连接到了电脑,开发板和DHT11的电源指示灯都会亮,但还是需要给开发板连上电源,这样更稳定,插上电源之后复位一下读到的温湿度就正常了

    2024年02月06日
    浏览(38)
  • STM8学习笔记1:STM8简介

    1.1 STM8简介 STM8是意法半导体下的一款8位单片机,根据应用场合不同,分为三个系列,STM8S、STM8L和STM8A。 STM8S系列:针对工业应用和消费电子领域 STM8L系列:针对超低功耗领域。大约1MHz的工作电流为200uA. STM8A系列:针对汽车应用。耐高温,最高温度达到145度。 我在咸鱼40入手

    2024年02月11日
    浏览(41)
  • 基于STM32使用DHT11温湿度模块

    目录 前言 一、DHT11模块介绍 1、原理图 2、通信时序(单总线) 2.1、通信总过程 2.2、起始信号及DHT11应答 2.3、数字1信号的应答时序 2.4、数字0信号的应答时序 2.5、数据格式 二、使用步骤 1.使用CubeMX进行配置(基于stm32f407zgt6) 2.编写相关函数 ​编辑3、实验结果 三、代码分享

    2024年02月10日
    浏览(51)
  • 嵌入式——新建STM32工程(标准库)

    目录 一、初识标准库 1.CMSIS标准及库层级关系 2.库文件介绍 (1)Libraries文件夹 ①CMSIS文件夹 ②STM32F10x_Std_Periph_Driver文件夹 ③ 在用库建立一个完整的工程时,还需要添加stm32f10x_it.c、 stm32f10x_conf.h 和 system_stm32f10x.c文件 (2)Project文件夹 (3)Utilities文件夹 3.库各文件之间的关

    2024年01月23日
    浏览(53)
  • STM32使用温湿度DHT11基于HAL库开发

    DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一 个

    2024年02月03日
    浏览(64)
  • 【电赛-软件】基于ST官方插件 配置VScode开发STM32

    基于ST官方插件 配置VScode开发STM32 先决条件: 安装插件 插件使用 创建工程 导入工程 编译工程 调试 官方链接:https://marketplace.visualstudio.com/items?itemName=stmicroelectronics.stm32-vscode-extension。 ST官方论坛:https://community.st.com/s/topic/0TO3W00000006cJWAQ/vscode-for-stm32。 需要提前安装 STM32Cu

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包