嵌入式单总线详解

news2025/4/4 23:51:45

单总线介绍

单总线,就像是电子世界里的“超级水管工”,它以一根线的简洁,完成了数据传输、设备供电乃至设备识别的多重任务,展现了极简主义的智慧与效率。想象一下,你住在一个高科技社区,所有的家电——冰箱、洗衣机、电视,甚至灯光,都通过家中的同一根“魔法管道”沟通交流,而这根管道就是单总线。
在这里插入图片描述

单总线的通俗理解
一绳千结,各有所指(寻址机制):如果把单总线比作一条长绳,那么绳上系着无数不同颜色和形状的结,每个结代表一个设备。这些结的排列组合就是设备的地址,确保信息准确无误地送到特定的电器。比如,当你想要调节客厅的灯光,单总线就通过识别那个特定的“结”,只对客厅的灯光发出指令。

一线多能,既传又供(供电与数据传输):单总线不仅仅传递信息,它还像一根“营养管”,为那些低功耗的小型设备提供必要的能源。这就好比那根“魔法管道”不仅传递控制信号,还能为管道上的小灯泡提供点亮所需的电力,实现了资源的最大化利用。

时序舞蹈,精准同步(时序控制):单总线上的信息传递,就像一场精心编排的舞蹈,每个动作都要严格按照节拍进行。主机和设备之间通过一系列精确的高低电平变化(如握手、读写时序)进行对话,确保数据不混淆、不遗漏,犹如舞者之间默契的配合。
在这里插入图片描述

实际应用场景

智能家居:在智能家居系统中,单总线可以连接众多传感器,如温度、湿度、光照传感器,以及执行器如智能插座、窗帘电机等,仅需一根线就能构建起整个家庭的智能网络,大幅减少布线成本和复杂度。
环境监测:在农田、森林等大型环境监测项目中,单总线连接的土壤湿度、空气温湿度传感器能广泛分布,实时收集数据,为科研和农业生产提供精准指导。
工业自动化:在工厂自动化领域,单总线可用于监控机器状态,如温度、压力等关键参数,实现低成本、高效率的设备维护管理。
在这里插入图片描述

STM32平台下的C语言示例

考虑到STM32平台的广泛应用,以下是一个简化的示例,演示如何在STM32微控制器上使用单总线协议与DS18B20温度传感器进行通信。这里假设使用HAL库进行GPIO操作。

#include "stm32f1xx_hal.h"

#define DHT11_GPIO_Port GPIOA
#define DHT11_Pin GPIO_PIN_0
#define DELAY_US_50 50
#define DELAY_MS_20 20

// DHT11读取函数
uint8_t read_dht11_data(uint8_t *data, uint8_t len) {
    HAL_GPIO_WritePin(DHT11_GPIO_Port, DHT11_Pin, GPIO_PIN_RESET); // 发送开始信号
    HAL_Delay(DELAY_MS_20); // 稳定时间
    HAL_GPIO_WritePin(DHT11_GPIO_Port, DHT11_Pin, GPIO_PIN_SET); // 结束开始信号
    HAL_Delay(DELAY_US_40); // 等待响应

    if (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_SET) // 检查DHT11响应
        return 1; // 无响应

    uint8_t idx = 0, cnt = 0;
    while (idx < len) {
        uint8_t bit = 0;
        for (cnt = 0; cnt < 8; cnt++) { // 读取每一位
            while (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_SET); // 等待低电平结束
            delayMicroseconds(50); // 确保低电平稳定读取
            if (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_RESET) // 读取高电平时间判断数据位
                bit |= (1 << (7 - cnt));
            while (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_RESET); // 等待高电平结束
        }
        data[idx++] = bit;
    }

    // 校验数据
    uint8_t sum = 0;
    for (uint8_t i = 0; i < (len - 1); i++)
        sum += data[i];
    if (sum != data[len - 1])
        return 1; // 校验失败

    return 0; // 成功
}

