当前位置: 首页 > news >正文

7.DTH11和PWM波

目录

室内/本地温湿度检测

温湿度传感器介绍

获取手册和例程的方法

从手册中提取重要信息

传感器的分类

温度传感器类型

DHT11 的介绍

温湿度传感器的接口

温湿度传感器的时序

温湿度传感器电路介绍

IO 的配置

定时器输出 PWM 波

PWM 波介绍

PWM 波的作用:

基本定时器知识

输出 PWM 波

通用定时器输出 PWM 波

PWM 波相关的硬件

PWM 波代码实现

代码


室内/本地温湿度检测 

温湿度传感器介绍

        获取温度和湿度 -- DHT11 

获取手册和例程的方法

找厂家官网  立创商城

从手册中提取重要信息

        供电: 

                接口:常见的接口

        数字接口:串口 单总线 IIC SPI CAN 

        模拟接口:ADC 

        协议数据格式:有了物理层,如何确定能够通信上,获取数据

传感器的分类

        数字接口的传感器: 

                串口 单总线 IIC SPI CAN 这些接口一般都是数字接口的传感器 

        模拟接口的传感器: 

                电压接口或者电流接口这种叫做模拟接口传感器,采集模拟接口的传感器就需要用 ADC 

温度传感器类型

        常见的温度传感器(热敏电阻)-PT100 NTC1000

        NTC 和 PTC 一个是正温度系数,一个是负温度系数,正温度系数 温度越高,电阻越大,负温度系数,温度越高,电阻越小

DHT11 的介绍

 

温湿度传感器的接口

温湿度传感器的时序

        主从结构:主机主动发送,从机被动回复,从机不能主动发送数据 

温湿度传感器电路介绍

IO 的配置

        (1)配置成开漏输出 

                开漏只能输出低电平,通过上拉电阻实现高电平,空闲的时候(双方都不拉低的时候)就是高电平 

        (2)配置成通用推挽输出和浮空输入两种模式切换 

                主机控制部分,配置成通用推挽输出

                从机控制部分,配置成浮空输入 

定时器输出 PWM 波

PWM 波介绍

        PWM 波 -- 脉宽可调制波形 

        脉宽:指高电平持续的时间 

        占空比:一个周期内 高电平的时间占总周期的的百分比 

PWM 波的作用:

        1. 呼吸灯 

                本质上是快速的亮灭在切换,人眼有视觉暂留,区分不出来 

                相同周期内亮灭的时间不一致,人眼能察觉出来亮度不一样 

        2. 电机调速 

                和呼吸灯的原理是一样的 

                呼吸灯和电机调速都是惯性系统(不会立马停止) 

        3. 通信 -- 抗干扰能力比较强 

                电动汽车充电桩里面 和 舵机 

                27% 3.5KW 

                54% 7KW 

                舵机 不同占空比转动不同的角度 

        4. 输出 0--到 Vmax 之间的任意电压

                 面积等效原理 

                设备没有 2.5V 的电源,想实现 2.5V 的电压输出,就用上面的面积等效方法。就可以输出 0--5V 的任意电压,这个功能叫做 DAC(数字量转换模拟量)

基本定时器知识

        系统(滴答)定时器 -- systick -- 内核 ARM 公司 

        基本定时器 -- TIM6 TIM7 -- 只有基本的定时器功能

        通用定时器 -- TIM2 TIM3 TIM4 TIM5 -- 基本定时器功能+PWM+输入捕获 

        高级定时器 -- TIM1 TIM8 -- 通用定时器的基础上 + 死区 +刹车(电机使用) 

        窗口看门狗 独立看门狗 RTC --本质上都是定时器 

        看门狗防止程序跑飞 

        时基单元 

        外设时钟的频率 所有的定时器都是 F=72M 

        预分频值 PSC 

        分频之后的计数的频率(CK_CNT) f=F/PSC 

        计一次数(更新 1 次数)的时间 t=1/f 

        重装载值 ARR 

        计数的周期 T= ARR*t=ARR*PSC/F 

