SHT20温湿度传感器的I²C软硬件驱动实现详解

news2026/3/28 6:41:43
1. I²C通信实验SHT20温湿度传感器的软硬件实现详解I²CInter-Integrated Circuit总线作为一种经典的同步、半双工、多主从串行通信协议在嵌入式系统中被广泛应用于连接低速外设如传感器、EEPROM、实时时钟等。其仅需两根信号线SDA数据线与SCL时钟线、支持多设备挂载、硬件设计简洁等特性使其成为学习嵌入式外设驱动开发的理想切入点。本实验以Sensirion公司出品的SHT20数字温湿度传感器为具体对象系统性地剖析I²C通信在实际工程中的两种主流实现方式软件模拟Bit-banging与硬件外设Dedicated Peripheral。通过对比分析不仅可深入理解I²C协议的底层时序逻辑更能掌握在资源受限或特定约束条件下如何根据系统需求进行合理的技术选型与工程实现。1.1 SHT20传感器特性与系统定位SHT20是一款高精度、低功耗的CMOSens®数字温湿度传感器其核心优势在于将传感器元件、信号调理电路及14位ADC集成于单颗微型DFN封装内无需外部校准即可提供稳定可靠的环境参数。其关键电气与功能参数如下表所示参数类别具体指标说明测量范围温度-40°C ~ 125°C湿度0% ~ 100% RH全量程覆盖工业与消费类应用环境精度温度±0.3°C (25°C)湿度±2% RH (20–80% RH)出厂校准无需用户二次标定分辨率温度0.01°C湿度0.04% RH14位ADC输出提供精细数据粒度响应时间温度 5s湿度 8s在标准气流条件下达到90%响应接口协议标准I²C (SMBus兼容)支持100kHz与400kHz标准/快速模式器件地址7位固定地址0x40注意文档中提及的0x80为写地址0x40 1需要特别指出的是SHT20的数据手册明确其7位器件地址为0x40。原文档中出现的0x80和0x81是I²C总线上传输的8位地址字节其中最高位为读/写控制位R/W。因此0x80 0x40 1 | 0写操作0x81 0x40 1 | 1读操作。这一细节是I²C通信正确性的基础任何地址配置错误都将导致通信失败。SHT20支持主机Host与非主机No-Host两种测量模式。在非主机模式下传感器在执行测量任务时SCL线保持开放允许主控制器在等待期间处理其他总线事务显著提升了系统整体的实时性与资源利用率。本实验采用非主机模式其对应的温度与湿度测量命令分别为0xF3与0xF5。1.2 硬件连接与引脚配置原理I²C总线的物理层设计遵循严格的电气规范。SDA与SCL线均为开漏Open-Drain结构必须通过外部上拉电阻连接至电源VDD以确保在无设备驱动时总线处于高电平状态。上拉电阻值的选择至关重要阻值过小会导致总线驱动电流过大增加功耗并可能损坏IO口阻值过大则会使总线电平上升沿变缓无法满足高速通信的时序要求。对于标准模式100kHz和快速模式400kHz典型的上拉电阻范围为1kΩ至10kΩ具体值需结合总线电容、电源电压及驱动能力计算确定。本实验选用微控制器的PB8与PB9引脚作为I²C通信通道。该选择基于以下工程考量通用性与可移植性PB8/PB9是GPIOB端口上一对相邻引脚便于PCB布线且在多数MCU封装中均可用。硬件外设映射根据MCU数据手册PB8与PB9在复用功能AF4下分别对应I²C0外设的SCL与SDA信号。这为后续硬件I²C的实现提供了物理基础。软件模拟可行性作为通用GPIOPB8/PB9完全支持输入/输出模式的动态切换满足软件I²C对引脚电平精确控制的需求。引脚配置的核心在于正确设置其电气属性。无论是软件还是硬件I²CSDA与SCL引脚都必须配置为开漏输出Open-Drain并启用上拉Pull-up。这是因为I²C协议规定总线上的任何设备都只能将线路“拉低”而不能主动“推高”。上拉电阻负责在所有设备释放总线时将其恢复至高电平。若配置为推挽Push-Pull输出则当一个设备试图拉低而另一个设备误输出高电平时将形成直流通路造成大电流短路严重时可烧毁IO口。因此gpio_output_options_set(..., GPIO_OTYPE_OD, ...)与gpio_mode_set(..., ..., GPIO_PUPD_PULLUP, ...)是I²C引脚初始化中不可省略的关键步骤。1.3 软件I²CBit-banging的实现与剖析软件I²C即通过CPU直接操控GPIO引脚的电平状态来逐位模拟I²C协议所定义的起始、停止、数据传输、应答等时序。其实质是将硬件协议栈“软化”由软件代码精确控制每一个时序参数。这种方式不依赖于MCU内部的专用外设具有极高的灵活性与可移植性适用于所有具备足够GPIO资源与处理能力的微控制器。1.3.1 GPIO抽象层与宏定义为提升代码的可维护性与可移植性首先建立清晰的GPIO抽象层。所有与PB8/PB9相关的硬件操作均通过宏定义进行封装将具体的寄存器操作与业务逻辑解耦// SDA引脚PB9配置 #define RCU_SDA RCU_GPIOB #define PORT_SDA GPIOB #define GPIO_SDA GPIO_PIN_9 // SCL引脚PB8配置 #define RCU_SCL RCU_GPIOB #define PORT_SCL GPIOB #define GPIO_SCL GPIO_PIN_8 // 引脚模式切换宏 #define SDA_OUT() gpio_mode_set(PORT_SDA, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_SDA) #define SDA_IN() gpio_mode_set(PORT_SDA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_SDA) // 引脚电平读写宏 #define SDA_GET() gpio_input_bit_get(PORT_SDA, GPIO_SDA) #define SDA(x) gpio_bit_write(PORT_SDA, GPIO_SDA, (x ? SET : RESET)) #define SCL(x) gpio_bit_write(PORT_SCL, GPIO_SCL, (x ? SET : RESET))上述宏定义将底层的时钟使能RCU_*、端口选择PORT_*、引脚号GPIO_*以及模式设置SDA_OUT/IN全部封装起来。当需要将项目迁移到另一款MCU例如将PB9改为PA10时只需修改这六行宏定义而所有后续的I²C时序函数代码无需任何改动极大地降低了移植成本。1.3.2 GPIO初始化与时序控制引脚的初始化是软件I²C工作的前提。其核心任务是使能对应GPIO端口的时钟并将SDA/SCL引脚配置为开漏、上拉、50MHz速度的输出模式void iic_gpio_config(void) { /* 使能GPIOB端口时钟 */ rcu_periph_clock_enable(RCU_SCL); rcu_periph_clock_enable(RCU_SDA); /* 配置SCL为开漏输出50MHz */ gpio_mode_set(PORT_SCL, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_SCL); gpio_output_options_set(PORT_SCL, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_SCL); /* 配置SDA为开漏输出50MHz */ gpio_mode_set(PORT_SDA, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_SDA); gpio_output_options_set(PORT_SDA, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_SDA); }时序控制是软件I²C的灵魂。I²C协议对每个信号的最小高/低电平持续时间、建立/保持时间均有严格规定。例如在标准模式100kHz下SCL时钟周期最小为10μs高电平与低电平各至少4.7μs。本实验通过一个微秒级延时函数delay_us()来精确控制这些时间间隔。IIC_Start()函数的实现完美诠释了这一点void IIC_Start(void) { SDA_OUT(); // 确保SDA为输出模式 SDA(1); // SDA1 SCL(1); // SCL1 delay_us(5); // 保持高电平至少4.7μs SDA(0); // SDA由高变低SCL为高——起始条件 delay_us(5); // 建立时间 SCL(0); // 拉低SCL进入数据传输阶段 delay_us(5); }此函数严格遵循I²C规范在SCL为高时SDA由高变低即构成起始信号START。delay_us(5)的引入是为了确保每个电平状态的持续时间满足协议的最小要求从而保证通信的鲁棒性。同理IIC_Stop()、IIC_Send_Ack()等函数也均基于此原则构建。1.3.3 数据传输与SHT20通信流程软件I²C的数据传输函数IIC_Send_Byte()与IIC_Read_Byte()是整个协议栈的基石。IIC_Send_Byte()通过循环8次每次先设置SDA电平MSB优先再产生一个SCL脉冲先拉高再拉低完成一位数据的发送void IIC_Send_Byte(uint8_t dat) { int i 0; SDA_OUT(); SCL(0); for(i 0; i 8; i) { SDA((dat 0x80) 7); // 输出当前最高位 delay_us(1); SCL(1); // 产生时钟上升沿 delay_us(5); SCL(0); // 产生时钟下降沿 delay_us(5); dat 1; // 左移准备下一位 } }SHT20的非主机模式读取流程是一个典型的“写-读”复合操作。其完整步骤如下起始 写地址发送START信号随后发送SHT20的写地址0x80等待从机应答ACK。发送测量命令在确认地址有效后发送测量命令0xF3温度或0xF5湿度再次等待ACK。起始 读地址发送一个新的START信号随后发送SHT20的读地址0x81等待ACK。读取数据连续读取3个字节高8位数据MSB、低8位数据LSB、校验字节CRC。在读取前两个字节后主设备需发送ACK在读取第三个字节后发送NACK并发出STOP信号。SHT20_receive_data()函数正是对这一流程的精准封装。其关键点在于对状态位的处理SHT20返回的16位原始数据中低8位的最低两位bit[1:0]并非测量数据而是状态位bit1标识数据类型。因此在数据整合后必须执行dat ~(0x03)操作将这两个无关位清零才能得到纯净的14位测量值。1.4 硬件I²C外设的配置与驱动硬件I²C是MCU内部集成的专用通信外设它将I²C协议的物理层与数据链路层固化于硅片之中。CPU只需通过寄存器配置其工作参数并通过简单的读写指令触发数据收发外设硬件会自动完成时序生成、应答处理、错误检测等繁重任务。这极大地解放了CPU资源提升了通信效率与系统稳定性。1.4.1 复用功能AF配置使用硬件I²C的前提是将对应的GPIO引脚配置为复用功能Alternate Function模式。这与软件I²C的普通GPIO模式有本质区别。配置过程分为三步使能时钟为GPIO端口和I²C外设本身使能时钟。设置复用功能调用gpio_af_set()函数将PB8/PB9的复用功能号AF4映射到I²C0的SCL/SDA信号。配置引脚模式将引脚模式设为复用推挽GPIO_MODE_AF或复用开漏GPIO_MODE_AF并同样配置为上拉、开漏、50MHz。/* 使能GPIOB与I2C0时钟 */ rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_I2C0); /* 将PB8/PB9配置为AF4复用功能 */ gpio_af_set(GPIOB, GPIO_AF_4, GPIO_PIN_8 | GPIO_PIN_9); /* 配置为复用开漏输出上拉 */ gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_8 | GPIO_PIN_9); gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_8 | GPIO_PIN_9);1.4.2 外设参数初始化硬件I²C的初始化是其正常工作的核心。主要配置项包括时钟速率Clock Speed通过i2c_clock_config()函数设定。本实验配置为400kHz快速模式以匹配SHT20的能力。该函数内部会根据系统APB1总线频率自动计算并设置I²C时钟分频寄存器CKL与CKH确保SCL输出波形的占空比与频率符合规范。寻址模式Addressing ModeSHT20为7位地址设备故调用i2c_mode_addr_config()配置为7位地址格式并设置其地址为0x40。使能与应答最后调用i2c_enable()开启外设并通过i2c_ack_config()启用应答功能使外设能在接收到地址后自动拉低SDA线。/* I2C0外设初始化 */ i2c_deinit(I2C0); // 复位外设 i2c_clock_config(I2C0, 400000, I2C_DTCY_2); // 400kHz, 占空比2:1 i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x40); i2c_enable(I2C0); i2c_ack_config(I2C0, I2C_ACK_ENABLE);1.4.3 基于中断/轮询的通信驱动硬件I²C的驱动通常采用轮询Polling方式即CPU不断查询外设的状态标志位Flag以判断当前操作是否完成。iic_hardware_get_data()函数展示了这一模式写操作调用i2c_start_on_bus()发起起始信号然后轮询I2C_FLAG_SBSEND起始位发送完成和I2C_FLAG_ADDSEND地址发送完成标志。待地址发送成功后将测量命令写入数据寄存器并轮询I2C_FLAG_TBE发送缓冲区空和I2C_FLAG_BTC字节传输完成。读操作同样发起起始信号并发送读地址。在接收数据前需先使能应答I2C_ACK_ENABLE以接收前两个字节在接收最后一个字节前需禁用应答I2C_ACK_DISABLE以向从机表明这是最后一次读取从而促使从机在发送完该字节后释放总线。这种轮询方式虽然简单直接但会占用CPU时间。在对实时性要求极高的系统中可考虑使用中断Interrupt或DMADirect Memory Access方式让CPU在等待期间执行其他任务从而提升系统整体效率。1.5 软硬件I²C方案对比与工程选型指南对比维度软件I²CBit-banging硬件I²CPeripheralCPU资源占用高。通信全程占用CPU执行大量GPIO操作与延时。极低。CPU仅在启动/结束时介入数据收发由硬件自动完成。通信可靠性中等。易受CPU负载、中断延迟影响时序抖动较大。高。硬件固化时序抗干扰能力强符合协议严格规范。开发复杂度高。需深入理解协议时序手动编写并调试每一行时序代码。低。仅需配置寄存器调用标准库API开发周期短。可移植性极高。代码逻辑与MCU无关仅需适配GPIO宏定义。低。高度依赖MCU厂商提供的外设驱动库与寄存器定义。引脚灵活性极高。可使用任意GPIO引脚不受硬件限制。低。必须使用数据手册中指定的、具有I²C复用功能的引脚。功耗相对较高。CPU需持续运行以维持时序。相对较低。CPU可在等待期间进入低功耗模式。适用场景- 学习协议原理- MCU无硬件I²C外设- 需要特殊时序如超低速- 引脚资源紧张需复用I²C引脚为其他功能- 商业化产品追求稳定性与效率- 高速通信100kHz- 实时性要求高的系统- 开发周期紧张在实际工程项目中硬件I²C应为首选。它代表了嵌入式系统设计的工程化思维将确定性、重复性的工作交给硬件让软件专注于业务逻辑。然而软件I²C的价值绝非仅限于“备胎”。它是理解数字通信底层原理的绝佳途径。当面对一个全新的、资料匮乏的传感器时能够手写一套可靠的软件I²C驱动往往比等待厂商提供不完善的SDK更为高效。此外在调试硬件I²C故障时一套已验证的软件I²C驱动可以作为“黄金参考”帮助工程师快速判断问题是出在硬件连接、电源噪声还是外设配置错误。1.6 主程序集成与系统验证最终将I²C驱动集成到主应用程序中完成端到端的功能验证。主函数的结构清晰体现了嵌入式系统的典型范式初始化、主循环、任务调度。int main(void) { systick_config(); // 配置SysTick定时器为delay_us()提供基准 usart_gpio_config(9600U); // 初始化串口用于打印调试信息 // 选择一种I²C实现方式 // iic_gpio_config(); // 软件I²C初始化 iic_hardware_config(); // 硬件I²C初始化 delay_1ms(20); // 等待SHT20上电完成数据手册要求最小15ms while(1) { // 采集并打印温度 printf(temp %.2f\r\n, SHT20_receive_data(0xf3)); // 采集并打印湿度 printf(humi %.2f\r\n, SHT20_receive_data(0xf5)); delay_1ms(500); // 500ms采样周期 } }串口输出的结果是整个系统正确性的最终证明。一个稳定的、符合预期的温湿度数值流意味着从硬件连接、引脚配置、时序生成、协议解析到数据换算的每一个环节都经受住了考验。这不仅是技术实现的成功更是工程严谨性的体现。2. 关键器件BOM清单本实验所涉及的核心器件及其选型依据如下表所示。所有器件均为工业级标准易于采购且在长期供货方面具有保障。序号器件名称型号/规格数量选型依据备注1微控制器GD32F103C8T6 (或同等性能MCU)1具备丰富的GPIO资源、内置I²C外设、成熟稳定的GD32系列生态主控芯片2温湿度传感器SHT201高精度、低功耗、I²C接口、业界标杆核心传感元件3上拉电阻4.7kΩ, 0603, ±1%2标准I²C上拉值兼顾功耗与上升沿速度SDA与SCL各一颗4电源滤波电容100nF, 0603, X7R2为MCU与SHT20的VDD引脚提供高频去耦靠近芯片电源引脚放置5电源稳压器AMS1117-3.31将5V输入稳定降至3.3V为MCU与SHT20供电若系统已有3.3V电源可省略3. 总结从协议到实践的工程闭环I²C实验远不止于“点亮一个传感器”。它是一条贯穿理论与实践、软件与硬件、学习与工程的完整链条。从SHT20数据手册中提取7位地址0x40到在代码中正确构造0x80/0x81的传输字节从理解开漏输出与上拉电阻的电气意义到在GPIO配置中精准设置GPIO_OTYPE_OD从手写delay_us(5)来模拟时序到调用i2c_clock_config()让硬件自动生成波形——每一步都是对嵌入式系统底层逻辑的叩问与实践。一个合格的嵌入式硬件工程师其价值不仅在于能写出能跑的代码更在于能讲清楚“为什么这样写”。当IIC_Wait_Ack()函数在循环中反复查询SDA_GET()并配合delay_us(5)时他看到的不是几行代码而是I²C总线上那个由从机发出的、微弱却坚定的低电平应答信号以及这个信号背后所代表的设备在线、地址匹配、通信就绪的全部含义。这种将抽象协议具象为物理世界中真实电信号的能力是经验的沉淀更是工程师职业尊严的基石。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…