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

STM32 ADC+DMA+TIM触发采样实战:避坑指南与源码解析

知识点1【TRGO的介绍】

1、TRGO的概述

TRGO:Trigger Output(触发输出),是定时器的一种功能。

它可以作为外设的启动信号,比如ADC转换,DAC输出,DMA请求等。

对于ADC来说,可以通过TRGO信号触发ADC开始转换

2、定时器TRGO的生成过程

以通用定时器为例,TRGO信号的来源可以是:更新事件,比较事件,其他事件。如下图

通过TIM_SelectOutputTrigger()进行配置

3、补充

(1)ADC持续转换的两种方式

1、ContinuousConvMode = ENABLE + ExternalTrig = None

启动连续采集,适合实时采样

2、ContinuousConvMode = DISABLE + ExternalTrig = TIMx_TRGO

每次触发采样一次,适合周期性定点采样

每次定时器触发都会扫描一次所有通道

(2)DMA—TC中断的触发时机

当ADC完成一次完整的通道扫描,并且DMA将所有通道的结果都搬运到内存后,才会触发DMA传输完成中断(TC)

知识点2【代码练习】

本代码是一个将ADC(多通道),DMA(中断),TIM(TRGO)相结合的案例

实现的功能是ADC每秒转换一次,但这里我只有一个光敏元件,因此只有一个通道有数据。

main.c

#include "stm32f10x.h"
#include "stm32f10x_conf.h"
#include "delay.h"
#include "usart.h"
#include "adc.h"
#include "dma.h"
#include "tim.h"
u16 ADC3_Recv_Data;
int flag;#define ADC_NUM 3//ADC + DAM(中断) + TRGO
//多通道接收数据 用数组保存
u16 data_adc_mult[ADC_NUM] = {0};//需要配置的有
//ADC3 IN6 IN5 IN4:PF8 PF7 PF6  ok
//USART1 TX:PA9,RX:PA10 ok
//DMA2 CH5 
//TIM3 TRGO okint main(void)
{//中断向量组配置Systick_Init(72000);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);Usart1_Init(9600);ADC3_Interrupt_DMA_TIM_GPIO_Init();ADC3_Interrupt_DMA_TIM_Init();DMA2_IN5_ADC3_Init();TIM3_TRGO_Init();while(1){	}
}

adc.c

#include "adc.h"
#define ADC_NUM 3void ADC3_Interrupt_DMA_TIM_Init(void)
{ADC_InitTypeDef ADC3_InitStruct;//时钟 分频RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADC3初始化 配置为外部触发ADC_StructInit(&ADC3_InitStruct); ADC3_InitStruct.ADC_ContinuousConvMode = DISABLE;ADC3_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;ADC3_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;ADC3_InitStruct.ADC_Mode = ADC_Mode_Independent;ADC3_InitStruct.ADC_NbrOfChannel = ADC_NUM;ADC3_InitStruct.ADC_ScanConvMode = ENABLE;ADC_Init(ADC3,&ADC3_InitStruct);//通道配置ADC_RegularChannelConfig(ADC3,ADC_Channel_6,1,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC3,ADC_Channel_5,2,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC3,ADC_Channel_4,3,ADC_SampleTime_55Cycles5);//使能ADC3 + DAMADC_Cmd(ADC3,ENABLE);ADC_DMACmd(ADC3,ENABLE);ADC_ExternalTrigConvCmd(ADC3, ENABLE);//外部触发//校验ADC_ResetCalibration(ADC3);while(ADC_GetResetCalibrationStatus(ADC3) == SET);ADC_StartCalibration(ADC3);while(ADC_GetCalibrationStatus(ADC3) == SET);//开始转换//ADC_SoftwareStartConvCmd(ADC3,ENABLE);//由于是外部触发 因此这句话不需要写
}void ADC3_Interrupt_DMA_TIM_GPIO_Init(void)
{GPIO_InitTypeDef GPIOF_InitStruct;//时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);//配置PF8 PF7 PF6为模拟输入GPIO_StructInit(&GPIOF_InitStruct);GPIOF_InitStruct.GPIO_Mode = GPIO_Mode_AIN;GPIOF_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;GPIOF_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOF,&GPIOF_InitStruct);
}

dma.c