输出 PWM 波

        (1) 定时器 + 手动 IO 翻转 

                比较值 30 

                重装载值 99 

                向上计数 

                当计数值<比较值 IO 口输出高电平 

                当计数值>比较值 IO 口输出低电平 

                注意:自己比较,IO 配置成通用推挽输出 

        (2) 带 PWM 波功能的通用定时器 

                比较值 30 

                重装载值 99 

                向上计数 

                当计数值<比较值 IO 口输出高电平 

                当计数值>比较值 IO 口输出低电平 

                注意:通过定时器的 PWM 外设自动比较,IO 配置成复用推挽输出

通用定时器输出 PWM 波

        基本定时器:没有 PWM 输出的功能,需要手动翻转 IO 口输出 PWM 

        重装载值和预分频值决定 PWM 频率和周期

        比较值和重装载值决定占空比 

        根据上图可得,每个通用(或者高级)定时器有 4 个 PWM 的输出端口,4 个通道周期是一致的,但是比较值(占空比)可以不一致 

        TIM6 和 TIM7 只有向上计数,其他定时器可以选择,向上计数,向下计数和中央对齐模式 

 

重点关注: 

        ARR 100(TIMx_ARR) 比较值 66(TIMx_CCR ) 

        PWM 模式 (TIMx_CCMRx 位 6:4)有效电平(TIMx_CCER 位 CCxP 位 1) 

PWM1 有效电平是高电平

        向上计数 0—66 输出有效电平(高电平) 66—100 输出无效电平(低电平) 占空比 CCR/ARR 

        向下计数 100—66 输出无效电平(低电平) 66—0 输出有效电平(高电平) 占空比 CCR/ARR 

PWM1 有效电平是低电平

        向上计数 0—66 输出有效电平(低电平) 66—100 输出无效电平(高电平) 占空比 (ARR-CCR)/ARR 

        向下计数 100—66 输出无效电平(高电平) 66—0 输出有效电平(低电平) 占空比 (ARR-CCR)/ARR 

PWM2 有效电平是高电平

PWM2 有效电平是低电平

        注意: CCR/ARR 并不一定是占空比,取决于 PWM 模式和有效电平,如果想 CCR/ARR 就是占空比,应该选择 PWM1,有效电平高电平或者 PWM2,有效电平低电平 

PWM 波相关的硬件

        LED1—LED4 所接的引脚,没有 TIMx_Chy 的标识,无法使用定时器的 PWM 功能,但是可以通过手动翻转 IO 控制 LED 灯亮度 

        RGB 接的引脚标识 TIMx_Chy,所以可以使用 TIM 的 PWM 功能

PWM 波代码实现

需要配置的结构体

        GPIO 模式

TIM

        决定了 PWM 波的周期和频率 

输出 PWM 有关的结构体 

        决定了 PWM 波的占空比

代码

DHT11

