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

news2024/10/5 18:06:17

【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数据:

在这里插入图片描述

  • 🌿温湿度传感器
    在这里插入图片描述

📑引脚定义

  • ✨如果是其他型号可以根据自由更换其他引脚。注意修改相关定义。
                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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP协议 GET和POST区别 请求响应 Fiddler postman ajax

&#x1f496; 欢迎来阅读子豪的博客&#xff08;JavaEE篇 &#x1f934;&#xff09; &#x1f449; 有宝贵的意见或建议可以在留言区留言 &#x1f4bb; 欢迎 素质三连 点赞 关注 收藏 &#x1f9d1;‍&#x1f680;码云仓库&#xff1a;补集王子的代码仓库 不要偷走我小火…

Mac下nvm安装使用

​欢迎光临我的博客查看最新文章: https://river106.cn 1、简介 nvm 是 Mac 下的 node.js 管理工具。可以通过 nvm 安装和切换不同版本的 node.js。 官网&#xff1a;https://nvm.uihtm.com/ github&#xff1a;https://github.com/nvm-sh/nvm 2、安装 curl -o- https://raw…

移动端适配rem方案

做移动端的适配我们就是要考虑&#xff0c;对于不同大小的手机屏幕&#xff0c;怎么动态改变页面布局中所有盒子的宽度高度、字体大小等。 这个问题我们可以使用相对单位rem。 那么什么是 rem&#xff1f; rem&#xff08;font size of the root element&#xff09;是指相对…

Linux-中断和时间管理(上)

目录 中断的进入过程 中断的进入过程 为方便实验&#xff0c;本章以配套的目标板 FS4412为例来介绍 Linux 的中断子系统&#xff0c;并且编写相应的中断处理程序。FS4412 上的处理器是 SAMSUNG公司的 Exynos4412&#xff0c;该处理器使用的是4核的 Cortex-A9&#xff0c;&…

c++Lambda匿名函数

cLambda匿名函数 &#xff08;1&#xff09; 定义a. [外部变量方位方式说明符]b. (参数)c. mutabled.noexcept/throw()e.->返回值类型f.函数体 2&#xff09;c11中的拉姆达表达式中的&#xff08;&#xff09;可以省略吗 所谓匿名函数&#xff0c;简单地理解就是没有名称的函…

《C++ Primer Plus》(第6版)第17章编程练习

《C Primer Plus》&#xff08;第6版&#xff09;第17章编程练习 《C Primer Plus》&#xff08;第6版&#xff09;第17章编程练习1. 计算输入流中第一个\$之前的字符数目2. 将键盘输入&#xff08;直到模拟的文件尾&#xff09;复制到通过命令行指定的文件中3. 将一个文件复制…

完全免费的基于区块链和 IPFS 的去中心化博客平台

一、前言 xLog是一个基于Crossbell区块链的博客解决方案&#xff0c;专注于Web3数据由用户掌控。Crossbell是一个基于Web3技术的去中心化博客平台&#xff0c;用户可以在该平台上发布文章并进行交流和创作。社区提供多种交流平台和有奖创作活动。 xLog是基于 Crossbell 区块链…

【AI回复】“我问它,你对五一调休怎么看”

前言 马上就要到五一啦&#xff0c;放假打算去哪里玩呢&#xff1f; “我肯定是宅在家里写博客啊” 最近五一调休在某博上引起大家的共鸣&#xff0c;看了评论那叫一个惨不忍睹哇。 因为我比较对AI感兴趣&#xff0c;所以想看看它是怎么看待调休的。 首先&#xff0c;在百度…

【UE】简易的水材质

引擎版本&#xff1a;4.26 效果 步骤 1. 创建一个材质&#xff0c;命名为“M_Water” 2. 打开“M_Water”&#xff0c;将混合模式设为半透明&#xff0c; 光照模式设为表面半透明体积&#xff0c;在这种模式下我们可以使用金属度、粗糙度等接口 3. 创建一个4维常量节点&…

