CW32驱动S12SD紫外线传感器:I2C通信、数据解析与嵌入式实践

news2026/5/21 5:28:21
1. 项目概述与核心需求解析最近在做一个户外环境监测的小玩意儿需要实时监测紫外线强度选来选去最终敲定了S12SD这款紫外线传感器模块。之所以选它一方面是因为它直接输出数字信号省去了模拟信号调理的麻烦另一方面是它的体积小巧功耗也低非常适合嵌入式应用。我手头正好有CW32的开发板就想着把这两者结合起来快速搭建一个紫外线监测的原型。这个项目的核心需求很明确通过CW32微控制器读取S12SD传感器输出的紫外线指数UVI并将数据通过串口打印出来方便后续的数据记录或无线传输。听起来很简单对吧但实际操作起来从硬件连接到软件配置再到数据校准每一步都有不少细节需要注意。比如S12SD的通信协议是I2C还是UART它的数据格式是怎样的CW32的I2C外设如何正确初始化如何将原始数据转换成我们熟悉的紫外线指数这些都是我们需要一一解决的问题。我打算在这篇分享里把整个从零开始的过程都捋一遍包括硬件接线、驱动编写、数据解析以及一些我踩过的坑和调试技巧。无论你是刚接触CW32的新手还是想快速上手S12SD传感器相信这篇内容都能给你提供一个清晰的参考路径。2. 硬件准备与连接要点2.1 核心器件选型与特性分析首先我们得搞清楚手头的“武器”。S12SD是一款基于硅光电二极管的紫外线传感器它内部集成了信号放大和模数转换电路所以能直接通过数字接口输出数据。我用的这款模块通常有四个引脚VCC、GND、SDA和SCL这说明它支持I2C通信。这一点非常重要在购买或使用前一定要确认你的模块接口类型。CW32我选用的是CW32F030系列的一款核心板它基于ARM Cortex-M0内核资源足够丰富最关键的是它的I2C外设用起来比较顺手官方提供的库函数也相对完善。选择MCU时你需要确保它至少有一个可用的I2C主机接口。当然如果你手头的CW32型号没有硬件I2C用GPIO模拟软件I2C也是完全可行的只是时序需要自己严格把控。除了主控和传感器你还需要一些杜邦线用于连接一个3.3V的电源CW32和S12SD通常都工作在这个电压以及一个USB转串口模块用于在电脑上查看打印的数据。如果是在面包板上搭建记得准备一块面包板。2.2 电路连接与电源注意事项接线是第一步也是最容易出错的一步。S12SD模块的引脚定义一般如下VCC: 接3.3V电源。这里有个大坑一定要确认你的模块工作电压虽然大多数兼容3.3V但有些老版本或不同厂家的模块可能要求5V。接错电压很可能直接烧毁传感器。最稳妥的方法是查阅你购买模块时附带的资料或询问卖家。GND: 接电源地与CW32共地。SDA: I2C数据线连接CW32的某个GPIO口并将其配置为I2C的SDA功能。SCL: I2C时钟线连接CW32的某个GPIO口并将其配置为I2C的SCL功能。以CW32F030为例我选择了PA2作为SDAPA1作为SCL因为这两个引脚复用了I2C1的功能。在你的CW32数据手册或引脚复用表中可以找到支持I2C功能的引脚对。连接时一个常见的优化是给I2C总线加上拉电阻。虽然CW32的I2C接口和部分S12SD模块内部可能已经集成了上拉但为了总线稳定性尤其是在导线较长或通信速度较快时我强烈建议在SDA和SCL线上各接一个4.7kΩ到10kΩ的上拉电阻到3.3V。这能有效改善信号质量避免通信失败。注意确保CW32和S12SD使用同一个电源地GND。所有数字电路的稳定通信都建立在共地的基础上地线连接不良是许多诡异通信问题的根源。3. CW32开发环境搭建与I2C驱动基础3.1 工程创建与库函数引入我使用的是Keil MDK作为开发环境。首先需要从武汉芯源半导体官网下载CW32F030的Device Family PackDFP和标准外设库FWLib。安装好DFP后才能在Keil里选择CW32的芯片型号。新建工程时关键一步是把必要的外设库文件添加到工程中。对于I2C操作我们至少需要cw32f030_i2c.c(I2C外设的驱动源文件)cw32f030_rcc.c(时钟配置因为I2C需要时钟源)cw32f030_gpio.c(用于配置SDA和SCL引脚的功能)对应的头文件.h通常我会在工程里建立一个Drivers文件夹把这些库文件放进去然后在项目设置中正确包含头文件路径。别忘了在main.c的开头包含这些头文件#include “cw32f030.h”以及#include “cw32f030_i2c.h”等。3.2 I2C外设初始化配置详解初始化是驱动工作的基石这里每一步都有讲究。第一步开启外设时钟。I2C和GPIO都是外设需要先给它们“上电”。RCC_APBPeriphClk_Enable(RCC_APB_PERIPH_I2C1, ENABLE); // 使能I2C1时钟 RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOA, ENABLE); // 使能GPIOA时钟假设用PA1, PA2第二步配置GPIO复用功能。把普通的GPIO引脚切换成I2C专用的SDA和SCL功能。GPIO_InitTypeDef GPIO_InitStructure {0}; // 配置PA2为SDA GPIO_InitStructure.Pins GPIO_PIN_2; GPIO_InitStructure.Mode GPIO_MODE_OUTPUT_OD; // 开漏输出这是关键。 GPIO_InitStructure.Speed GPIO_SPEED_HIGH; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PIN_2, GPIO_AF4_I2C1); // 复用为I2C1_SDA // 配置PA1为SCL配置同上 GPIO_InitStructure.Pins GPIO_PIN_1; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PIN_1, GPIO_AF4_I2C1); // 复用为I2C1_SCL这里最容易出错的就是GPIO_MODE_OUTPUT_OD开漏输出模式。I2C总线是“线与”结构必须使用开漏模式配合外部上拉电阻才能实现多主多从和设备间的电平兼容。如果误设为推挽输出可能会造成总线冲突甚至损坏器件。第三步配置I2C主机参数。包括通信速率、自身地址等。I2C_InitTypeDef I2C_InitStructure {0}; I2C_InitStructure.Mode I2C_MODE_MASTER; // 主机模式 I2C_InitStructure.ClockSpeed 100000; // 100kHz标准模式。S12SD通常够用也可尝试400kHz快速模式 I2C_InitStructure.OwnAddr 0x00; // 作为主机自身地址可以设为0或不关心 I2C_InitStructure.AddrMode I2C_ADDR_MODE_7BIT; // 7位地址模式 I2C_InitStructure.DutyCycle I2C_DUTYCYCLE_2; // 时钟占空比标准模式下此参数通常无效 I2C_Init(I2C1, I2C_InitStructure); I2C_Cmd(I2C1, ENABLE); // 最后使能I2C外设通信速率ClockSpeed需要根据传感器手册和总线负载来设定。对于S12SD100kHz是安全通用的选择。如果你追求更高的读取频率可以尝试400kHz但务必先用逻辑分析仪或示波器检查一下波形是否干净有无过冲或振铃。4. S12SD传感器驱动开发与数据读取4.1 传感器地址确认与通信协议解析在写读写函数之前我们必须知道传感器的“门牌号”——I2C设备地址。根据我查阅的S12SD数据手册它的7位I2C地址通常是0x60。但这里有个 industry common practiceI2C读写操作时需要将7位地址左移一位并在最低位加上读写位0为写1为读。所以写操作的目标地址0x60 1 0xC0读操作的目标地址(0x60 1) | 0x01 0xC1有些厂家的模块地址可能不同最好用I2C地址扫描工具确认一下。CW32的库函数I2C_CheckAddress可以用于地址探测或者你也可以写一个简单的扫描程序遍历所有可能的地址看哪个有ACK响应。S12SD的数据读取流程一般是主机发送起始条件Start。主机发送设备写地址0xC0。传感器应答ACK。主机发送要读取的数据寄存器地址对于S12SD通常紫外线数据存放在固定的寄存器比如0x00。传感器应答ACK。主机发送重复起始条件Repeated Start。主机发送设备读地址0xC1。传感器应答ACK。主机读取一个或多个字节数据每读一个字节主机需要发送ACK最后一个字节前或NACK最后一个字节后。主机发送停止条件Stop。4.2 数据读取函数实现与封装理解了协议我们就可以用CW32的库函数来封装读取操作了。CW32的库提供了相对底层的状态机操作函数我们需要按照状态流程来编写。下面是一个读取两个字节紫外线数据的函数示例#define S12SD_ADDR_WRITE 0xC0 #define S12SD_ADDR_READ 0xC1 #define S12SD_DATA_REG 0x00 // 假设数据寄存器地址为0x00 uint16_t S12SD_ReadUVData(void) { uint8_t data_high 0, data_low 0; uint16_t uv_raw 0; // 1. 产生起始条件 I2C_GenerateSTART(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); // 等待EV5 // 2. 发送写地址 I2C_Send7bitAddress(I2C1, S12SD_ADDR_WRITE, I2C_DIRECTION_TX); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); // 等待EV6 // 3. 发送要读取的寄存器地址 I2C_SendData(I2C1, S12SD_DATA_REG); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // 等待EV8 // 4. 产生重复起始条件 I2C_GenerateSTART(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); // 等待EV5 // 5. 发送读地址 I2C_Send7bitAddress(I2C1, S12SD_ADDR_READ, I2C_DIRECTION_RX); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); // 等待EV6 // 6. 准备读取第一个字节数据高字节读取后发送ACK I2C_AcknowledgeConfig(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); // 等待EV7 data_high I2C_ReceiveData(I2C1); // 7. 准备读取第二个字节数据低字节读取后发送NACK while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); data_low I2C_ReceiveData(I2C1); I2C_AcknowledgeConfig(I2C1, DISABLE); // 发送NACK // 8. 产生停止条件 I2C_GenerateSTOP(I2C1, ENABLE); uv_raw (data_high 8) | data_low; return uv_raw; }这段代码是典型的“查询式”编程通过不断检查标志位来等待每个I2C事件完成。你需要非常熟悉I2C的时序和这些事件标志EV5, EV6, EV8, EV7的含义。在调试时如果卡在某个while循环里出不来基本就是通信失败了需要检查硬件连接、地址、上拉电阻和时序。实操心得CW32的I2C库在处理重复起始条件时比较稳定但一定要确保在发送读地址前已经正确产生了重复起始。顺序错了传感器就不会响应。5. 紫外线数据解析、校准与显示5.1 原始数据到紫外线指数的转换读回来的uv_raw是一个16位的原始数字量我们需要把它转换成有物理意义的紫外线指数UVI。这个转换关系取决于传感器的灵敏度和设计。查阅S12SD的数据手册通常它会提供一个灵敏度系数单位可能是 counts/(mW/cm²) 或者 counts/(UVI)。假设手册说明在某个特定波长下灵敏度为X counts per UVI。那么计算公式很简单UVI uv_raw / X例如如果灵敏度是200 counts/UVI读到的uv_raw是1500那么UVI 1500 / 200 7.5。但是这里有一个至关重要的点环境光中的可见光和红外光也会被硅光电二极管感知从而干扰紫外线测量。高质量的紫外线传感器会内置一个可见光截止滤光片但普通模块可能没有或者效果有限。因此更严谨的做法是进行“光谱校准”或至少是“零点校准”。一个实用的方法是在完全无紫外线的环境比如晚上或者用厚实的不透紫外线材料完全盖住传感器下读取一个值记为dark_count。这个值代表了传感器对非紫外光的响应基线。那么净紫外线响应值应该是uv_net uv_raw - dark_countUVI uv_net / X你可以在程序初始化时或者在每次上电后先读取并保存这个dark_count。5.2 串口输出与简单数据可视化为了能看到结果我们需要把计算出的UVI通过串口发送到电脑。CW32的UART配置相对简单这里简要带过使能UART和对应GPIO时钟。配置TX如PA9、RX如PA10引脚为复用推挽输出和浮空输入。配置UART参数波特率常用115200、数据位8、停止位1、无校验。使能UART。然后可以写一个简单的printf重定向函数到串口或者直接使用库函数UART_SendData来发送数据。在main函数的循环中我们可以这样组织int main(void) { // 系统时钟、I2C、UART初始化... uint16_t dark_count 0; float uvi 0.0f; const float sensitivity 200.0f; // 根据你的传感器手册修改 // 延时等待传感器稳定 Delay_ms(1000); // 读取暗计数盖住传感器或夜间操作 dark_count S12SD_ReadUVData(); printf(“Dark Count: %d\r\n”, dark_count); while(1) { uint16_t raw_data S12SD_ReadUVData(); uvi ( (float)(raw_data - dark_count) ) / sensitivity; if(uvi 0) uvi 0.0f; // 确保指数不为负 printf(“Raw: %d, UVI: %.2f\r\n”, raw_data, uvi); // 根据UVI值给出简单提示 if(uvi 3) printf(“Low UV\r\n”); else if(uvi 6) printf(“Moderate UV\r\n”); else if(uvi 8) printf(“High UV\r\n”); else if(uvi 11) printf(“Very High UV\r\n”); else printf(“Extreme UV\r\n”); Delay_ms(2000); // 每2秒读取一次 } }在电脑上使用串口助手如Putty、SecureCRT或VS Code的串口插件打开对应的COM口设置相同的波特率就能看到实时输出的紫外线指数和等级提示了。6. 调试过程中遇到的典型问题与解决方案6.1 I2C通信完全失败卡在起始条件这是最令人头疼的问题。现象是程序一开始就卡在while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));这里。排查思路硬件第一用万用表检查VCC和GND是否接通电压是否为3.3V。检查SDA和SCL线是否连接牢固。上拉电阻确保SDA和SCL线上有上拉电阻4.7kΩ-10kΩ。没有上拉总线始终为低无法产生起始条件。引脚配置反复确认GPIO是否配置为开漏输出GPIO_MODE_OUTPUT_OD。这是最容易被忽略的错误。地址问题用逻辑分析仪或示波器抓取I2C波形看主机发出的地址是否正确0xC0。也可以写一个I2C地址扫描程序遍历0x08到0x777位地址左移一位后的范围看哪个地址有ACK响应。传感器是否就绪有些传感器上电后需要几毫秒到几十毫秒的初始化时间。在I2C初始化后加一个Delay_ms(10)再开始通信。6.2 能收到数据但数值固定不变或明显不合理现象串口输出的uv_raw值一直不变或者在没有紫外线照射时也有一个很高的基数。解决方案检查暗计数校准确保你在合适的条件下获取了dark_count。室内日光灯下也可能有少量紫外线最好像前文说的在完全无紫外的环境下校准。验证灵敏度系数仔细核对数据手册中的灵敏度参数X。不同批次、不同厂家的传感器可能有差异。如果可能找一个已知强度的紫外线源需谨慎勿直视进行对比测试反向校准出实际的灵敏度系数。检查数据寄存器地址确认你读取的寄存器地址代码中的S12SD_DATA_REG确实是存放紫外线数据的寄存器而不是状态寄存器或别的什么。这需要仔细阅读传感器数据手册。电源噪声电源不稳定会给传感器内部的ADC带来噪声。尝试在VCC和GND之间并联一个10uF的电解电容和一个0.1uF的陶瓷电容靠近传感器引脚放置进行电源滤波。6.3 通信间歇性失败偶尔能读到数据现象大部分时间读不到数据或出错但偶尔又能成功一次。排查思路总线电容与上拉电阻总线导线过长、连接设备过多会导致总线电容过大信号上升沿变缓。可以尝试减小上拉电阻的阻值如从10kΩ换成4.7kΩ以提供更强的上拉电流加快上升速度。但注意电阻不能太小否则电流过大会超过GPIO的驱动能力。通信速率将I2C时钟速度从100kHz降低到50kHz甚至更低看是否变得稳定。低速模式容错性更高。软件延时在关键操作如START、STOP、发送地址后增加微秒级的短暂延时给总线一个稳定的时间。CW32的库函数本身有等待超时机制但有时外设响应慢需要额外等待。中断干扰如果系统中开启了其他高优先级中断可能会打断I2C通信的时序。尝试在I2C读写关键序列前后关闭全局中断操作完成后再打开。7. 项目优化与扩展思路基础功能实现后我们可以考虑让它变得更实用、更可靠。7.1 软件滤波与数据平滑传感器读数难免会有微小跳动。为了显示更稳定可以在软件中加入滤波算法。最简单有效的是移动平均滤波。#define FILTER_SIZE 5 uint16_t raw_buffer[FILTER_SIZE] {0}; uint8_t buffer_index 0; uint16_t MovingAverage_Filter(uint16_t new_value) { raw_buffer[buffer_index] new_value; buffer_index (buffer_index 1) % FILTER_SIZE; uint32_t sum 0; for(int i0; iFILTER_SIZE; i) { sum raw_buffer[i]; } return (uint16_t)(sum / FILTER_SIZE); }在main循环中将读到的raw_data先经过这个滤波函数再用滤波后的值计算UVI。FILTER_SIZE可以根据需要调整越大越平滑但响应也会变慢。7.2 低功耗设计与间歇采样对于电池供电的户外监测设备功耗是关键。CW32F030支持低功耗模式S12SD传感器也可以被控制进入休眠。思路MCU休眠在两次采样间隔让CW32进入SLEEP或STOP模式。可以通过RTC定时唤醒或者外部中断唤醒。传感器断电如果S12SD模块支持通过一个GPIO控制电源通断可以在不采样时彻底切断其供电实现零功耗。采样前再上电并等待几十毫秒初始化。降低采样率根据应用场景将采样间隔从2秒延长到10秒、1分钟甚至更长能大幅降低平均功耗。实现低功耗后配合一个小容量锂电池这个紫外线监测仪连续工作数周甚至数月将成为可能。7.3 数据上传与云端记录单一的串口输出限制了应用场景。我们可以很容易地扩展蓝牙传输接入一个HC-05或BLE模块将UVI数据发送到手机APP实现便携式紫外线监测仪。Wi-Fi上传使用ESP-01S等Wi-Fi模块将数据发送到云平台如阿里云、腾讯云IoT实现远程监控和历史数据查询。本地显示连接一个小型OLED屏幕实时显示UVI数值和等级做成一个独立的桌面摆件。这些扩展的核心就是将我们已经在串口上格式化的数据流改为通过新的通信接口UART、SPI发送给另一个无线模块。CW32丰富的通信外设让这些扩展变得非常直接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2626268.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…