void DHT11_Config(void)
{//1.开G端口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);//2.定义结构体 xxx需要传递结构体地址GPIO_InitTypeDef GPIO_InitStruct = {0};//3.给结构体赋值GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;//代配置引脚GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;//通用开漏GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//引脚速率GPIO_Init(GPIOG, &GPIO_InitStruct);//先释放总线,因为刚开始就是高电平,不拉低GPIO_SetBits(GPIOG,GPIO_Pin_11);
}uint8_t DHT11_Handle(void)
{uint8_t Time_out = 0;uint8_t i,j;uint8_t Buff[5]={0};uint8_t Data_Cs=0;//和校验//主机先拉低 位置1GPIO_ResetBits(GPIOG,GPIO_Pin_11);Delay_ms(18);//释放总线 位置2GPIO_SetBits(GPIOG,GPIO_Pin_11);//等待响应信号的低电平部分,低电平没到来之前一直是高电平while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_11)==Bit_SET){//还未等到响应信号的低电平Time_out++;Delay_us(1);if(Time_out>=100){//设备异常,响应失败,应答失败return 0;}}//等到响应信号低电平,然后时序到拉高准备输出,高电平没到来前一直是低电平 位置3Time_out=0;while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_11)==Bit_RESET){//还未等到响应信号的高电平Time_out++;Delay_us(1);if(Time_out>=100)//传感器总线先拉低{//100us中有83us是响应信号的低电平,剩下17us等待响应信号高电平,如果17秒没等到,设备异常返回return 0;}}for(i=0;i<5;i++){//5次for(j=0;j<8;j++){//一次8位Time_out=0;//刚等到响应信号的高电平,等待数据位的低电平部分,数据位低电平没有到来之前,一直是高电平,位置4while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_11)==Bit_SET){//还未等到响应信号的高电平Time_out++;Delay_us(1);if(Time_out>=100)//在拉高以 响应主机的起始信号{//100us中有87us是响应信号的高电平,剩下13us等待响应信号低电平,如果13秒没等到,设备异常返回return 0;}}Time_out=0;//刚等到数据位的低电平,等待数据位的高电平部分,数据位高电平没有到来之前,一直是低电平,位置5while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_11)==Bit_RESET){//还未等到响应信号的高电平Time_out++;Delay_us(1);if(Time_out>=100){//100us中有54us是响应信号的低电平,剩下46us等待响应信号高电平,如果46秒没等到,设备异常返回return 0;}}//刚等到数据位的高电平,延时30us,去区分收到的数据是0还是1,到位置6Delay_us(30);if((GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_11)==Bit_RESET)){//数据0,高位先发Buff[i] &= ~(0x01<<(7-j));		}else{//数据1,高位先发Buff[i] |= (0x01<<(7-j));}}}Data_Cs=Buff[0]+Buff[1]+Buff[2]+Buff[3];if(Data_Cs==Buff[4]){//校验正确if((Buff[3] & 0x80) == 0) //0001 1000{//正温Dht.Tem = (Buff[2]+(Buff[3] & 0x7F) * 0.1);}else{//负温Dht.Tem = - (Buff[2]+(Buff[3] & 0x7F) * 0.1);}Dht.Hum = Buff[0];printf("温度=%.1f ,湿度=%d\r\n", Dht.Tem, Dht.Hum);return 1;}else{printf("DHT11校验不正确\r\n");return 0;}return 0;
}

PWM

void PWM_Config(void)
{//1.开A端口时钟  //方法1:中文固件库手册 15.2.22  路径:授课大纲资料\1.项目分析与环境搭建\资料\芯片相关资料//方法2:找到对应的.h文件最下面   stm32f10x.h 693行RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//2.定义结构体  XXX_init需要传递结构体变量地址GPIO_InitTypeDef GPIO_InitStruct={0};//3.给结构体赋值  中文固件库手册,Table 182--Table 185GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//浮空输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6;//待配置的引脚GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;//引脚速率//4.调用XXX_Init函数,将参数写入到寄存器中//void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);	//中文固件库手册:10.2.3//stm32f10x_gpio.h  351行GPIO_Init(GPIOA,&GPIO_InitStruct);	//5.开TIM3的时钟//void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); stm32f10x_rcc.h  693行//void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//6.定义结构体   XXX_Init函数    void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct={0};//7.给结构体赋值
//	TIM_TimeBaseInitStruct.TIM_ClockDivision = //时钟分割 输入捕获才使用TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //计数模式,向上或者向下TIM_TimeBaseInitStruct.TIM_Period = TIM_ARR_Value-1;//重装载值TIM_TimeBaseInitStruct.TIM_Prescaler = 720-1;//预分频值
//	TIM_TimeBaseInitStruct.TIM_RepetitionCounter	//该参数只用在高级定时器,晚上作业也不用配置//8.调用XXX_Init函数将参数写入到寄存器中TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);			//9.使能定时器   参考手册15.4.1  的位0置1
//void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);	 stm32f10x_tim.h 1067行TIM_Cmd(TIM3,ENABLE);	TIM_Cmd(TIM1,ENABLE);//10.定义PWM波相关的结构体
//具体用哪个函数,取决于CHx编号
//void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);	TIMx_CH1	 stm32f10x_tim.h 1057行 
//void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); TIMx_CH2
//void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); TIMx_CH3
//void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); TIMx_CH4TIM_OCInitTypeDef TIM_OCInitStruct={0};//11.给结构体赋值TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;  //PWM模式1TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //有效电平高电平TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;  //输出使能TIM_OCInitStruct.TIM_Pulse = 66;//比较值 范围0--ARR之间
//	TIM_OCInitStruct.TIM_OCIdleState	//只用在高级定时器 TIM1 TIM8
//	TIM_OCInitStruct.TIM_OutputNState	//只用在高级定时器 TIM1 TIM8
//	TIM_OCInitStruct.TIM_OCNIdleState //只用在高级定时器 TIM1 TIM8
//	TIM_OCInitStruct.TIM_OCNPolarity	//只用在高级定时器 TIM1 TIM8//12.根据要设置的通道,调用对应的init函数,将参数写入寄存器TIM_OC1Init(TIM3,&TIM_OCInitStruct);TIM_OC2Init(TIM3,&TIM_OCInitStruct);	TIM_OC1Init(TIM1,&TIM_OCInitStruct);//13.使能ARR预装载功能
//void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);	 stm32f10x_tim.h 1092行 TIM_ARRPreloadConfig(TIM3,ENABLE);TIM_ARRPreloadConfig(TIM1,ENABLE);//14.使能比较值的预装载功能
//void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);  stm32f10x_tim.h 1096行 TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);//15.高级定时器的PWM波功能加上这句话
//void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);  stm32f10x_tim.h 1068行 TIM_CtrlPWMOutputs(TIM1,ENABLE);
}

