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

【STM32】片上ADC的初步使用

基于stm32f103系列
基于《零死角玩转 STM32F103—指南者》

ADC简介

stm32f103上的ADC

数量:3
精度:12bit(4096)
通道:ADC1,ADC2均有16个通道,ADC3有8个
功能:
  转换结束、注入转换结束和发生模拟看门狗事件时产生中断。
  单次和连续转换模式
  从通道0到通道n的自动扫描模式
  自校准
  带内嵌数据一致性的数据对齐
  采样间隔可以按通道分别编程
  规则转换和注入转换均有外部触发选项
  间断模式
  双重模式(带2个或以上ADC的器件)
在这里插入图片描述

输入电压范围

在这里插入图片描述

输入通道

根据手册选择输入通道
在这里插入图片描述

转换顺序

规则序列

规则序列 从小到大依次转换

在这里插入图片描述
配置SQR3、SQR2、SQR1寄存器。按顺序从SQR3中的SQ1,SQ2到SQR1中的SQ16

注入序列

注入序列 依据通道数目,从大到小或者从小到大

  注入序列寄存器 JSQR 只有一个,最多支持 4 个通道。具体多少个由 JSQR 的 JL[2:0]决定。如果 JL的 值小于 4 的话,则 JSQR 跟 SQR决定转换顺序的设置不一样,第一次转换的不是 JSQR1[4:0],而是 JCQRx[4:0] ,x = (4-JL),跟 SQR 刚好相反。如果 JL=00(1 个转换),那么转换的顺序是从 JSQR4[4:0]开始,而不是从 JSQR1[4:0]开始,这个要注意,编程的时候不要搞错。当 JL 等于 4 时,跟 SQR 一样。
在这里插入图片描述

触发源

1.CR寄存器中的CONbit位使能,开始转换
2.触发启动:
    内部定时器触发和外部 IO 触发
触发源有很多,具体选择哪一种触发源,由 ADC 控制寄存器 2:ADC_CR2 的EXTSEL[2:0]和 JEXTSEL[2:0]位来控制。EXTSEL[2:0]用于选择规则通道的触发源,JEXTSEL[2:0]用于选择注入通道的触发源。选定好触发源之后,触发源是否要激活,则由ADC 控制寄存器 2:ADC_CR2 的 EXTTRIG 和 JEXTTRIG 这两位来激活。其中 ADC3 的规则转换和注入转换的触发源与 ADC1/2 的有所不同。

EXTSEL[2:0]和JEXTSEL2:0]控制位允许应用程序选择8个可能的事件中的某一个,可以触发规则和注入组的采样。
在这里插入图片描述
在这里插入图片描述

转换时间

ADC 时钟

ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大是 14M,分频因子由 RCC 时钟配置寄存器 RCC_CFGR 的位 15:14 ADCPRE[1:0]设置,可以是 2/4/6/8 分频,注意这里没有 1 分频。一般我们设置 PCLK2=HCLK=72M。

采样时间

ADC 使用若干个 ADC_CLK 周期对输入的电压进行采样,采样的周期数可通过 ADC 采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位设置,ADC_SMPR2 控制的是通道 0~9,ADC_SMPR1 控制的是通道 10~17。每个通道可以分别用不同的时间采样。其中采样周期最小是 1.5 个,即如果我们要达到最快的采样,那么应该设置采样周期为 1.5 个周期,这里说的周期就是 1/ADC_CLK。

ADC 的转换时间跟 ADC 的输入时钟和采样时间有关,公式为:Tconv = 采样时间 + 12.5 个周期。当 ADCLK = 14MHZ (最高),采样时间设置为 1.5 周期(最快),那么总的转换时间(最短)Tconv = 1.5 周期 + 12.5 周期 = 14 周期 = 1us。

一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,这个才是最常用的。

数据寄存器 ADC->DR

ADC 转换后的数据根据转换组的不同,规则组的数据放在 ADC_DR寄存器,注入组的数据放在 JDRx。

规则数据寄存器 ADC_DR寄存器