#include "dma.h"
extern u16 data_adc_mult[ADC_NUM];void DMA2_IN5_ADC3_Init(void)
{DMA_InitTypeDef DMA2_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;//时钟配置RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);//初始化DMA2_InitStruct.DMA_BufferSize = ADC_NUM;DMA2_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;DMA2_InitStruct.DMA_M2M = DMA_M2M_Disable;DMA2_InitStruct.DMA_MemoryBaseAddr = (u32)data_adc_mult;DMA2_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //ADC数据12位DMA2_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA2_InitStruct.DMA_Mode = DMA_Mode_Circular;//这里需要设置循环模式的原因://每次触发都需要 重新将DMA的计数器复位DMA2_InitStruct.DMA_PeripheralBaseAddr = (u32)&ADC3->DR;DMA2_InitStruct.DMA_PeripheralDataSize  = DMA_PeripheralDataSize_HalfWord;DMA2_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA2_InitStruct.DMA_Priority = DMA_Priority_High;DMA_Init(DMA2_Channel5,&DMA2_InitStruct);//中断使能DMA_ITConfig(DMA2_Channel5,DMA_IT_TC,ENABLE);NVIC_InitStruct.NVIC_IRQChannel = DMA2_Channel4_5_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStruct);//使能DMADMA_Cmd(DMA2_Channel5,ENABLE);
}//中断处理函数
void DMA2_Channel4_5_IRQHandler(void)
{if(DMA_GetITStatus(DMA2_IT_TC5) == SET){int i = 0;DMA_ClearITPendingBit(DMA2_IT_TC5);for(i = 0;i < ADC_NUM ;i++){printf("%f ",DataProcess_light(data_adc_mult[i]));}printf("\\n");}
}

tim.c

**#include "tim.h"
void TIM3_TRGO_Init(void)
{TIM_TimeBaseInitTypeDef TIM3_InitStrct;//时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//定时器初始化TIM_TimeBaseStructInit(&TIM3_InitStrct);TIM3_InitStrct.TIM_ClockDivision = TIM_CKD_DIV1;TIM3_InitStrct.TIM_CounterMode = TIM_CounterMode_Up;TIM3_InitStrct.TIM_Period = 10000 - 1;TIM3_InitStrct.TIM_Prescaler = 7200 - 1;TIM_TimeBaseInit(TIM3,&TIM3_InitStrct);//开启外部触发TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update);//使能定时器TIM_Cmd(TIM3,ENABLE);
}**

usart.c

#include "usart.h"
#include "led.h"//串口2初始化
void Usart2_Init(u32 Baud)
{GPIO_InitTypeDef GPIOA_Pin2_InitStruct;GPIO_InitTypeDef GPIOA_Pin3_InitStruct;USART_InitTypeDef USART2_InitStruct;//时钟配置  USART,收(PA3)发(PA2)端口 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_StructInit(&GPIOA_Pin3_InitStruct);GPIOA_Pin3_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIOA_Pin3_InitStruct.GPIO_Pin = GPIO_Pin_3;GPIOA_Pin3_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//收PA3端口配置GPIO_Init(GPIOA,&GPIOA_Pin3_InitStruct);GPIO_StructInit(&GPIOA_Pin2_InitStruct);GPIOA_Pin2_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIOA_Pin2_InitStruct.GPIO_Pin = GPIO_Pin_2;GPIOA_Pin2_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//发PA2端口配置GPIO_Init(GPIOA,&GPIOA_Pin2_InitStruct);//串口初始化USART2_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART2_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART2_InitStruct.USART_BaudRate = Baud;USART2_InitStruct.USART_Parity = USART_Parity_No;USART2_InitStruct.USART_StopBits = USART_StopBits_1;USART2_InitStruct.USART_WordLength = USART_WordLength_8b;USART_Init(USART2,&USART2_InitStruct);//使能串口USART_Cmd(USART2,ENABLE);
}//串口1初始化
void Usart1_Init(u32 Baud)
{GPIO_InitTypeDef GPIOB_InitStruct;USART_InitTypeDef USART1_InitStruct;//时钟配置 USART1,TX:PA9,RX:PA10RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//端口配置GPIOB_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIOB_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIOB_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIOB_InitStruct);GPIOB_InitStruct.GPIO_Pin = GPIO_Pin_10;GPIOB_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIOB_InitStruct);//串口初始化USART1_InitStruct.USART_BaudRate = Baud;USART1_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART1_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;USART1_InitStruct.USART_Parity = USART_Parity_No;USART1_InitStruct.USART_StopBits = USART_StopBits_1;USART1_InitStruct.USART_WordLength = USART_WordLength_8b;USART_Init(USART1,&USART1_InitStruct);//使能串口USART_Cmd(USART1,ENABLE);
}//串口1发送数据函数发送数据
void USART1_Trans(u8 c)
{while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);USART_SendData(USART1,c);while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
}int fputc(int c,FILE *stream)
{USART1_Trans((u8)c);return c;
}