相关文章:

7.DTH11和PWM波

目录 室内/本地温湿度检测 温湿度传感器介绍 获取手册和例程的方法 从手册中提取重要信息 传感器的分类 温度传感器类型 DHT11 的介绍 温湿度传感器的接口 温湿度传感器的时序 温湿度传感器电路介绍 IO 的配置 定时器输出 PWM 波 PWM 波介绍 PWM 波的作用&#x…...

在UI 原型设计中,交互规则有哪些核心要素?

在UI 原型设计中&#xff0c;交互规则主要有三个核心要素&#xff0c;分别为重要性、原则与实践&#xff0c;具体表现在&#xff1a; 一、交互规则在 UI 原型设计中的重要性 明确交互逻辑&#xff1a;设计阶段制定交互规则&#xff0c;清晰定义界面元素操作响应。 如社交应用…...

树的直径 | 树的最长路径

树的直径&#xff1a; 树上任意两节点之间最长的简单路径即为树的「直径」。 定理&#xff1a; 在一棵树上&#xff0c;从任意节点 u 开始进行一次 DFS&#xff0c;到达的距离其最远的节点 v 必为直径的一端。 B4016 树的直径 - 洛谷 思路&#xff1a; 由于这题中每条边的…...

AbMole解读:脂质体的关键组分和主要合成方法

脂质体&#xff08;Liposome&#xff09;是一种由磷脂等两性分子自发形成的封闭囊泡结构&#xff0c;随着纳米技术、材料科学等多学科的交叉发展&#xff0c;脂质体的研究与应用进入了一个新的阶段&#xff0c;并在肿瘤研究、疫苗研发、基因递送等多个领域发挥着关键作用。AbMo…...

Python爬虫之品牌口碑数据抓取

上一篇我们介绍了爬虫营销的优势&#xff0c;这次我就展开详细的说说&#xff0c;如何通过爬取社交媒体或电商平台的公开评论来分析自己或竞争对手的品牌声誉。 选择微博这样的平台&#xff0c;因为它的数据相对公开&#xff0c;而且有API支持&#xff0c;但要注意频率限制和反…...

【android bluetooth 协议分析 12】【A2DP详解 1】【车机侧蓝牙音乐免切源介绍】

“车机蓝牙音乐免切源” 是近年来车载系统&#xff08;IVI&#xff0c;In-Vehicle Infotainment&#xff09;中常见的一个用户体验优化功能。它主要是为了简化蓝牙音乐播放流程、减少用户操作&#xff0c;提升使用便捷性。 一、什么是“切源”&#xff1f; 在车机系统中&#…...

眼镜店哪个品牌好,你会选择哪一款眼镜

有些人买眼睛是为了耍帅&#xff0c;有些人买眼镜&#xff0c;可能就是为了调节视力。现在手机以及其他的电子产品越来越普及&#xff0c;近视眼的人群是越来越多了&#xff0c;那么要准备去配眼镜的话&#xff0c;就要找到一个正规的眼镜店&#xff0c;一起来了解一下眼镜店哪…...

基于EFISH-SCB-RK3576/SAIL-RK3576的畜禽养殖监控仪技术方案‌