int main(void) {
    HAL_Init(); // 初始化HAL库
    SystemClock_Config(); // 配置系统时钟
    __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = DHT11_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(DHT11_GPIO_Port, &GPIO_InitStruct);

    uint8_t data[5] = {0}; // 存储读取的40位数据(5字节)
    while (1) {
        if (read_dht11_data(data, 5) == 0) { // 读取成功
            uint8_t humidity_int = data[0]; // 直接读取整数部分
            uint8_t humidity_dec = data[1]; // 小数部分
            uint8_t temp_int = data[2]; // 温度整数部分
            uint8_t temp_dec = data[3]; // 温度小数部分

            float humidity = humidity_int + humidity_dec / 10.0f;
            float temp = ((temp_int & 0x7F) + temp_dec / 10.0f) * (temp_int & 0x80 ? -1 : 1); // 考虑负温度

            printf("Temperature: %.1f°C, Humidity: %.1f%%\r\n", temp, humidity);
        } else {
            printf("Failed to read from DHT11.\r\n");
        }
        HAL_Delay(2000); // 每2秒读取一次
    }
}


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

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

相关文章

【while循环】

目录 什么是循环 while语句的执行过程 编程求1*2*3*...*n 所有不超过1000的数中含有数字3的自然数 求数 求数II 编程求1平方2平方...n平方 什么是循环 循环就是重复做同样的事儿使用while语句循环输出1到100 int i 1; while( i < 100 ){cout <<…

C++各种排序算法详解及示例源码

1、排序算法 排序算法&#xff08;sorting algorithm&#xff09;用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 1.1 评价维度 运行效率&#xff1a;我们期望排序算法的时间复杂度尽量低&#xf…

opencv_17_翻转与旋转

一、图像翻转 1&#xff09;void flip_test(Mat& image); 2&#xff09;void ColorInvert::flip_test(Mat& image) { Mat dst; //flip(image, dst, 0); //上下翻转 flip(image, dst, 1); //左右翻转 // flip(image, dst, -1); //180度翻转 imsho…

软件测试笔记_习题_面经

软件测试------按测试阶段划分有几个阶段? 单元测试、集成测试、系统测试、验收测试 软件测试------按是否查看源代码划分有几种测试方法? 黑盒、白盒、灰盒 软件测试------按是否运行划分有几种测试方法? 静态测试、动态测试 软件测试------按是否自动化划分有几种测试方…

chrome 查看版本安装路径、cmd命令行启动浏览器

chrome 查看版本安装路径 浏览器输入 chrome://version/cmd命令行启动浏览器 "C:\Program Files\Google\Chrome\Application\chrome.exe" www.baidu.com

神经网络的反向传播

梯度下降算法 &#x1f525;我们来看一下神经网络中的梯度下降算法&#x1f525; 梯度下降法是一种优化算法&#xff0c;用于寻找目标函数的最小值。梯度是一个向量&#xff0c;表示某一函数在该点处的方向导数沿着该方向取得最大值&#xff0c;即函数在该点处变化最快的方向…

Sublime Vim模式配置:q关闭当前标签页

在Sublime安装目录下的->Packages文件夹下新建User文件夹创建文件Vintage.sublime-commands 路径为Sublime安装目录->Packages->User->Vintage.sublime-commands文件内容如下[{"caption": ":w - Save","command": "save"}…

【Model 3芯片】双层PCB设计,打造高性价比HMI控制器

产品高性能和可靠性的需求日益增长&#xff0c;特别是在工业应用领域中&#xff0c;这些要求更是严苛。为了满足这些不断升级的需求&#xff0c;启明智显推出了全新的Model 3芯片。这款芯片以其卓越的性能和强大的功能&#xff0c;被设计用作人机界面&#xff08;HMI&#xff0…

RKNN Toolkit2 工具的使用

RKNN Toolkit2 是由瑞芯微电子 (Rockchip) 开发的一套用于深度学习模型优化和推理的工具。它主要面向在瑞芯微SoC上进行AI应用开发&#xff0c;但也可以用于PC平台进行模型的转换、量化、推理等操作。它支持将多种深度学习框架的模型&#xff08;如Caffe, TensorFlow, PyTorch等…

一键呼叫,服务到家——同城跑腿小程序引领新生活方式

在忙碌的现代生活中&#xff0c;时间变得尤为珍贵。我们常常被琐事所困扰&#xff0c;无法尽情享受生活的美好。然而&#xff0c;同城跑腿小程序的出现&#xff0c;以其一键呼叫、服务到家的便捷特性&#xff0c;为我们打开了一扇通往新生活方式的大门。 同城跑腿小程序&#x…

如何解决pycharm创建项目报错 Error occurred when installing package ‘requests‘. Details.

&#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;‘requests’ &#x1f6e0;️ 文章目录 &#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;requests &#x1f6e0;️摘要引言正文&#x1f4d8; **问题分析**&#x1f680; **更换Python版本…

《软件设计师教程:数据库系统基础知识大总结》

​ 个人主页&#xff1a;李仙桎 &#x1f525; 个人专栏: 《软件设计师》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ​ ⛺️前言&#xff1a;各位铁汁们好啊&#xff01;&#xff01;&#xff01;今天继续正式学习中级软件设计师考试相关的内容&#xff0c;后续不断更新…

【数据结构6--图】

目录 1 图2 图的定义和基本概念&#xff08;在简单图范围内&#xff09;3 图的类型定义4 图的存储结构4.1 邻接矩阵 表示法4.2 邻接表 表示法4.3 十字链表 表示法4.4 邻接多重表 表示法 5 图的遍历5.1 深度优先搜索-DFS 及 广度优先遍历-BFS 6 图的应用6.1 最小生成树6.1.1 克鲁…

黑马面试篇

课程地址&#xff1a;新版Java面试专题视频教程&#xff0c;java八股文面试全套真题深度详解&#xff08;含大厂高频面试真题&#xff09;_哔哩哔哩_bilibili 课程名称&#xff1a;新版Java面试专题视频教程&#xff0c;java八股文面试全套真题深度详解&#xff08;含大厂高频…

类和对象【下】

本节博客主要围绕构造函数、static成员、友元、内部类、匿名对象等待关于“类和对象”这些细节性知识进行收尾&#xff0c;有需要借鉴即可 类和对象_下目录 1.再谈构造函数1.1初始化列表1.2意义 2.static成员2.1概念2.2特性2.3习题 3.友元3.1友元函数概念3.2友元函数的特性 4.内…

物联网应用技术综合实训室解决方案

一、背景 随着物联网技术的快速发展和广泛应用&#xff0c;物联网产业已经成为新的经济增长点&#xff0c;对于推动产业升级、提高社会信息化水平具有重要意义。因此&#xff0c;培养具备物联网技术应用能力的高素质人才成为了迫切需求。 传统的教育模式往往注重理论教学&…

mPEG-VE,Methoxy-PEG-Vitamin E广泛应用于纳米新材料研究以及细胞培养等领域

【试剂详情】 英文名称 mPEG-Vitamin E&#xff0c;mPEG-VE&#xff0c; Methoxy-PEG-Vitamin E&#xff0c;Methoxy-PEG-VE 中文名称 甲氧基-聚乙二醇-维生素E 外观性状 由分子量决定&#xff0c;液体或者固体 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2…

LeetCode---394周赛

题目列表 3120. 统计特殊字母的数量 I 3121. 统计特殊字母的数量 II 3122. 使矩阵满足条件的最少操作次数 3123. 最短路径中的边 一、统计特殊字母的数量I 分别统计小写字母和大写字母是否出现&#xff0c;然后求交集即可&#xff0c;这里我们可以用数组统计&#xff0c;但…

PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波

中值滤波是什么&#xff1f; 图像的中值滤波是一种非线性图像滤波方法&#xff0c;它用于去除图像中的椒盐噪声或其他类型的噪声。中值滤波的原理是用每个像素周围的邻域中的中值来替代该像素的值。与均值滤波不同&#xff0c;中值滤波不会受到极端值的影响&#xff0c;因此在处…

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order&#xff0c;本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟。如果一个测试人员执行需要10…