delay.c

#include "delay.h"u32 delay_ms = 0;//系统定时器初始化函数
void Systick_Init(u32 ticks)
{SysTick_Config(ticks);
}//延时函数
void Delay_ms(u32 ms)
{u32 ticks = delay_ms + ms;while(ticks > delay_ms);
}//系统定时器中断服务函数
void SysTick_Handler(void)
{delay_ms++;
}

错误

1、DMA_BufferSize理解错误

2、DMA_Mode_Circular未配置循环模式

3、ADC_ExternalTrigConvCmd(ADC3, ENABLE);

未开启ADC3的外部触发转换
 

结束

代码重在练习!

代码重在练习!

代码重在练习!

今天的分享就到此结束了,希望对你有所帮助,如果你喜欢我的分享,请点赞收藏加关注,谢谢大家!!!

相关文章:

STM32 ADC+DMA+TIM触发采样实战:避坑指南与源码解析

知识点1【TRGO的介绍】 1、TRGO的概述 TRGO&#xff1a;Trigger Output&#xff08;触发输出&#xff09;&#xff0c;是定时器的一种功能。 它可以作为外设的启动信号&#xff0c;比如ADC转换&#xff0c;DAC输出&#xff0c;DMA请求等。 对于ADC来说&#xff0c;可以通过…...

Gmsh 读取自定义轮廓并划分网格:深入解析与实践指南

一、Gmsh 简介 (一)Gmsh 是什么 Gmsh 是一款功能强大的开源有限元网格生成器,广泛应用于工程仿真、数值模拟以及计算机图形学等领域。它为用户提供了从几何建模到网格划分的一整套解决方案,能够有效处理复杂几何形状,生成高质量的二维和三维网格,满足多种数值方法的需求…...

Elasticsearch/OpenSearch 中doc_values的作用

目录 1. 核心作用 2. 适用场景 3. 与 index 参数的对比 4. 典型配置示例 场景 1&#xff1a;仅用于聚合&#xff0c;禁止搜索 场景 2&#xff1a;优化大字段存储 5. 性能调优建议 6. 底层原理 doc_values 是 Elasticsearch/OpenSearch 中用于优化查询和聚合的列式存储结…...

如何在 Windows 10 或 11 上使用命令提示符安装 PHP

我们可以在 Windows 上从其官方网站下载并安装 PHP 的可执行文件,但使用命令提示符或 PowerShell 更方便。 PHP 并不是一种新的或不为人知的脚本语言,它已经存在并被全球数千名网络开发人员使用。它以开源许可并分发,广泛用于 LAMP 堆栈中。然而,与 Linux 相比,它在 Wind…...

SZU 编译原理

总结自 深圳大学《编译原理》课程所学相关知识。 文章目录 文法语法分析自顶向下的语法分析递归下降分析LL(1) 预测分析法FIRST 集合FOLLOW 集合 文法 乔姆斯基形式语言理论&#xff1a; 表达能力&#xff1a;0型文法 > 1型文法 > 2型文法 > 3型文法。 0 型文法&am…...

灌区量测水自动化监测解决方案

一、方案背景 随着社会发展和人口增长&#xff0c;水资源需求不断增大。我国水资源总量虽然丰富&#xff0c;但时空分布不均&#xff0c;加之农业用水占比大且效率偏低&#xff0c;使得水资源短缺问题日益凸显。农业用水一直是我国的耗水大户&#xff0c;占全部耗水总量的60%以…...

CVE-2017-8046 漏洞深度分析

漏洞概述 CVE-2017-8046 是 Spring Data REST 框架中的一个高危远程代码执行漏洞&#xff0c;影响版本包括 Spring Data REST < 2.5.12、2.6.7、3.0 RC3 及关联的 Spring Boot 和 Spring Data 旧版本。攻击者通过构造包含恶意 SpEL&#xff08;Spring Expression Language&…...