&#xff08;国产化替代J1900的农业物联网解决方案&#xff09; 一、硬件架构设计‌ ‌多源环境感知模块‌ ‌空气质量监测‌&#xff1a; 集成NH₃/CO₂/H₂S三合一气体传感器&#xff08;量程0-500ppm&#xff0c;精度2%FS&#xff09;&#xff0c;采样间隔≤1秒激光粉尘检测…...

linux - 权限的概念

目录 用户权限 超级用户与普通用户的区别 超级用户&#xff08;root&#xff09;&#xff1a; 普通用户&#xff1a; 切换用户身份 使用sudo执行高权限命令 用户管理 用户组管理 文件权限 文件访问者类别 基本权限 权限表示方法 权限修改 chmod chown chgrp u…...

LeRobot 框架的核心架构概念和组件(中)

本文档概述构成 LeRobot 框架的核心架构概念和组件。它介绍主要的子系统&#xff0c;并解释它们如何相互作用以实现机器人学习。 。。。。。。继续。。。。。。 环境接口 环境系统提供与模拟环境交互的统一接口。这些环境允许在部署到物理机器人之前&#xff0c;在受控环境中…...

鸿蒙5.0项目开发——鸿蒙天气项目的实现(主页1)

【高心星出品】 文章目录 页面效果&#xff1a;页面功能&#xff1a;页面执行流程&#xff1a;1. 页面初始化阶段2. 定位获取阶段3. 天气数据加载阶段 这个页面是整个天气应用的核心&#xff0c;集成了天气查询、定位、搜索等主要功能&#xff0c;提供了完整的天气信息服务。 …...

虚幻引擎5-Unreal Engine笔记之摄像机与场景捕获相关概念的解析

虚幻引擎5-Unreal Engine笔记之摄像机与场景捕获相关概念的解析 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之摄像机与场景捕获相关概念的解析1. UE中SceneCapture和UCameraComponent的关系是什么&#xff1f;Camera和SceneCapture2D的关系是什么1.1 UCameraComponen…...

【vim】--- vim 插件说明 超详细持续更新中

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【vim】--- vim 插件说明 超详细持续更新中 开发环境一、vim 插件管理器1、Vim-Plug2…...

医学影像系统的集成与工作流优化

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...

Vue 和 React 状态管理的性能优化策略对比

一、Vue 状态管理优化策略 合理使用 Vuex 模块化 将全局状态拆分为模块&#xff0c;按需加载&#xff0c;避免单一 Store 文件过大。通过命名空间隔离状态&#xff0c;减少状态冗余和无效更新。 const moduleA { namespaced: true, state: { /* ... */ } }; const store new …...

python打包exe报错:处理文件时错误:Excel xlsx file; not supported

背景&#xff1a;最近用python写一个excel解析工具&#xff0c;然后打包成exe可执行文件的时候&#xff0c;遇到这样的问题 1.在我自己编译器运行是可以正常将上传后的excel进行解析&#xff0c;但是在打包成exe后&#xff0c;就无法正常解析excel 问题排查&#xff1a; 1.切换…...

libmemcached库api接口讲解一

前言&#xff1a;好多接口的用法都不怎么会&#xff0c;得学习一下具体的用法 memcached_st ✅ 一个连接 memcached 服务集群的“客户端实例”对象&#xff0c;用于管理连接、执行读写操作、设置行为、维护哈希环等一切功能。 它在使用中通常通过下面的方式创建&#xff1a; …...

【RabbitMQ】发布确认机制的具体实现

文章目录 模式介绍建立连接单独确认代码实现逻辑运行结果 批量确认代码实现逻辑运行结果 异步确认实现逻辑介绍代码实现逻辑运行结果 三种策略对比以及完整代码 模式介绍 作为消息中间件&#xff0c;都会面临消息丢失的问题&#xff0c;消息丢失大概分为三种情况&#xff1a; …...

RabbitMQ是什么?应用场景有哪些?

RabbitMQ 是一款开源的消息代理中间件,基于 AMQP(高级消息队列协议)实现,用于在分布式系统中进行异步通信和消息传递。它通过将消息的发送者和接收者解耦,提高了系统的可扩展性、可靠性和灵活性。 核心特点 多协议支持:不仅支持 AMQP,还兼容 STOMP、MQTT 等多种消息协议…...

