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

news/2024/4/26 11:41:33/文章来源:https://blog.csdn.net/weixin_42880082/article/details/130354069

【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单片机-->DHT11PC2-->DAT3.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 ); //延时2msDHT11_L;                //总线拉低--主机开始信号delay_ms( 25 ); //保持25ms --大于18msDHT11_H;                //结束开始信号delay_us( 30 );//延时 20us~40usDHT11_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 ->PC7LED2 ->PC6
-------------------------------------------------------PC2-->DHT11 DATADHT11对延时要求比较高,微妙延时函数(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分频 = 16MhzCLK_SYSCLKConfig( CLK_PRESCALER_HSIDIV1 );LED_Init();USART1_Init( 9600 ); //初始化USART1 , 并设置波特率为9600while( 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.luyixian.cn/news_show_103060.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4月有8本SCIE期刊被剔除(附MDPI/Frontiers/Hindawi最新在检期刊)

2023年4月SCI、SSCI期刊目录更新 2023年4月18日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次3月WOS期刊目录剔除50本SCIE&SSCI期刊之后&#xff0c;此次4月更新又有8本SCIE期刊发生变动&#xff0c;其中有4本期刊被踢出SCIE数据库&#xff0c;4本期刊更改了名…

流程图拖拽视觉编程--概述

一般的机器视觉平台采用纯代码的编程方式&#xff0c;如opencv、halcon&#xff0c;使用门槛高、难度大、定制性强、开发周期长&#xff0c;因此迫切需要一个低代码开发的视觉应用平台。AOI缺陷检测的对象往往缺陷种类多&#xff0c;将常用的图像处理算子封装成图形节点,如抓直…

Android 系统架构大图

android的系统架构和其操作系统一样&#xff0c;采用了分层的架构。从架构图看&#xff0c;android分为四个层&#xff0c;从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux核心层。 1.应用程序 Android会同一系列核心应用程序包一起发布&#xff0c;该应用…

确定因果随机森林的树木数量 the number of trees

前言 推断因果性和分析异质性是统计学家在处理混杂任务中的圣杯。传统且主流的方法有:倾向性评分、分层分享、比例风险模型等。新的方法也有很多,代表就是:因果随机森林。这种算法,浅看难度一般,深入探索发现坑还是很多的。这篇博客不对算法做深入探讨,仅仅是我在阅读文…

Nautilus Chain :基于模块化架构的Layer3正在走向成熟

Nautilus Chain 是一个基于 Eclipse 和 Celestia 构建的模块化 Layer3 链。作为定位在 Layer0 的链基建概念&#xff0c;Eclipse 和 Celestia 为面向未来的区块链扩容技术提供了一套开发工具和基础框架。尽管这种前沿技术过去一直处于概念验证阶段&#xff0c;尚未推出适用于大…

Java并发(三)----创建线程的三种方式及查看进程线程

一、直接使用 Thread // 创建线程对象 Thread t new Thread() {public void run() {// 要执行的任务} }; // 启动线程 t.start(); 例如&#xff1a; // 构造方法的参数是给线程指定名字&#xff0c;推荐 Thread t1 new Thread("t1") {Override// run 方法内实现…

手把手教你PXE高效网络装机、Kickstart无人值守安装(详细版)

目录 一、部署PXE远程安装服务1.1PXE定义1.2PXE服务优点1.3搭建网络体系前提条件1.4 搭建PXE远程安装服务器 二. 实验2.1 服务器操作2.2 安装启动TFTP服务并修改TFTP服务的配置文件2.3 安装并启用DHCP服务2.4 准备linux内核&#xff0c;初始化镜像文件2.5 准备PXE引导程序2.6 安…

22、Tweak原理及部分逆向防护

一、Tweak原理 1.1 Tweak产物.dylib 执行make命令时,在 .theos的隐藏目录中,编译出obj/debug目录,包含 arm64、arm64e两种架构,同时生成readbadges.dylib动态库 在arm64、arm64e目录下,有各自架构的readbadges.dylib,而debug目录下的readbadges.dylib,是一个胖二进制文件 fi…

【Java-01】深入浅出匿名对象 , 继承 , 抽象类

主要内容 面向对象回顾 匿名对象介绍 面向对象特征 - 继承 抽象类的使用 模板设计模式 1 面向对象回顾 面向对象的核心思想是什么 ? 用代码来模拟现实生活中的事物 , 比如学生类表示学生事物 , 对象表示的就是具体的学生 , 有了类就可以描述万千世界所有的事物了 现有的…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题142环形链表II) 2023.4.24