1基·2台·3空间·6主体——蓝象智联解码可信数据空间的“数智密码”

近日&#xff0c;由全国数据标准化技术委员会编制的《可信数据空间 技术架构》技术文件正式发布&#xff0c;标志着我国数据要素流通体系向标准化、规范化迈出关键一步。该文件从技术功能、业务流程、安全要求三大维度对可信数据空间进行系统性规范&#xff0c;为地方、行业及企…...

MySQL的存储过程

这一部分比较重要&#xff0c;加油&#xff01;&#xff01;&#xff01;部分代码忘记保存了&#xff0c;嘻嘻&#xff0c;练习代码在最后&#xff0c;大家共勉&#xff01;&#xff01;&#xff01; 通俗来讲&#xff0c;视图是死的&#xff0c;但是这个可以根据传入的参数不同…...

spring学习->sprintboot

spring IoC(控制翻转): 控制:资源的控制权(资源的创建&#xff0c;获取&#xff0c;销毁等) 反转:和传统方式不一样(用上面new什么)&#xff0c;不用new让ioc来发现你用什么&#xff0c;然后我来给什么 DI:(依赖注入) 依赖:组件的依赖关系。如newsController依赖NewsServi…...

如何排查阻塞语句

文章目录 文档用途详细信息 文档用途 查询阻塞当前sql的语句&#xff0c;并结束阻塞语句。 详细信息 1、通过pg_stat_activity视图和pg_blocking_pids函数查找阻塞sql。 highgo# select pid,pg_blocking_pids(pid),wait_event_type,wait_event,query from pg_stat_activity…...

TIP-2021《SRGAT: Single Image Super-Resolution With Graph Attention Network》

推荐深蓝学院的《深度神经网络加速&#xff1a;cuDNN 与 TensorRT》&#xff0c;课程面向就业&#xff0c;细致讲解CUDA运算的理论支撑与实践&#xff0c;学完可以系统化掌握CUDA基础编程知识以及TensorRT实战&#xff0c;并且能够利用GPU开发高性能、高并发的软件系统&#xf…...

【AI学习】AI大模型技术发展研究月报的生成提示词

AI大模型技术发展研究月报生成提示词 请输出AI大模型技术发展研究月报&#xff0c;要求如下&#xff1a; —————————— 任务目标 在今天&#xff08;{{today}}&#xff09;往前连续 30 天内&#xff0c;检索已正式公开发表的、与AI大模型&#xff08;参数量 ≥10B&am…...

深入理解 Git 分支操作的底层原理

在软件开发的世界里&#xff0c;Git 已经成为了版本控制的标配工具。而 Git 分支功能&#xff0c;更是极大地提升了团队协作和项目开发的效率。我们在日常开发中频繁地创建、切换和合并分支&#xff0c;但是这些操作背后的底层原理是怎样的呢&#xff1f;在之前的博客探秘Git底…...

泰迪杯特等奖案例深度解析:基于多模态融合与小样本学习的工业产品表面缺陷智能检测系统

(第九届泰迪杯数据挖掘挑战赛特等奖案例全流程拆解) 一、案例背景与核心挑战 1.1 工业质检痛点分析 在3C电子、汽车零部件等高端制造领域,产品表面缺陷(划痕、凹陷、氧化等)检测是质量控制的核心环节。传统人工目检存在效率低(平均检测速度3秒/件)、漏检率高(约15%)…...

Go语言爬虫系列教程 实战项目JS逆向实现CSDN文章导出教程

爬虫实战&#xff1a;JS逆向实现CSDN文章导出教程 在这篇教程中&#xff0c;我将带领大家实现一个实用的爬虫项目&#xff1a;导出你在CSDN上发布的所有文章。通过分析CSDN的API请求签名机制&#xff0c;我们将绕过平台限制&#xff0c;获取自己的所有文章内容&#xff0c;并以…...

轨道炮--范围得遍历,map巧统计

1.思路很难想&#xff0c;但代码一看一下就明白了&#xff0c;就是模拟时间&#xff0c;map存起来遍历也不受10*6影响 2.每次先统计点对应的直线&#xff0c;再动这个点&#xff0c;map一遍历实时更新ma统计max&#xff0c;AC!!!! https://www.luogu.com.cn/problem/P8695 #i…...

python中集合的操作

Python中的集合&#xff08;Set&#xff09;是一种无序、可变且元素唯一的数据结构&#xff0c;主要用于去重和数学运算。以下是核心操作分类&#xff1a; ‌1. 集合创建‌ 大括号创建&#xff1a;s {1, 2, 3}&#xff08;空集合必须用set()&#xff09;构造函数&#xff1a…...

常见激活函数——作用、意义、特点及实现

文章目录 激活函数的意义常见激活函数及其特点1. Sigmoid&#xff08;Logistic 函数、S型函数&#xff09;2. Tanh&#xff08;双曲正切函数&#xff09;3. ReLU&#xff08;Rectified Linear Unit修正线性单元&#xff09;4. Softmax5. Swish&#xff08;Google 提出&#xff…...

FC7300 Trigger MCAL配置引导

FC7300包含4个触发器选择(TRGSELs)。详细的连接信息将在章节中描述。Trigger Select (TRGSEL)源。TRGSEL模块允许软件为外设选择触发器源。   TRGSEL提供了一种极其灵活的机制,用于将各种触发器源连接到多个引脚/外设。   在TRGSEL中,每个控制寄存器最多支持4个输出触…...

组件导航 (HMRouter)+flutter项目搭建-混合开发+分栏效果

组件导航 (Navigation)flutter项目搭建 接上一章flutter项目的环境变量配置并运行flutter 1.flutter创建项目并运行 flutter create fluter_hmrouter 进入ohos目录打开编辑器先自动签名 编译项目-生成签名包 flutter build hap --debug 运行项目 HMRouter搭建安装 1.安…...

WAS和Tomcat的对比

一、WAS和Tomcat的对比 WebSphere Application Server (WAS) 和 Apache Tomcat 是两款常用的 Java 应用服务器&#xff0c;但它们有许多显著的区别。在企业级应用中&#xff0c;它们扮演不同的角色&#xff0c;各自有其特点和适用场景。以下是它们在多个维度上的详细对比&…...

GPU Runtime Suspend 调试与验证:从 sysfs 到 perf 分析

选题背景&#xff1a;在基于 NXP i.MX8MP 平台调试 GPU 时&#xff0c;常常需要确认 Vivante GPU2D/ Vivante GPU2D/\uGPU3D 是否已经进入 runtime suspend &#xff0c;以降为一篇完整的验证和分析步骤&#xff0c;适合用于实战调试与面试表达。 一、什么是 Runtime Suspend&a…...

响应式布局

布局方式 固定宽度布局:主流的宽度有960px/980px/1190px/1210px等。移动端用户需要缩放查看页面内容 流式布局:百分比设置相对宽度。在不同设备上都能完整显示。兼容性一般,可能发生错位 响应式布局:一套代码自动适配不同终端。检测设备信息,根据设备调整布局。用户体验最…...

简单入门RabbitMQ

本章将带大家来写一个简单的程序&#xff0c;使用 Java 创建RabbitMQ 的生产者和消费者 依赖引入 在 Maven 仓库中输入 amqp-client&#xff1a; 找到第一个 RabbitMQ Java Client &#xff0c;点击进去找到一个合适的版本然后将依赖引入到我们项目中的 pom.xml 文件中。 …...

金属加工液展|切削液展|2025上海金属加工液展览会

2025上海金属加工液展览会 时间&#xff1a;2025年12月2-4日 地点&#xff1a;上海新国际博览中心 2025上海金属加工液展规划30000平方米展览规模&#xff0c;预设展位1200个&#xff0c;将为国内外加工液产业提供一个集“展示、合作、交易、发展”于一体的综合性平台&#…...

前端实现流式输出《后端返回Markdown格式文本,前端输出类似于打字的那种》

一、使用插件 插件名称&#xff1a;marked 版本&#xff1a;15.0.11 安装插件&#xff1a;npm install marked15.0.11 作用&#xff1a;marked 是一个用于将 Markdown 语法转换为 HTML 的 JavaScript 库 插件2名称&#xff1a;dompurify 版本&#xff1a;3.2.5 安装插件&…...

Python字符串常用方法详解

文章目录 Python字符串常用方法详解一、字符串大小写转换方法(常用)1. 基础大小写转换2. 案例&#xff1a;验证码检查&#xff08;不区分大小写&#xff09; 二、字符串查找与替换方法1. 查找相关方法2. 替换相关方法 三、字符串判断方法1. 内容判断方法 四、字符串分割与连接方…...

深度学习中的归一化:提升模型性能的关键因素

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型辅助完成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认…...

【C++】 —— 笔试刷题day_30

一、爱吃素 题目解析 这道题&#xff0c;简单来说就是给定两个数a和b&#xff0c;然后让我们判断a*b是否是素数。 算法思路 这道题还是比较简单的 首先&#xff0c;输入两个数a和b&#xff0c;这两个数的数据范围都是[1, 10^11]&#xff1b;10的11次方&#xff0c;那a*b不就是…...

WebMvcConfigurer介绍-笔记

1.WebMvcConfigurer功能简介 org.springframework.web.servlet.config.annotation.WebMvcConfigurer 是 Spring MVC 提供的一个接口&#xff0c;用于自定义 Web 应用的配置。通过实现该接口&#xff0c;开发者可以灵活地添加拦截器&#xff08;Interceptors&#xff09;、配置…...

简单图像自适应亮度对比度调整

一、背景介绍 继续在刷对比度调整相关算法&#xff0c;偶然间发现了这个简单的亮度/对比度自适应调整算法&#xff0c;做个简单笔记记录。也许后面用得到。 二、自适应亮度调整 1、基本原理 方法来自论文:Adaptive Local Tone Mapping Based on Retinex for High Dynamic Ran…...

[SpringBoot]Spring MVC(2.0)

紧接上文&#xff0c;这篇我们继续讲剩下的HTTp请求 传递JSON数据 简单来说&#xff1a;JSON就是⼀种数据格式,有⾃⼰的格式和语法,使⽤⽂本表⽰⼀个对象或数组的信息,因此JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换 JSON的语法 1. 数据在 键值对(Key/Value) …...

GDB 高级调试技术深度解析

1. 引言 GNU调试器(GDB)是软件开发和逆向工程领域中不可或缺的工具。它为开发者提供了一个强大的环境,用于检查正在运行的程序或程序崩溃后产生的核心转储文件的内部状态。虽然许多开发者熟悉GDB的基本命令,如设置断点和单步执行,但GDB的真正威力在于其丰富的高级功能集。…...

【Kuberbetes】详谈网络(第三篇)

目录 前言 一、K8S的三种网络 1.1 Pod 内容器与容器之间的通信 1.2 同一个 Node 内 Pod 之间的通信 1.3 不同 Node 上 Pod 之间的通信 1.4 汇总 二、K8S的三种接口 三、VLAN 和 VXLAN 的区别 3.1 使用场景不同 3.2 支持的数量不同 3.3 是否记录到MAC地址表中…...

【科普】具身智能

一、具身智能的基本概念与理论框架 具身智能&#xff08;Embodied Intelligence, EI&#xff09;是指智能体通过物理身体与环境的实时交互&#xff0c;实现感知、决策和行动的能力。其核心思想是“智能源于身体与环境的互动”&#xff0c;而非仅仅依赖于抽象的计算或符号处理。…...

java -jar命令运行 jar包时如何运行外部依赖jar包

java -jar命令运行 jar包时如何运行外部依赖jar包 场景&#xff1a; 打包发不完,运行时。发现一个问题&#xff0c; java java.lang.NoClassDefFoundError: org/apache/commons/lang3/ArrayUtils 显示此&#xff0c;基本表明&#xff0c;没有这个依赖&#xff0c;如果在开发…...

Linux进程信号(一)之信号的入门

文章目录 信号入门1. 生活角度的信号2. 技术应用角度的信号3. 注意4. 信号概念5.用kill -l命令可以察看系统定义的信号列表6. 信号处理常见方式 信号入门 1. 生活角度的信号 你在网上买了很多件商品&#xff0c;再等待不同商品快递的到来。但即便快递没有到来&#xff0c;你也…...

腾讯云MCP数据智能处理:简化数据探索与分析的全流程指南

引言 在当今数据驱动的商业环境中&#xff0c;企业面临着海量数据处理和分析的挑战。腾讯云MCP(Managed Cloud Platform)提供的数据智能处理解决方案&#xff0c;为数据科学家和分析师提供了强大的工具集&#xff0c;能够显著简化数据探索、分析流程&#xff0c;并增强数据科学…...

曝光融合(Exposure Fusion)

一、背景介绍 图像融合算法里面&#xff0c;hdr图像进行融合&#xff0c;拓宽动态范围的操作非常常见。 常用的hdr融合算法通常有两类&#xff1a; 1、不同曝光的ldr图像先进行hdr融合&#xff0c;得到高bit位的hdr图像&#xff0c;再通过tonemaping算法得到结果如图像。 2、不…...

无人机减震模块运行与技术要点分析!

一、减震模块的运行方式 1. 多级减震结构 两级减震设计&#xff1a;采用第一级减震组件&#xff08;如减震球、锥面减震垫&#xff09;吸收高频振动&#xff0c;第二级减震组件&#xff08;如减震环、负重物&#xff09;进一步过滤低频振动。例如&#xff0c;通过硅胶减震球…...

CVPR2025 | 首个多光谱无人机单目标跟踪大规模数据集与统一框架, 数据可直接下载

论文介绍 题目&#xff1a;MUST: The First Dataset and Unified Framework for Multispectral UAV Single Object Tracking 期刊&#xff1a;IEEE/CVF Computer Vision and Pattern Recognition Conference 论文&#xff1a;https://arxiv.org/abs/2503.17699 数据&#x…...

嵌入式故障码管理系统设计实现

文章目录 前言一、故障码管理系统概述二、核心数据结构设计2.1 故障严重等级定义2.2 模块 ID 定义2.3 故障代码结构2.4 故障记录结构 三、故障管理核心功能实现3.1 初始化功能3.2 故障记录功能3.3 记录查询与清除功能3.4 系统自检功能 四、故障存储实现4.1 Flash 存储实现4.2 R…...

若依框架Consul微服务版本

1、最近使用若依前后端分离框架改造为Consul微服务版本 在这里分享出来供大家参考 # Consul微服务配置参数已经放置/bin/Consul微服务配置目录 仓库地址&#xff1a; gitee&#xff1a;https://gitee.com/zlxls/Ruoyi-Consul-Cloud.git gitcode&#xff1a;https://gitcode.c…...

【风控】用户特征画像体系

一、体系架构概述 1.1 核心价值定位 风控特征画像体系是通过多维度数据融合分析&#xff0c;构建客户风险全景视图的智能化工具。其核心价值体现在&#xff1a; 全周期覆盖&#xff1a;贯穿客户生命周期的营销、贷前、贷中、贷后四大场景立体化刻画&#xff1a;整合基础数据…...

【Java微服务组件】分布式协调P1-数据共享中心简单设计与实现

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。 目录 引言设计一个共享数据中心选择数据模型键值对设计 数据可靠性设计持久化快照 &#xff08…...

数据库--向量化基础

本文包含内容有: 向量化、SIMD的概念及关系SSE,AVX-512八种基础的SIMD操作,并用具体例子解释,给出伪代码。一、快速了解向量化、SIMD 1.1 向量化 向量化是指将原本需要循环处理的多个数据元素,通过一条指令同时处理多个数据,从而减少循环次数,提高计算效率。 传统方式…...

handsome主题美化及优化:10.1.0最新版 - 2

文章目录 前言基础设置优化开启全站 HTTPS添加 GZIP 压缩美化永久链接自定义后台路径启用 Emoji 支持 功能增强每日新闻自动更新文章嵌入外部网页时光机栏目配置自定义音乐播放器音量 自定义CSS配置文章标题居中显示标题背景美化文章版式优化LOGO 扫光特效头像动画效果图片悬停…...

JWT令牌

1. JWT概述 JWT即JSON Web Token&#xff0c;是一个开放标准&#xff0c;用于在各方之间安全地传输信息。并且JWT经过数字签名&#xff0c;安全性高。通俗来说&#xff0c;也就是以JSON形式作为Web应用中的令牌&#xff0c;用于信息传输&#xff0c;在数据传输过程中可以完成数…...

Qwen3技术报告解读

https://github.com/QwenLM/Qwen3/blob/main/Qwen3_Technical_Report.pdf 节前放模型&#xff0c;大晚上的发技术报告。通义&#xff0c;真有你的~ 文章目录 预训练后训练Long-CoT Cold StartReasoning RLThinking Mode FusionGeneral RLStrong-to-Weak Distillation 模型结构…...