数学实验(Matlab符号运算)

一、符号对象的建立 Matlab符号运算特点 计算以推理方式进行&#xff0c;因此不受计算误差积累所带来的困扰 符号计算指令的调用比较简单&#xff0c;与数学教科书上的公式相近 Matlab符号运算举例 符号对象与符号表达式 在进行符号运算时&#xff0c;必须先定义基本的符号…...

使用 hover-class 实现触摸态效果 - uni-app 教程

目录 一、什么是 hover-class 二、常用组件支持 hover-class 三、基本 效果说明&#xff1a; 四、配合 hover-start-time 和 hover-stay-time 五、注意事项 六、实践建议 在移动端开发中&#xff0c;良好的用户交互体验尤为重要&#xff0c;点击或长按某个按钮时&#x…...

# 深度剖析LLM的“大脑”:单层Transformer的思考模式探索

简单说一下哈 —— 咱们打算训练一个单层 Transformer 加上稀疏自编码器的小型百万参数大型语言模型&#xff08;LLM&#xff09;&#xff0c;然后去调试它的思考过程&#xff0c;看看这个 LLM 的思考和人类思考到底有多像。 LLMs 是怎么思考的呢&#xff1f; 开源 LLM 出现之后…...

Git仓库迁移

前言 前面我讲了GitLab搭建与使用(SSH和Docker)两种方式&#xff0c;那么就会延伸出来一个情况&#xff1a;Git仓库迁移虽然这种情况很少发生&#xff0c;但是我自己公司近期要把 阿里云迁移到华为云&#xff0c;那么放在上面的Git仓库也要全量迁移下面我就写了一个脚本演示&am…...

Windows避坑部署CosyVoice多语言大语言模型

#工作记录 前言 在实际部署与应用过程中&#xff0c;项目的运行环境适配性对其稳定性与功能性的发挥至关重要。CosyVoice 项目虽具备强大的语音处理能力&#xff0c;但受限于开发与测试环境的侧重方向&#xff0c;其对运行环境存在特定要求。 该项目在 Linux 和 Docker 生态…...

《实现模式》以Golang视角解读 价值观和原则 day 1

为什么阅读实现模式&#xff1f; 为什么阅读《实现模式》&#xff1f;Kent Beck 的《实现模式》其核心思想——编写清晰、易于理解且易于维护的代码&#xff0c;对于软件工程的新手而言&#xff0c;直接深入复杂的设计模式或架构理念可能会感到困惑。《实现模式》则弥合了设计…...

解决 PicGo 上传 GitHub图床及Marp中Github图片编译常见难题指南

[目录] 0.行文概述 1.PicGo图片上传失败 2.*关于在Vscode中Marp图片的编译问题* 3.总结与启示行文概述 写作本文的动机是本人看到了Awesome Marp&#xff0c;发现使用 Markdown \texttt{Markdown} Markdown做PPT若加持一些 CSS , JavaScript \texttt{CSS},\texttt{JavaScript} …...

LeetCode 820 单词的压缩编码题解

LeetCode 820 单词的压缩编码题解 题目描述 题目链接 给定一个单词列表&#xff0c;将其编码为一个索引字符串S&#xff0c;格式为"单词1#单词2#…"。要求当某个单词是另一个单词的后缀时&#xff0c;该单词可以被省略。求最终编码字符串的最小长度。 解题思路 逆…...

Windows软件插件-写wav

下载本插件 本插件&#xff0c;将PCM音频流写入WAV音频文件。或将PCM音频流压缩为ALAW格式&#xff0c;写入WAV文件。可以创作大文件&#xff08;超过4字节所能表示的大小&#xff09;。插件类型为DLL&#xff0c;可以在win32和MFC程序中使用。使用本插件创建的ALAW格式WAV音频…...

基于 Spring Boot 瑞吉外卖系统开发(十五)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十五&#xff09; 前台用户登录 在登录页面输入验证码&#xff0c;单击“登录”按钮&#xff0c;页面会携带输入的手机号和验证码向“/user/login”发起请求。 定义UserMapper接口 Mapper public interface UserMapper exte…...

【Linux高级IO】多路转接之epoll