ADC 规则组数据寄存器 ADC_DR 只有一个,是一个 32 位的寄存器,低 16 位在单 ADC时使用,高 16 位是在 ADC1 中双模式下保存 ADC2 转换的规则数据,双模式就是 ADC1 和ADC2 同时使用。

规则通道可以有 16 个这么多,可规则数据寄存器只有一个,如果使用多通道转换,那转换的数据就全部都挤在了 DR 里面,前一个时间点转换的通道数据,就会被下一个时间点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该把数据取走,或者开启 DMA 模式,把数据传输到内存里面,不然就会造成数据的覆盖。最常用的做法就是开启 DMA 传输

注入数据寄存器 JDRx寄存器

ADC 注入组最多有 4 个通道,刚好注入数据寄存器也有 4 个,每个通道对应着自己的寄存器,不会跟规则寄存器那样产生数据覆盖的问题。ADC_JDRx 是 32 位的,低 16 位有效,高 16 位保留,数据同样分为左对齐和右对齐,具体是以哪一种方式存放,由ADC_CR2 的 11 位 ALIGN 设置。

中断

转换结束中断

数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断。

模拟看门狗中断

当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由 ADC_LTR 和 ADC_HTR 设置。例如我们设置高阈值是 2.5V,那么模拟电压超过 2.5V的时候,就会产生模拟看门狗中断,反之低阈值也一样。

DMA请求

规则和注入通道转换结束后,除了产生中断外,还可以产生 DMA 请求,把转换好的数据直接存储在内存里面。要注意的是只有 ADC1 和 ADC3 可以产生 DMA 请求。

编程要点

独立单通道

ADC GPIO 初始化

 static void ADCx_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_Init(GPIOC, &GPIO_InitStructure);}

ADC 工作模式配置

