单片机-STM32部分:11、ADC
飞书文档https://x509p6c8to.feishu.cn/wiki/OclUwlkifiRKR2k6iLbczn5tn8g
STM32的ADC是一种逐次逼近型模拟数字转换器。
是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。
逐次逼近型ADC的原理图下:
STM32f103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。
其中ADC1有两个内部通道,温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINT和ADC1_IN17相连接。
其中ADC1和ADC2都有16个外部通道,ADC3一般有8个外部通道,各通道的A/D转换可以单次、连续、扫描或间断执行,ADC转换的结果可以左对齐或右对齐储存在16位数据寄存器中。ADC的输入时钟不得超过14MHz,其时钟频率由PCLK2分频产生。
通道 | ADC1 | ADC2 | ADC3 | |
通道0 | IN0 | PA0 | PA0 | PA0 |
通道1 | IN1 | PA1 | PA1 | PA1 |
通道2 | IN2 | PA2 | PA2 | PA2 |
通道3 | IN3 | PA3 | PA3 | PA3 |
通道4 | IN4 | PA4 | PA4 | |
通道5 | IN5 | PA5 | PA5 | |
通道6 | IN6 | PA6 | PA6 | |
通道7 | IN7 | PA7 | PA7 | |
通道8 | IN8 | PB0 | PB0 | |
通道9 | IN9 | PB1 | PB1 | |
通道10 | IN10 | PC0 | PC0 | PC0 |
通道11 | IN11 | PC1 | PC1 | PC1 |
通道12 | IN12 | PC2 | PC2 | PC2 |
通道13 | IN13 | PC3 | PC3 | PC3 |
通道14 | IN14 | PC4 | PC4 | |
通道15 | IN15 | PC5 | PC5 | |
内部通道16 | IN16 | 连接内部温度传感器 | ||
内部通道17 | IN17 | 连接内部VRF |
ADC框图说明
电压输入范围
ADC所能测量的电压范围就是VREF- ≤ VIN ≤ VREF+,原理图中把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC 的输入电压范围为: 0~3.3V。
ADC输入通道
从ADCx_INT0-ADCx_INT15 对应三个ADC的16个外部通道,此外,还有两个内部通道:温度检测或者内部电压检测,选择对应通道之后,便会选择对应GPIO引脚。
规则通道,注入通道
我们看到,在选择了ADC的相关通道引脚之后,在模拟至数字转换器中有两个通道,规则通道,注入通道,
规则通道至多16个,注入通道至多4个,一般使用规则通道。
规则通道就是普通的通道,注入通道就是“插队”通道,是优先级高的通道,如果规则通道遇到注入通道插队,就必须先执行完注入通道的数据转换,再进行规则通道的数据转换,这点类似中断优先级的概念。
假如你在家里的院子内放了5个温度探头,室内放了3个温度探头;你需要时刻监视室外温度即可,但偶尔你想看看室内的温度;因此你可以使用规则通道组循环扫描室外的5个探头并显示AD转换结果,当你想看室内温度时,通过一个按钮启动注入转换组(3个室内探头)并暂时显示室内温度,当你放开这个按钮后,系统又会回到规则通道组继续检测室外温度。 |
ADC时钟
ADC预分频器的ADCCLK是ADC模块的时钟来源。通常,由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个专用的可编程预分频器,分频因子由RCC_CFGR的ADCPRE[1:0]配置,可配置2/4/6/8分频,但是为了保证ADC转换结果的准确性,ADC的输入时钟不得超过14MHz
外部触发转换
支持多种外部事件触发,比如定时器捕捉、EXTI线,同时ADC3的触发源与ADC1/2的触发源有所不同,上图已经给出。
DMA
同时ADC还支持DMA触发,规则和注入通道转换结束后会产生DMA请求,用于将转换好的数据传输到内存。
注意,只有ADC1和ADC3可以产生DMA请求
中断
可以配置产生中断,在ADC转换结束时,读取ADC数据
开发板中的ADC电路说明
开发板使用PA0做ADC采集实验,PA0外部接了一个滑动电阻器,R92为保护电阻,当我们滑动电阻器时,PA0上的电压会在0-3.3V变化,而PA0是绑定到ADC的通道0上的,所以我们可以采集ADC1通道0的值,来计算出PA0的电压。
| |
STM32CUBEMX ADC参数说明
下面,我们使用STM32CubeMX配置ADC1的0通道,采集数据。
1、ADCs_Common_Settings ADC通用设置
模式设置
Mode ADC_Mode_Independent 这里设置为独立模式
如果不需要ADC同步或者只是用了一个ADC的时候,应该设成独立模式。
如果需要多个ADC同时使用时,根据采样的需求,可设置双重ADC同步模式,两个ADC采集一个或多个通道,可以提高采样率。
独立模式,常用 |
Data Alignment (数据对齐方式): 右对齐/左对齐
因为ADC得到的数据是12位精度的,但是数据存储在 16 位数据寄存器中,所以ADC的存储结果可以分为左对齐或右对齐方式(12位)
Scan Conversion Mode( 扫描模式 ) : DISABLE
是否开启扫描模式(针对多通道的设置),如果只是用了一个通道的话,DISABLE就可以了(也只能DISABLE),如果使用了多个通道的话,会自动设置为ENABLE。
注意,这里设置多通道后,需要修改Number of Conversion为对应通道数量才生效,否则不能设置为EBABLE |
Continuous Conversion Mode(连续转换模式) : ENABLE
是否开启连续转换模式,设置为ENABLE,即连续转换。如果设置为DISABLE,则是单次转换。
ADC单通道转换: |
Discontinuous Conversion Mode(间断模式) :DISABLE
因为我们只用到了1个ADC,所以这个直接不使能即可,只能在扫描模式为EBABLE时才能设置。
间断模式可以把多个通道的ADC转换分组,间断采集。
比方,我们用到某ADC模块的CH1/CH2/CH3/CH4/CH5五个通道,将它们分成3组,使用定时器触发ADC。第一次触发时,进行CH1/CH2两个通道的AD转换,第二次触发时进行CH3/CH4两个通道的AD转换,第三次触发时,完成CH5通道的AD转换。 第四次触发时进行跟第一次触发一样的转换,这样循环下去。
2、ADC Regular Conversion Mode ADC常规转换模式
Enable Regular Conversions (启用常规转换模式) ENABLE
需要开启常规转换模式后,才可以进行下方配置
Number OF Conversion(转换通道数) 1
用到几个通道就设置为几,如果设置多个通道会自动使能扫描模式
Extenal Trigger Conversion Source (外部触发转换源)
设定ADC的触发方式 |
Rank 转换顺序
多个通道时会有多个Rank,可以设定每个通道的转换顺序,采样时间
补充:采样时间越长,越准确,这里存在一个竞争冒险的关系。
ADC总转换时间如下计算: |
注入通道设置
也就是注入通道的设置,和转换通道没啥太大区别。注入通道一般使用外部中断、定时器中断作为触发源。
Injected Conversion Mode |
WahchDog
Enable Analog WatchDog Mode(使能模拟看门狗中断)
例如,我们想在芯片突然掉电时,保存一些必要数据。这时候我们就可以设置模拟看门狗中断,例如检测通道0的边界电压低于1500或者3500时,触发中断,这时候我们可以在ADC中断中做数据保存操作,存储必要数据。
ADC轮询采样
设置完成后,如果提示时钟设置错误,需要手动修改降低频率
同时,为了打印ADC值,我们可以添加串口打印函数
main.c/* USER CODE BEGIN Includes */#include <stdio.h>/* USER CODE END Includes *//* USER CODE BEGIN 2 */HAL_ADCEx_Calibration_Start(&hadc1); //ADC校准HAL_ADC_Start(&hadc1); //启动ADC转换,设置为连续采样后,只需开启一次/* USER CODE END 2 */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */uint16_t ADC_Value;HAL_ADC_PollForConversion(&hadc1,50);//查询函数,查询转换完成标志位。每次采样,CUP在这里都要//等待采样完成才能进行下一步,超时时间可设置大于采样时间ADC_Value = HAL_ADC_GetValue(&hadc1); //获取AD值printf("ADC1 Reading : %d \r\n",ADC_Value);//12位ADC,2的12次方,是4096,分辨率为3.3/4096printf("PA1 True Voltage value : %.4f \r\n",ADC_Value*3.3f/4096);HAL_Delay(1000);//HAL_ADC_Stop(&hadc1);}/* USER CODE END 3 *//* USER CODE BEGIN 4 */
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);return ch;
}
/* USER CODE END 4 */
实验结果
参考飞书文档
关于ADC校准
HAL_ADCEx_Calibration_Start(&hadc1); //ADC校准 |
ADC转换结束中断
因为使用上方的轮询方式效率太低太慢了,这时候我们可以开启ADC转换结束中断,可以提升采样效率。
void ADC1_2_IRQHandler(void)
{/* USER CODE BEGIN ADC1_2_IRQn 0 *//* USER CODE END ADC1_2_IRQn 0 */HAL_ADC_IRQHandler(&hadc1);/* USER CODE BEGIN ADC1_2_IRQn 1 *//* USER CODE END ADC1_2_IRQn 1 */
}void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc){xxxHAL_ADC_ConvCpltCallback(hadc);xxx
}/*** @brief Conversion complete callback in non blocking mode* @param hadc: ADC handle* @retval None*/
__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{/* Prevent unused argument(s) compilation warning */UNUSED(hadc);/* NOTE : This function should not be modified. When the callback is needed,function HAL_ADC_ConvCpltCallback must be implemented in the user file.*/
}
如果使能了ADC转换结束中断,可以这样写:
main.cuint16_t ADC_Value;/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1);while (1)
{/* USER CODE BEGIN 3 */HAL_ADC_Start_IT(&hadc1); //每秒转换一次,是否可以反正while外,只初始化一次HAL_Delay(1000);
}
/* USER CODE END 3 *//* USER CODE BEGIN 4 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) //ADC转换完成回调
{HAL_ADC_Stop_IT(&hadc1); //关闭ADCADC_Value=HAL_ADC_GetValue(&hadc1); //获取ADC转换的值printf("ADC1 Reading : %d \r\n",ADC_Value);printf("%.4f V\r\n",(ADC_Value*3.3/4096)); //串口打印电压信息
}
ADC DMA采样
如果采样频率太高,而且多通道同时采样,为了减少对CPU的占用,我们可以使用DMA采样的方式,这样可以大大提高采样效率。
注意DMA采样一般只用在多通道采样的场景,单通道时,直接用ADC中断采样即可。 |
- Mode 模式:独立采集
- Scan Conversion Mode 扫描模式 :ENABLE
- Continuous Conversion Mode 连续转换模式:ENABLE
- 两路ADC,分别是通道0和通道1
采样周期选择:采样周期越短,ADC 转换数据输出周期就越短但数据精度也越低,采样周期越长,ADC 转换数据输出周期就越长同时数据精度越高。 |
- 配置下DMA模式为Circular,既循环更新数据,否则默认的Normal模式触发后只执行 一次,
- 配置自增地址为Memory方式,并选择word或half word,这里选择word,是因为我程序里定义uint32_t 的数组来存储多路ADC数据的,占用四个字节既选择word
main.c/* USER CODE BEGIN 0 */uint32_t ADC1_Value_DMA[2];/* USER CODE BEGIN 2 */HAL_ADCEx_Calibration_Start(&hadc1);HAL_ADC_Start_DMA(&hadc1, ADC1_Value_DMA, 2);while (1){/* USER CODE BEGIN 3 */float Channel_0 = (float)(ADC1_Value_DMA[0]&0xFFF)*3.3/4096;float Channel_1 = (float)(ADC1_Value_DMA[1]&0xFFF)*3.3/4096;printf("ADC1 Channel_6 Count: %d, voltage: %f \r\n",ADC1_Value_DMA[0],Channel_0);printf("ADC1 Channel_7 Count: %d, voltage: %f \r\n",ADC1_Value_DMA[1], Channel_1);}/* USER CODE END 3 */
记得把DMA放到ADC前面初始化哦
相关文章:
单片机-STM32部分:11、ADC
飞书文档https://x509p6c8to.feishu.cn/wiki/OclUwlkifiRKR2k6iLbczn5tn8g STM32的ADC是一种逐次逼近型模拟数字转换器。 是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。 逐次逼近型ADC的原理图下: STM32f103系列有3个ADC,精度为12…...
【含文档+PPT+源码】基于微信小程序的社区便民防诈宣传系统设计与实现
项目介绍 本课程演示的是一款基于微信小程序的社区便民防诈宣传系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…...
Laravel 安全:批量赋值 fillable 与 guarded
Laravel 的模型中有两个 protected 字段 fillable 与 guarded,注意:必须是 protected 以上开放程度。 我们经常通过提交表单进行数据的增删改,为了方便的进行数据批量修改操作 Laravel 提供了批量赋值机制: 假如我们想要在数据库…...
[杂谈随感-13]: 人的睡眠,如何布置床的位置比较有安全?感?
睡眠环境中的床位布置直接影响心理安全感与睡眠质量,需从空间防御性、人体感知机制及环境心理学多维度综合设计。 以下基于科学原理与实践案例,系统解析床位布置的核心策略: 一、空间防御性布局:构建心理安全边界 背靠实体墙&a…...
协议路由与路由协议
协议路由”和“路由协议”听起来相似,但其实是两个完全不同的网络概念。下面我来分别解释: 一、协议路由(Policy-Based Routing,PBR) ✅ 定义: 协议路由是指 根据预设策略(策略路由࿰…...
内网穿透系列三:开源本地服务公网映射工具 tunnelmole
以下是对 tunnelmole 简要介绍: tunnelmole 是一款开源的内网穿透工具,一行命令就能把本地http服务映射成公网可访问的链接提供公共免费的网络服务,直接下载运行命令即可使用,也支持自行配置搭建私有客户端、服务端参考开源地址&…...
发行基础:本地化BUG导致审核失败
1、早上收到邮件,Steam客服说本地化功能找不到,无法切换多国语言,所以正式版V1.0程序未通过。 大脑瞬间有要爆炸的感觉,测试后发现V1以及demo都存在同样问题。 属于重大BUG,需要立即解决,最高优先级。 2、…...
QB/T 1649-2024 聚苯乙烯泡沫塑料包装材料检测
聚苯乙烯泡沫塑料包装材料是指以可发行聚苯乙烯珠粒为原料,经加热预发泡后在模具中加热成型而制得,具有闭孔结构的聚苯乙烯泡沫塑料包装材料。 QB/T 1649-2024聚苯乙烯泡沫塑料包装材料检测项目: 测试项目 测试标准 外观 QB/T 1649 气味…...
【Day 24】HarmonyOS端云一体化开发:云函数
一、端云开发核心架构 1. 技术栈对比 维度传统开发模式HarmonyOS端云一体化方案优势 开发工具需独立配置前后端环境DevEco Studio统一开发端云代码降低60%环境搭建时间部署流程手动部署服务器与数据库一键部署至AGC Serverless免运维,自动弹性伸缩通信安全需自行实…...
大模型(LLMs)强化学习——RLHF及其变种
大模型(LLMs)强化学习——RLHF及其变种面 一、介绍一下 LLM的经典预训练Pipeline?二、预训练(Pre-training)篇 具体介绍一下 预训练(Pre-training)?三、有监督微调(Sup…...
20250510解决NanoPi NEO core开发板在Ubuntu core22.04.3系统下适配移远的4G模块EC200A-CN的问题
1、h3-eflasher-friendlycore-jammy-4.14-armhf-20250402.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区,可以使用SD Card Formatter/SDCardFormatterv5…...
WinCC V7.2到V8.0与S71200/1500系列连接通讯教程以及避坑点
声明:WinCC与PLC连接详细指导与注意避坑点,部分图片和描述来源于网络,如有冒犯,请联系本人删除。 1.环境介绍 自WinCC V7.2版本起,软件新增加了 "SIMATIC S7-1200, S7-1500 Channel"通道,用于WinCC与 S7-1…...
WPF 性能 UI 虚拟化 软件开发人员的思考
UI 虚拟化是 WPF 采用的一项技术,框架会仅创建用户可见的 UI 元素。例如,如果 ListView 中有 1000 个文本块控件,但您只能查看其中的 10 个,那么 VisualTree 中也只会显示 10 个文本块。向下滚动时,不再可见的元素将被…...
服务器综合实验(实战详解)
该文章的目录部分 实验内容 实验完成步骤 虚拟机准备 配置两个虚拟机的本地仓库 虚拟机A: 虚拟机B: 配置SSH公钥互信 虚拟机A: 编辑 虚拟机B: 提供基于bind的DNS服务 虚拟机A: 项目需求1: …...
【动态导通电阻】软硬开关下GaN器件的动态RDSON
2019年,浙江大学的Rui Li、Xinke Wu等人基于双脉冲和多脉冲测试方法,研究了在硬开关和软开关条件下商用氮化镓(GaN)功率器件的动态导通电阻(R DSON )特性。实验结果表明,不同GaN器件在硬开关和软开关条件下的动态R DSON 表现出不同的行为,这些行为受关断电压和频率的影…...
Java基础 5.10
1.方法重写课堂练习 package com.logic.override_; //编写一个Person类 包括属性/private(name, age) 构造器 方法say(返回自我介绍的字符串) //编写一个Student类 继承Person类 增加id score 属性/private 以及构造器 //定义say方法(返回自我介绍的信息) //在main中 分别创建…...
通信原理绪论
(I)信息量:第j条消息中包含的信息定义为:I(j) 消息是信息的表现形式 消息是信息的一种抽象和本质内容 消息中所含的信息量是该消息出现概率的函数,即 I I[P(x)] P(x)越小,I越…...
Maven 插件配置分层架构深度解析
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
jMeter压测环境部署JDK+Groovy+JMeter+Proto+IntelliJ IDEA
为确保 Groovy、JDK 和 JMeter 三者的版本兼容性,需遵循以下核心原则和步骤: 一、版本兼容性对照表 组件推荐版本范围关键兼容规则JDKJava 8/11/17 (LTS)- JMeter 5.6 支持 Java 11/17GroovyGroovy 3.0.7 或 4.0- Groovy 3.x 支持 Java 8-17 - Groovy 4…...
c#建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能
# financial_建筑行业 建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能 # 开发背景 软件是给岳阳客户定制开发一款建筑行业流水账财务软件。提供工程签证单、施工日志、人员出勤表等信息记录。 # 财务管理系统功能描述 1.可以自行设置记账科目,做凭…...
深度解析 MySQL 与 Spring Boot 长耗时进程:从故障现象到根治方案(含 Tomcat 重启必要性分析)
一、典型故障现象与用户痛点 在高并发业务场景中,企业级 Spring Boot 应用常遇到以下连锁故障: 用户侧:网页访问超时、提交表单无响应,报错 “服务不可用”。运维侧:监控平台报警 “数据库连接池耗尽”,To…...
一种运动平台扫描雷达超分辨成像视场选择方法——论文阅读
一种运动平台扫描雷达超分辨成像视场选择方法 1. 专利的研究目标与意义1.1 研究目标1.2 实际意义2. 专利的创新方法与技术细节2.1 核心思路与流程2.1.1 方法流程图2.2 关键公式与模型2.2.1 回波卷积模型2.2.2 最大后验概率(MAP)估计2.2.3 统计约束模型2.2.4 迭代优化公式2.3 …...
【程序员AI入门:开发】11.从零构建智能问答引擎:LangChain + RAG 实战手册
1、技术选型 组件推荐方案说明文本嵌入模型sentence-transformers/all-MiniLM-L6-v2轻量级且效果较好的开源模型向量数据库FAISS高效的本地向量检索库大语言模型GPT-3.5/开源LLM(如ChatGLM3)根据资源选择云端或本地模型文档处理框架LangChain简化RAG流程…...
《深入理解Linux网络》笔记
《深入理解Linux网络》笔记 前言参考 前言 前段时间看了《深入理解Linux网络》这本书,虽然有些地方有以代码充篇幅的嫌疑,但总体来说还是值得一看的。在这里简单记录一下笔记,记录下对网络新的理解。 内核是如果接受网络包的? 如…...
【计算机视觉】优化MVSNet可微分代价体以提高深度估计精度的关键技术
优化MVSNet可微分代价体以提高深度估计精度的关键技术 1. 代价体基础理论与分析1.1 标准代价体构建1.2 关键问题诊断 2. 特征表示优化2.1 多尺度特征融合2.2 注意力增强匹配 3. 代价体构建优化3.1 自适应深度假设采样3.2 可微分聚合操作改进 4. 正则化与优化策略4.1 多尺度代价…...
致远A8V5-9.0安装包(包含信创版)【附百度网盘链接】
A8适用于中大型企业,基于"以人为中心"的产品理念,致力于为企业构建和完善“数字智能”的协同运营体系,以组织模型为基础,连接各项工作和业务,聚合信息、资源和能力,实现组织内和跨组织的高效协同…...
terminal 共享工具ttyd
ttyd 是一个非常轻量的工具,它可以将你的终端(如 bash)通过 Web 页面共享出去,适合教学、演示、远程协作等场景,而且 支持 macOS、ARM64、Linux 等平台。 ⸻ ✅ 一、ttyd 简介 • 将 shell 包装成 WebSocket 服务&am…...
右值引用的剖析
引入:为什么要有右值引用? 右值引用的存在,就是为了解决左值引用解决不了的问题! 左值引用的问题: 我们知道,左值引用在做参数和做返回值都可以提高效率;但是有时候,我们无法用左…...
MIT XV6 - 1.4 Lab: Xv6 and Unix utilities - find
接上文 MIT XV6 - 1.3 Lab: Xv6 and Unix utilities - primes find 继续实验,实验介绍和要求如下 (原文链接 译文链接) : Write a simple version of the UNIX find program for xv6: find all the files in a directory tree with a specific name. Your solution…...
PyTorch API 8 - 工具集、onnx、option、复数、DDP、量化、分布式 RPC、NeMo
文章目录 torch.nn.inittorch.nn.attention工具集子模块 torch.onnx概述基于 TorchDynamo 的 ONNX 导出器基于TorchScript的ONNX导出器贡献与开发 torch.optim如何使用优化器构建优化器每个参数的选项执行优化步骤optimizer.step()optimizer.step(closure) 基类算法如何调整学习…...
解决使用宝塔Linux部署前后端分离项目遇到的问题
问题一:访问域名转圈圈,显示404,403 没有解决跨域问题,在后端yml中设置content:/prod(生产环境),在前端.env文件中将http://127.0.0.1:8080/替换为公网IP,并在vite.conf…...
力扣top100 矩阵置零
开辟数组来标记元素为0的行和列,然后将对应的行和列的元素全部置为0; class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int n matrix.size();int m matrix[0].size();vector<int> l(m),r(n);for(int i …...
JavaScript基础-作用域概述
在学习JavaScript的过程中,理解其作用域(Scope)机制是至关重要的。它不仅影响变量的生命周期和可见性,还决定了代码执行期间如何查找变量值。本文将深入探讨JavaScript的作用域概念,包括全局作用域、函数作用域、块级作…...
【经验总结】Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用解决措施
【经验总结】Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用解决措施 问题现象定位过程问题根因解决方案将内核内核从6.8.0-60 降级到5.15.0-140。1、回滚内核版本2、解决重启系统,找不到选择内核版本的菜单问题3、将新版本的kernel卸…...
MQTT协议介绍
一、MQTT定义 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分。 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议ÿ…...
jetson orin nano super AI模型部署之路(五)tensorrt C++ api介绍
我们基于tensorrt-cpp-api这个仓库介绍。这个仓库的代码是一个非常不错的tensorrt的cpp api实现,可基于此开发自己的项目。 我们从src/main.cpp开始按顺序说明。 一、首先是声明我们创建tensorrt model的参数。 // Specify our GPU inference configuration optio…...
excel函数操作案例
需求分析1:学习时间与最终成绩之间的关系 问题:学习时间的长短是否对学生的最终成绩有显著影响? 操作步骤:选择"study_hours"和"final_grade"列完整数据,选择散点图 单击B,按住ctrl键…...
各种音频产品及场景总结
本文记录和总结各种音频产品以及音频场景,比如音箱、耳机、对讲机、录音笔、助听器、声卡等等。 蓝牙耳机 蓝牙耳机现在已经很普及了,主要功能就是连着手机等设备然后播放音频,所以,肯定要有扬声器模块;然后还可以接打…...
Java后端开发day46--多线程(二)
(以下内容全部来自上述课程) 多线程 1. Lock锁 虽然我们可以理解同步代码块和同步方法的锁对象问题, 但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, 为了更清晰的表达如何加锁和释放锁,JDK5以…...
U盘制作系统盘(含U盘恢复)
✅ 准备工作 1. 一个至少 8GB 容量的 U 盘 注意:U 盘将被格式化,请提前备份数据。 2. 一台可以联网的 Windows 电脑 📥 下载官方制作工具(推荐) 1. 打开微软官网下载页面: 👉 Windows 11 下载…...
如何阅读、学习 Linux 2 内核源代码 ?
学习Linux 2内核源代码是深入理解操作系统工作原理的绝佳途径,但这无疑是一项极具挑战性的任务。下面为你提供一套系统的学习方法和建议: 一、扎实基础知识 操作系统原理 透彻掌握进程管理、内存管理、文件系统、设备驱动等核心概念。推荐阅读《操作系…...
【字符函数和字符串函数】
【字符函数和字符串函数】 字符分类函数字符转换函数函数的使用strcpy的使用strcat的实现strcmp的实现strncpy,strncat,strncmpstrstrstrtok的使用strerror 1.函数的使用 2.部分函数的模拟实现(工作原理) 字符分类函数 ag1. #include<std…...
[学习]RTKLib详解:rtksvr.c与streamsvr.c
本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…...
QMK键盘固件开发全解析:QMK 固件开发的最新架构和规范(2025最新版)
QMK键盘固件开发全解析:QMK 固件开发的最新架构和规范(2025最新版) 📚 前言概述 QMK(Quantum Mechanical Keyboard)作为目前开源键盘固件领域的"扛把子",凭借其强大的功能和活跃的社区支持,已经…...
c++——二叉树进阶
1. 内容安排说明 二叉树在前面C数据结构阶段已经讲过,本节取名二叉树进阶是因为: 1. map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一种树形结构 2. 二叉搜索树的特性了解,有助于更好的理解map和set的特性 3. 二叉树中部…...
PyTorch API 3 - mps、xpu、backends、导出
文章目录 torch.mpsMPS 性能分析器MPS 事件 torch.xpu随机数生成器流与事件内存管理 torch.mtia流与事件 torch.mtia.memory元设备元张量操作惯用法 torch.backendstorch.backends.cputorch.backends.cudatorch.backends.cudnntorch.backends.cusparselttorch.backends.mhatorc…...
QTableWidget实现多级表头、表头冻结效果
最终效果: 实现思路:如果只用一个表格的话写起来比较麻烦,可以考虑使用两个QTableWidget组合,把复杂的表头一个用QTableWidget显示,其他内容用另一个QTableWidget。 #include "mainwindow.h" #include &qu…...
比 Mac 便笺更好用更好看的便利贴
在苹果电脑上,有自带的便签软件,但问题这个官方应用已经年久失修,界面跟最新的系统完全不搭。像同步、清单等功能也没有。 最近找到了一款更好看好用的桌面便利贴 - Desktop Note。这款应用在超过26个的效率榜排在前10。以下几个点是我认为做…...
【python】json解析:invalid literal for int() with base 10: ‘\“\“‘“
invalid literal for int() with base 10: ‘“”’" 从提供的 JSON 数据中,我可以看到导致 "invalid literal for int() with base 10: \"\"" 错误的具体情况: 错误分析 在 deal_resp 部分中发现了错误信息: &…...
超详细Kokoro-82M本地部署教程
经测试,Kokoro-82M的语音合成速度相比于其他tts非常的快,本文给出Windows版详细本地部署教程。 这里提供原始仓库进行参考:https://github.com/hexgrad/kokoro 一、依赖安装 1.新建conda环境 conda create --n kokoro python3.12 conda a…...