多路复用之epoll 一&#xff0c;认识epoll二&#xff0c;epoll的相关接口1. epoll_create2. epoll_ctl3. epoll_wait 三&#xff0c;epoll的原理四&#xff0c;epoll的两种工作模式&#xff08;ET和LT&#xff09;1. 两种工作模式2. 对比ET和LT 五&#xff0c;总结 在了解到sel…...

Java 性能调优全解析:从设计模式到 JVM 的 7 大核心方向实践

引言 在高并发、低延迟的技术场景中&#xff0c;Java 性能优化需要系统化的方法论支撑。本文基于7 大核心优化方向&#xff08;复用优化、计算优化、结果集优化、资源冲突优化、算法优化、高效实现、JVM 优化&#xff09;&#xff0c;结合权威框架与真实案例&#xff0c;构建从…...

“海外滴滴”Uber的Arm迁移实录:重构大规模基础设施​

云工作负载在性价比上的自然演进路径&#xff1a; Intel ➜ AMD ➜ ARM 不信&#xff1f;来看看 Uber 的做法&#xff1a; 01/Arm架构&#xff1a;云计算新时代 2023 年 2 月&#xff0c;Uber 正式开启了一项战略性迁移&#xff1a;将从本地数据中心迁移至云端&#xff0c;…...

java加强 -File

File类的对象可以代表文件/文件夹&#xff0c;并可以调用其提供的方法对象文件进行操作。 File对象既可以代表文件&#xff0c;也可以代表文件夹。 创建File对象&#xff0c;获取某个文件的信息 语法&#xff1a; File 对象名 new File("需要访问文件的绝对路径&…...

SQL注入 ---04

1 简单的sql注入 要求&#xff1a; 要有sql注入&#xff1a; 1&#xff0c;变量 2&#xff0c;变量要带入数据库进行查询 3&#xff0c;没有对变量进行过滤或者过滤不严谨 mysql> select * from users where id2 limit 0,1; 当我的语句这样写时查寻到的结果 当我修改为&…...

MySQL知识点总结(持续更新)

聚合函数通常用于对数据进行统计和聚合操作。以下是一些常见数据库系统&#xff08;如 MySQL、PostgreSQL、Oracle、SQL Server 等&#xff09;中常用的聚合函数&#xff1a; 常见的数据库聚合函数&#xff1a; COUNT()&#xff1a;计算指定列中非空值的数量 SELECT COUNT(*) …...

数字信号处理-大实验1.1

MATLAB仿真实验目录 验证实验&#xff1a;常见离散信号产生和实现验证实验&#xff1a;离散系统的时域分析应用实验&#xff1a;语音信号的基音周期&#xff08;频率&#xff09;测定 目录 一、常见离散信号产生和实现 1.1 实验目的 1.2 实验要求与内容 1.3 实验…...

Qt操作SQLite数据库教程

Qt 中操作 SQLite 数据库的步骤如下&#xff1a; 1. 添加 SQLite 驱动并打开数据库 #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>// 创建数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QSQLITE"); db.setData…...

【PSINS工具箱】基于工具箱的单独GNSS导航、单独INS导航、两者结合组合导航,三种导航的对比程序。附完整的代码

本文给出基于PSINS工具箱的单独GNSS导航、单独INS导航、两者结合组合导航(153EKF)的程序。并提供三者的轨迹对比、误差对比。 文章目录 运行结果MATLAB代码代码的简单介绍简介2. 平均绝对误差 (MAE)主要模块运行结果 三轴轨迹图: 各轴误差曲线: 命令行窗口的结果输出: …...

开发者的测试复盘:架构分层测试策略与工具链闭环设计实战

摘要‌ 针对测试复盘流于形式、覆盖率虚高等行业痛点&#xff0c;本文提出一套结合架构分层与工具链闭环的解决方案&#xff1a; ‌分层测试策略精准化‌&#xff1a;通过单元测试精准狙击核心逻辑、契约测试驱动接口稳定性、黄金链路固化端到端场景&#xff0c;实现缺陷拦截率…...

手写CString类