// ADC 编号选择
// 可以是 ADC1/2,如果使用 ADC3,中断相关的要改成 ADC3 的
#define ADC_APBxClock_FUN RCC_APB2PeriphClockCmd
#define ADCx ADC2
#define ADC_CLK RCC_APB2Periph_ADC2// ADC GPIO 宏定义
// 注意:用作 ADC 采集的 IO 必须没有复用,否则采集电压会有影响
#define ADC_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd
#define ADC_GPIO_CLK RCC_APB2Periph_GPIOC
#define ADC_PORT GPIOC
#define ADC_PIN GPIO_Pin_1
// ADC 通道宏定义
#define ADC_CHANNEL ADC_Channel_11// ADC 中断相关宏定义
#define ADC_IRQ ADC1_2_IRQn
#define ADC_IRQHandler ADC1_2_IRQHandlerstatic void ADCx_Mode_Config(void)
{ADC_InitTypeDef ADC_InitStructure;// 打开 ADC 时钟ADC_APBxClock_FUN ( ADC_CLK, ENABLE );// ADC 模式配置// 只使用一个 ADC,属于独立模式ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;// 禁止扫描模式,多通道才要,单通道不需要ADC_InitStructure.ADC_ScanConvMode = DISABLE ;// 连续转换模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;// 不用外部触发转换,软件开启即可ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;// 转换结果右对齐ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;// 转换通道 1 个ADC_InitStructure.ADC_NbrOfChannel = 1;// 初始化 ADCADC_Init(ADCx, &ADC_InitStructure);// 配置 ADC 时钟N狿 CLK2 的 8 分频,即 9MHzRCC_ADCCLKConfig(RCC_PCLK2_Div8);// 配置 ADC 通道转换顺序为 1,第一个转换,采样时间为 55.5 个时钟周期ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1,ADC_SampleTime_55Cycles5);// ADC 转换结束产生中断,在中断服务程序中读取转换值ADC_ITConfig(ADCx, ADC_IT_EOC, ENABLE);// 开启 ADC ,并开始转换ADC_Cmd(ADCx, ENABLE);// 初始化 ADC 校准寄存器ADC_ResetCalibration(ADCx);// 等待校准寄存器初始化完成while (ADC_GetResetCalibrationStatus(ADCx));// ADC 开始校准ADC_StartCalibration(ADCx);// 等待校准完成while (ADC_GetCalibrationStatus(ADCx));// 由于没有采用外部触发,所以使用软件触发 ADC 转换ADC_SoftwareStartConvCmd(ADCx, ENABLE);}

ADC 中断配置

NVIC配置

static void ADC_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQ;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

开启ADC中断

// ADC 转换结束产生中断,在中断服务程序中读取转换值ADC_ITConfig(ADCx, ADC_IT_EOC, ENABLE);

ADC中断服务函数

在这里插入图片描述
在这里插入图片描述

1.ADC1和ADC2共有一个中断服务函数
2.中断服务函数中读取ADC状态寄存器SR的相应位置

void ADC_IRQHandler(void)
{if (ADC_GetITStatus(ADCx,ADC_IT_EOC)==SET) {// 读取 ADC 的转换值ADC_ConvertedValue = ADC_GetConversionValue(ADCx);}ADC_ClearITPendingBit(ADCx,ADC_IT_EOC);
}

独立模式多通道采集

  1. 初始化 ADC GPIO;
  2. 初始化 ADC 工作参数;
  3. 配置 DMA 工作参数;
  4. 读取 ADC 采集的数据;

GPIO配置

static void ADCx_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;// 打开 ADC IO 端口时钟ADC_GPIO_APBxClock_FUN ( ADC_GPIO_CLK, ENABLE );// 配置 ADC IO 引脚模式GPIO_InitStructure.GPIO_Pin = ADC_PIN1|ADC_PIN2|ADC_PIN3|ADC_PIN4|ADC_PIN5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;// 初始化 ADC IOGPIO_Init(ADC_PORT, &GPIO_InitStructure);}

ADC以及DMA模式配置

static void ADCx_Mode_Config(void)
{DMA_InitTypeDef DMA_InitStructure;ADC_InitTypeDef ADC_InitStructure;// 打开 DMA 时钟RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);// 打开 ADC 时钟ADC_APBxClock_FUN ( ADC_CLK, ENABLE );/* ------------------DMA 模式配置---------------- */// 复位 DMA 控制器DMA_DeInit(ADC_DMA_CHANNEL);// 配置 DMA 初始化结构体// 外设基址为:ADC 数据寄存器地址DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&( ADCx->DR ));// 存储器地址DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_ConvertedValue;// 数据源来自外设DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;// 缓冲区大小,应该等于数据目的地的大小DMA_InitStructure.DMA_BufferSize = NOFCHANEL;// 外设寄存器只有一个,地址不用递增DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 存储器地址递增DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;// 外设数据大小为半字,即两个字节DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;// 内存数据大小也为半字,跟外设数据大小相同DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;// 循环传输模式DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// DMA 传输通道优先级为高,当使用一个 DMA 通道时,优先级设置不影响DMA_InitStructure.DMA_Priority = DMA_Priority_High;// 禁止存储器到存储器模式,因为是从外设到存储器DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;// 初始化 DMADMA_Init(ADC_DMA_CHANNEL, &DMA_InitStructure);// 使能 DMA 通道DMA_Cmd(ADC_DMA_CHANNEL , ENABLE);/* ----------------ADC 模式配置--------------------- */// 只使用一个 ADC,属于单模式ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;// 扫描模式ADC_InitStructure.ADC_ScanConvMode = ENABLE ;// 连续转换模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;// 不用外部触发转换,软件开启即可ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;// 转换结果右对齐ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;// 转换通道个数ADC_InitStructure.ADC_NbrOfChannel = NOFCHANEL;// 初始化 ADCADC_Init(ADCx, &ADC_InitStructure);// 配置 ADC 时钟N狿 CLK2 的 8 分频,即 9MHzRCC_ADCCLKConfig(RCC_PCLK2_Div8);// 配置 ADC 通道的转换顺序和采样时间ADC_RegularChannelConfig(ADCx, ADC_CHANNEL1, 1,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADCx, ADC_CHANNEL2, 2,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADCx, ADC_CHANNEL3, 3,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADCx, ADC_CHANNEL4, 4,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADCx, ADC_CHANNEL5, 5,ADC_SampleTime_55Cycles5);// 使能 ADC DMA 请求ADC_DMACmd(ADCx, ENABLE);// 开启 ADC ,并开始转换ADC_Cmd(ADCx, ENABLE);// 初始化 ADC 校准寄存器ADC_ResetCalibration(ADCx);// 等待校准寄存器初始化完成while (ADC_GetResetCalibrationStatus(ADCx));// ADC 开始校准ADC_StartCalibration(ADCx);// 等待校准完成while (ADC_GetCalibrationStatus(ADCx));// 由于没有采用外部触发,所以使用软件触发 ADC 转换ADC_SoftwareStartConvCmd(ADCx, ENABLE);}

双重 ADC 同步规则模式采集

参看《零死角玩转STM32—F103指南者》

相关文章:

【STM32】片上ADC的初步使用

基于stm32f103系列 基于《零死角玩转 STM32F103—指南者》 ADC简介 stm32f103上的ADC 数量:3 精度:12bit(4096) 通道:ADC1,ADC2均有16个通道,ADC3有8个 功能:   转换结束、注入转换结束和发生模拟看门狗事件时产生中断。   …...

esxi下实现ikuai相同的两个网卡,单独路由配置

1.首先安装配置双网卡。 因为esxi主机只接入了一根外网的网线,那么我们这两个网卡都是一样的网卡,具体的到系统里面进行设置。 2.开机安装系统 进入配置界面,此处就不用多说了,可以看我之前的文档,或者网上其他人的安…...

Windows环境下Elasticsearch相关软件安装

Windows环境下Elasticsearch相关软件安装 本文将介绍在 windows 环境下安装 Elasticsearch 相关的软件。 1、安装Elasticsearch 1.1 安装jdk ElasticSearch是基于lucence开发的,也就是运行需要java jdk支持,所以要先安装JAVA环境。 由于ElasticSear…...

配置Jedis连接池

一、概述 Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐使用Jedis连接池代替Jedis的直连方式。 二、创建连接池 public class JedisConnectionFactory {private static final JedisPool jedisPool;static {//配置连接池Jedi…...

Windows 12 开源网页版

前言 Windows 12 网页版是一个开源项目,使用标准网络技术,例如 Html、CSS 和 Javascript, 希望让用户在网络上预先体验 Windows 12 Windows 12 网页版download Windows 12 网页版 gitlab项目Windows 12 网页版 downloadWindows 12 demo参考downloaddemo test 开始菜单 ​ …...

circleMidpoint(scrPt c, GLint r) 未定义的标识符,openGL第四章例子 ,画饼状图。

以下是完整的例子。在第四版 《计算机图形学 with openGL》第四章的例子中,竟然只调用了circleMidpoint(scrPt &c, GLint r) ,没有实现,我认为是系统方法,怎么找都找不到。openGL 官方文档也没找到,这不会是自定义…...

RKNN模型评估-性能评估和内存评估

基于Python的模型评估 perf_debug:进行性能评估时是否开启debug 模式。在 debug 模式下,可以获取到每一层的运行时间,否则只能获取模型运行的总时间。默认值为 False。 eval_mem: 是否进入内存评估模式。进入内存评估模式后,可以…...

window mysql-8.0.34 zip解压包安装

window系统上安装mysql8 解压版 下载压缩包 https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.34-winx64.zip安装 用解压软件解压刚下载的mysql-8.0.34-winx64.zip 的文件至d:\devs路径下。 创建配置文件my.ini到路径d:\devs\mysql-8.0.34-winx64下 [mysqld] # 设置…...

Mysql判断某个数据库中是否包含某个表,与pymysql工具函数

查看某个数据库中的全部表: SELECT table_name FROM information_schema.tables WHERE table_schema 数据库名因此查看某个库中的某个表可以使用: SELECT table_name FROM information_schema.tables WHERE table_schema 数据库名 AND table_name 表…...

快速掌握正则表达式

文章目录 限定符 Qualifier第一个常用限定符 ?第二个常用限定符 *第三个常用限定符 或运算符字符类元字符 Meta-characters\d 数字字符\w 单词字符空白符 \s.任意字符^ $ 行首行尾 贪婪与懒惰匹配 Greedy vs Lazy Match实例 1 :RGB颜色匹配实例 2 &…...

git: ‘lfs‘ is not a git command unclear

首先可以尝试 git lfs install 是否可以,不可以后就看这个连接:https://stackoverflow.com/questions/48734119/git-lfs-is-not-a-git-command-unclear。 我的是ubuntu,所以: 保证这个前提: git-lfs requires git ve…...

代码随想录--哈希--两个数组的交集

题意:给定两个数组,编写一个函数来计算它们的交集。 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 import java.util.ArrayList; import java.util.HashMap; import java.util.List;public class SSS {public …...

基于腾讯文档进行应届生个人求职记录

1. 新建一个腾讯文档 电脑登录QQ,点击“腾讯文档”功能键。 2. 可以选择下载客户端,也可以直接进入网页版。(本人使用网页版) 3. 点击新建,选择在线表格。 4. 编辑表名,表内容。 5. 设置文档权限&#xf…...

计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

图像分类 教程博客_传送门链接:链接 在本教程中,您将学习如何使用迁移学习训练卷积神经网络以进行图像分类。您可以在 cs231n 上阅读有关迁移学习的更多信息。 本文主要目的是教会你如何自己搭建分类模型,耐心看完,相信会有很大收获。废话不…...

(18)线程的实例认识:线程的控制,暂停,继续,停止,线程相互控制,协作

话不多,但比较中肯,本文参照c# 线程暂停继续的实现方式_哔哩哔哩_bilibili 一、老方式 1、这是一个老的实现方式,基本不推荐,背后控制的原理需要了解。 界面:三个button一个textbox …...

c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入

c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入 功能介绍代码案例输出结果封装扩展方法控制台调用 其他方法地址 功能介绍 1. 输入的数字是整数,则直接返回整数部分的字符串表示。 2. 如果输入的数字是小数,则执行…...

大数据精准营销大数据平台应用场景有哪些,平台优势有哪些?

精准营销大数据平台应用场景有很多种,比如在银行领域,我通过相应的客户数据,也可以给客户推广一些银行业务。还可以运用于证券行业,除此之外还可以运用于保险或者信托行业,借助精准营销大数据平台可以进行主动营销。那…...

Pyspark案例综合(数据计算)

数据计算 map方法 map算子 map算子(成员方法)接受一个处理函数,可用lambda快速编写,对RDD内的元素一一处理,返回RDD对象 链式调用 对于返回值是新的RDD的算子,可以通过链式调用的方式多次调用算子 &q…...

电路电子技术1--关联参考方向及功率的计算

1.判断 电流由元件的低点位端流向高电位端的参考方向称为关联参考方向。() 考点:电流、电压的参考方向 解释:在一些复杂的电路中,往往不能预先确定某段电路上的电流、电压的实际方向,所以引进了 “关联参考方向”。为了能够解决问…...

【C++】AVL树的插入操作实现以及验证是否正确(带平衡因子)

文章目录 前言一、AVL树结点的定义二、AVL树的插入(Insert)插入完整代码:1.左单旋(RotateL)2.右单旋(RotateR)3.先右单旋再左单旋(RotateRL)1.保存的bf为02.保存的bf为13…...

【Linux-Day10-信号量,共享内存,消息队列】

信号量 信号量描述 信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目,获取资源 时,需要对信号量的值进行原子减一,该操作被称为 P 操作。 当信号量值为 0 时,代表没有资源可用,P 操作…...

使用IntelliJ IDEA本地启动调试Flink流计算工程的2个异常解决

记录:471 场景:使用IntelliJ IDEA本地启动调试Flink流计算时,报错一:加载DataStream报错java.lang.ClassNotFoundException。报错二:No ExecutorFactory found to execute the application。 版本:JDK 1.…...

对象及日期对象

对象 1.什么是对象 类是对象的抽象,对象是类的实例 程序算法数据结构 万物皆对象,对象是一个具体的事物,看到见摸得着,对象是一组无序相关属性和方法的集合(无序,所以对象没有length属性),所有事物都是对象,列如字符串,数值,数组,函数等. 属性:事物的特征,在对象中用属性表…...

鼠标滚轮编码器解析

文章目录 前言一、鼠标滚轮编码器逻辑?二、使用步骤 1.引入库2.读入数据总结 前言 鼠标滚轮编码器为三脚接入,一个COM脚C(一般是接地),两个脉冲波形输入脚A、B,转动滚轮编码器会在两个脉冲输入脚上产生脉冲…...

【PTA】攀拓(PAT)- 程序设计(甲级)2023年春季考试

个人学习记录,代码难免不尽人意。 今天又斥资买了今年春季的真题一试,呃,感觉尽力了,89分,在当年排名23,感觉还不错,没有出现读不懂的题目和没有思路的情况,扣的11分分别是第二题两个…...

Spring Cloud Gateway 实现原理

Spring Cloud Gateway是Spring Cloud生态系统中的一个组件,用于构建基于Spring Boot的微服务架构中的网关服务。它的主要目的是提供一种灵活的方式来路由、过滤和转换HTTP请求,从而允许您构建强大、高性能的微服务应用程序。 以下是Spring Cloud Gatewa…...

嘉泰实业:真实低门槛,安全有保障

在互联网金融大行其道的当下,无论用户是多么的青睐、喜爱这种便捷的理财方式,也一定得把资金安全放在心上。要投就投那些实力背景雄厚,诚信经营的平台,可以选择投资用户基数庞大的理财老品牌,也可以选择发展势头迅猛的…...

spring boot 2.7 -> 3.0升级指南

spring boot提供一个版本迁移指南 2.7 -> 3.0...

MQTT 连接优化指南

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

算法和数据结构学习中的一些小的工具函数

算法和数据结构学习中的一些小的工具函数 作者:Grey 原文地址: 博客园:算法和数据结构学习中的一些小的工具函数 CSDN:算法和数据结构学习中的一些小的工具函数 提取一个数二进制最右侧的 1 比如二进制为:0100 0…...

链家在线网站是哪个公司做的/百度一下你就知道了官网

首先注册一个代理(firewall): options->global options->firewall->add->socks5 在会话中设置成当前的代理: session->Session Options ->ssh2,在下拉菜单选择代理。...

营销型网站成功案例/seo页面如何优化

自从有了XML以后,跨系统的数据交换变得越来越简单。.NET更把XML做为底层数据交换的基础,并在.NET框架中提供了强大的类库以增强XML的编程能力。这些类包含在System.Xml命名空间中。在跨系统的数据交换中,对象的序列化与反序列化是重中之重。.…...

wordpress 搜索框代码/河北seo基础教程

UaExpert是OPC UA Client的GUI工具,当编写好server代码后并运行,我们可以使用UaExpert去和server进行通信,下面就简单介绍下使用步骤。 一 下载UaExpert UaExpert 官网地址是https://www.unified-automation.com/,进入网站后需要…...

智能响应式网站建设/海南快速seo排名优化

AllowOverride是指确定允许存在于.htaccess文件中的指令类型 通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须[1]对.htaccess 所在目录进行配置。从安…...

商业网站定义/seo sem

“秋招“求职季已经过了大半,有的小伙伴已经在这个赛季的前半段成功突围,顺利地找到了心仪的新东家,还有部分小伙伴仍每天苦苦煎熬,不得上岸,辗转在面试之间。 说到求职面试,不得不提的就是那些“招人恨”…...

北京环评在那个网站上做/网络营销策划推广公司

一、File文件操作相关的类 在 java.io 包之中,用 File 类来对文件进行操作(创建、删除、取得信息等) 官方文档对于File类的说明 java.io.File 类是一个普通的类,如果要实例化对象,则常用到两个构造方法 public File(String pathname) 创建指定路径文件对象 publi…...