Android 基于NumberPicker自定义弹出窗口Dialog整合日期选择器

Android实现把年月选择器放到AlertDialog中_左眼看成爱的博客-CSDN博客 Android使用NumberPicker实现年月滚动选择器_左眼看成爱的博客-CSDN博客 前面两篇文章我们分别讲了 1&#xff0c;如何用NumberPicker实现年月选择器 2&#xff0c;如何把1中的用NumberPicker实现的年…

基于DE2-115平台实现VGA显示器的显示实验

目录 什么是VGA协议VGA显示原理VGA时序图VGA参数图实验记录准备PLLROM取模代码data_drive.vkey_debounce.vvga_drive.vvga_top.v 实验现象 什么是VGA协议 这一部分摘录自野火的征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》2021.7.10&#xff08;上&#xff09;…

ctfshow web入门phpcve web311-315

1.web311 通过抓包发现php版本时为PHP/7.1.33dev 漏洞cve2019-11043 远程代码执行漏洞 利用条件&#xff1a; nginx配置了fastcgi_split_path_info 受影响系统&#xff1a; PHP 5.6-7.x&#xff0c;Nginx>0.7.31 下载工具进行利用 需要安装go环境 yum install golang -y …

一文技术解析ART虚拟机method tracing

一、method tracing介绍 概述 这个是谷歌提供的对java的函数级trace工具&#xff0c;和systrace只支持打点不同&#xff0c;method tracing能支持到函数&#xff0c;看到具体的函数执行时间&#xff0c;准确的分析出来执行的时间短板。 1.生成trace的方式 sampling方式&…

【数据结构初阶】第七节.树和二叉树的性质

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 一、树 1.1 树的概念 1.2 树的结点分类 1.3 结点之间的关系 1.4 树的存储结构 1.5 其他相关概念 二、 二叉树 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4…

快速上线chatGPT软件

ChatGPT是一个由OpenAI开发的自然语言处理模型&#xff0c;您无法将其直接上线。但是&#xff0c;如果您想要在您的应用程序中集成对话系统或聊天机器人&#xff0c;您可以探索以下步骤&#xff1a; 选择开发工具&#xff1a;选择一个适合您的编程语言和平台的开发工具&…

C++ [STL之string的使用]

本文已收录至《C语言和高级数据结构》专栏&#xff01; 作者&#xff1a;ARMCSKGT 文章目录 前言正文编码basic_string类说明basic_string实例成员关于string string类模块构造函数空间大小相关字符串长度及容量大小清空字符串和空串查询字符串大小和容量设置 访问与遍历头尾元…

探索【Stable-Diffusion WEBUI】的插件:界面与中文翻译

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;主题&#xff08;kitchen Theme&#xff09;&#xff08;二&#xff09;对照翻译&#xff08;Bilingual Localization&#xff09;&#xff08;三&#xff09;自行翻译&#xff08;四&#xff09;提示词翻译…

前端02:CSS选择器等基础知识

CSS基础选择器、设置字体样式、文本样式、CSS的三种引入方式、能使用Chrome调试工具调试样式 HTML专注做结构呈现&#xff0c;样式交给CSS&#xff0c;即结构&#xff08;HTML&#xff09;和样式CSS相分离 CSS主要由量分布构成&#xff0c;选择器以及一条或多条声明 选择器&…

华为OD机试真题(Java),喊7的次数重排(100%通过+复盘思路)

一、题目描述 喊7是一个传统的聚会游戏&#xff0c;N个人围成一圈&#xff0c;按顺时针从1到N编号。 编号为1的人从1开始喊数&#xff0c;下一个人喊的数字为上一个人的数字加1&#xff0c;但是当将要喊出来的数字是7的倍数或者数字本身含有7的话&#xff0c;不能把这个数字直…

ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例

ML之DR&#xff1a;基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例 目录 基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例 # 1、定义数据集 # 2、数…