学习和理解字符串处理机制&#xff1a;手写 CString 类是深入学习字符串处理和内存管理的有效方式。通过实现构造函数、析构函数、赋值运算符等&#xff0c;能够理解字符串在内存中的存储方式、动态内存分配和释放的原理&#xff0c;以及如何处理字符串的复制、拼接、查找等操作…...

electron结合vue,直接访问静态文件如何跳转访问路径

在最外的app.vue或者index.vue的js模块编写 let refdade ref(1);//刷新&#xff0c;获得请求// 获取完整的查询字符串&#xff08;例如: "?dade/myms"&#xff09;const searchParams new URLSearchParams(window.location.search);// 获取 dade 参数的值&#xf…...

解读RTOS 第七篇 · 驱动框架与中间件集成

1. 引言 在面向生产环境的 RTOS 系统中,硬件驱动框架与中间件层是连接底层外设与上层应用的桥梁。一个模块化、可扩展的驱动框架能够简化外设管理,提升代码可维护性;而丰富的中间件生态则为网络通信、文件系统、图形界面、安全加密等功能提供开箱即用的支持。本章将从驱动模…...

Java GUI开发全攻略:Swing、JavaFX与AWT

Swing 界面开发 Swing 是 Java 中用于创建图形用户界面&#xff08;GUI&#xff09;的库。它提供了丰富的组件&#xff0c;如按钮、文本框、标签等。 import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class SwingExa…...

Cursor 0.5版本发布,新功能介绍

Cursor,这款流行的AI编程平台,刚刚在其v0.50更新中推出了一系列新功能。 首先,请将您的Cursor IDE更新到最新版本。当您打开Cursor时,您应该会在屏幕左下方收到关于最新版本发布的通知。 更多上下文控制: 对上下文的精细可见性,以及最新模型的MAX模式。 聊天升级: 导出…...

Android学习总结之Glide自定义三级缓存(实战篇)

一、为什么需要三级缓存 内存缓存&#xff08;Memory Cache&#xff09; 内存缓存旨在快速显示刚浏览过的图片&#xff0c;例如在滑动列表时来回切换的图片。在 Glide 中&#xff0c;内存缓存使用 LruCache 算法&#xff08;最近最少使用&#xff09;&#xff0c;能自动清理长…...

Maven 下载安装与配置教程

## 1. Maven 简介 Maven 是一个项目管理和构建自动化工具&#xff0c;主要用于 Java 项目。Maven 可以帮助开发者管理项目的构建、报告和文档&#xff0c;简化项目依赖管理。 ## 2. 下载 Maven 1. 访问 Maven 官方网站 [https://maven.apache.org/download.cgi](https://maven.…...

一篇解决Redis:持久化机制

目录 认识持久化 持久化方案 RDB&#xff08;Redis DataBase&#xff09; 手动触发 自动触发 小结 AOF(Append-Only File) AOF缓冲区刷新机制 AOF重写机制 AOF重写流程 ​编辑 混合持久化 认识持久化 我们都知道Mysql有四大特征&#xff0c;原子性&#xff0c;持久…...

使用IDEA创建Maven版本的web项目以及lombok的使用

1.新建项目 2.修改pom.xml 3.修改项目结构 4.在main/java下面写一个Servlet测试一下 然后当前页面往下滑 -Dfile.encodingUTF-8编写一句输出语句&#xff0c;测试是否成功部署配置&#xff0c;并选择到正确的位置&#xff1a; 回车以后 再回到idea里面&#xff0c;发现控…...

2025年AI开发者在开发者占比?

AI开发者在全球开发者中的占比目前没有一个统一且精确的数值&#xff0c;但根据行业报告和调研数据&#xff0c;可以给出以下大致的范围和趋势分析&#xff1a; 1. 综合估算范围 全球范围&#xff1a;AI/ML&#xff08;机器学习&#xff09;开发者约占开发者总数的 5%-15%&…...

SpringBoot整合MQTT实战:基于EMQX构建高可靠物联网通信,从零到一实现设备云端双向对话

一、引言 随着物联网(IoT)技术的快速发展&#xff0c;MQTT(Message Queuing Telemetry Transport)协议因其轻量级、低功耗和高效的特点&#xff0c;已成为物联网设备通信的事实标准。本文将详细介绍如何使用SpringBoot框架整合MQTT协议&#xff0c;基于开源MQTT代理EMQX实现设…...