目录 前言算法题&#xff08;LeetCode刷题142环形链表II&#xff09;—&#xff08;保姆级别讲解&#xff09;分析题目&#xff1a;算法思想环形链表II代码&#xff1a;补充 结束语 前言 本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可&#xff0c;撰写…

前端食堂技术周刊第 80 期:Vite 4.3、Node.js 20、TS 5.1 Beta、Windi CSS 即将落幕

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;东坡肉 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 Vite 4.3Node.js 20TypeScript 5.1 BetaWindi CSS 即将落幕Pretty TypeScri…

中医脉诊仪:结合传统与现代技术的诊断工具

一、引言 随着科技的不断发展&#xff0c;医学领域也取得了举世瞩目的进步。中医作为一种古老的医学体系&#xff0c;始终保持着其独特的魅力。脉诊作为中医诊断的重要方法之一&#xff0c;历经千年的发展和传承&#xff0c;如今在现代科技的助力下&#xff0c;诞生了中医脉诊…

信息安全复习六:公开密钥密码学

一、章节梗概 1.公开密钥密码模型的基本原理 2.两个算法&#xff1a;RSA&D-H算法 主要内容 1.对称密钥密码的密钥交换问题 2.公钥密码模型的提出 3.设计公钥密码的基本要求 4.数字签名 5.RSA算法 6.公钥密码的特征总结 二、对称密钥密码 对称加密算法中&#xff0c;数据…

实例分割算法BlendMask

实例分割算法BlendMask 论文地址&#xff1a;https://arxiv.org/abs/2001.00309 github代码&#xff1a;https://github.com/aim-uofa/AdelaiDet 我的个人空间&#xff1a;我的个人空间 密集实例分割 ​ 密集实例分割主要分为自上而下top-down与自下而上bottom-up两类方法…

基于趋动云的chatGLM-6B模型的部署

首先根据官方示例教程&#xff0c;学会怎么创建项目&#xff0c;怎么使用数据&#xff0c;怎么进入开发环境&#xff0c;以及了解最重要的2个环境变量&#xff1a; 这个是进入开发环境以后的代码目录 $GEMINI_CODE 这个是引用数据集后&#xff0c;数据集存放的路径 $GEMINI_DA…

Linux内核进程管理与调度:策略优化与实践分析

Linux内核进程管理与调度 一、前言二、进程管理和多进程调度2.1 进程标识符和控制块2.2 进程状态和转换2.3 进程间通信 三、单处理器下的Linux进程调度3.1 Linux进程调度器3.2 时间片轮转调度算法3.3 最短剩余时间优先调度算法3.4 其他调度算法的不足 四、多处理器下的Linux进程…

Layui 2.8.0 正式发布,朴实归来

Layui 是一套开源的 Web UI 组件库&#xff0c;采用自身轻量级模块化规范&#xff0c;遵循原生态的 HTML/CSS/JavaScript 开发模式&#xff0c;极易上手&#xff0c;拿来即用。其风格简约轻盈&#xff0c;而内在雅致丰盈&#xff0c;甚至包括文档在内的每一处细节都经过精心雕琢…

【Linux网络】PXE高效批量网络装机

PEX高效批量网络装机 一、部署PXE远程安装服务1.1PXE的优点1.2搭建PXE网络体系的前提条件 二、实现Kincksatrt无人值守安装2.1实验思路&#xff0c;2.2实验&#xff1a;无人值守远程安装2.2.1实现 Kickstart 无人值守安装 一、部署PXE远程安装服务 PXE&#xff08;预启动执行环…

Flutter ListView组件详解

今天是2023年4月24日 今天重新复习了一下关于ListView的内容&#xff0c;现在就重新整理一下关于ListView的内容和理解 : (1)ListView和Column之间有什么区别&#xff1f; 在我理解中ListView和Column都是可以有很多子组件的组件&#xff0c;它们之间区别在于它们排列的形式和…

100天涨薪4k,从功能测试到自动化测试,我整理的3000字超全学习指南

去年6月份&#xff0c;由于经济压力让我下定决心进阶自动化测试&#xff0c;已经24的我做了3年功能测试&#xff0c;坐标广州薪资定格在8k&#xff0c;可能是生活过的太安逸&#xff0c;觉得8000的工资也够了&#xff0c;但是生活总是多变的&#xff0c;女朋友的突然怀孕&#…