10.STM32F407ZGT6-内部温度传感器
参考:
1.正点原子
前言:
本笔记的主要目的和意义就是,再次练习ADC的使用。
32.1 内部温度传感器简介
STM32F407 有一个内部的温度传感器,可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说,该温度传感器在内部和 ADC1_INP16(STM32F40xx/F41xx 系列)或ADC_IN18(STM32F42xx/F43xx)输入通道相连接,此通道把传感器输出的电压转换成数字值。
STM32F4 的内部温度传感器支持的温度范围为:-40~125 度。精度为±1.5℃左右。
STM32F407 内部温度传感器的使用很简单,只要设置一下内部 ADC,并激活其内部温度传感器通道就差不多了。关于 ADC 的设置,我们在上一章已经进行了详细的介绍,这里就不再多说。接下来我们介绍一下和温度传感器设置相关的两个地方。
第一个地方,我们要使用 STM32F407 的内部温度传感器,必须先激活 ADC 的内部通道,这里通过 ADC_CCR 的 VSENSEEN 位(bit23)设置。设置该位为 1 则启用内部温度传感器。
第二个地方,STM32F407ZGT6 的内部温度传感器固定的连接在 ADC1 的通道 16 上,所以,我们在设置好 ADC1 之后只要读取通道 16 的值,就是温度传感器返回来的电压值了。根据这个值,我们就可以计算出当前温度。计算公式如下:
𝑇(℃) ={ (Vsense - V25) / Avg_Slope}+25
式子中:
V25 = Vsense 在 25 度时的数值(典型值为:0.76)
Avg_Slope = 温度与 Vsense 曲线的平均斜率(单位:mv/℃或 uv/℃)(典型值:2.5mv/℃)。
利用以上公式,我们就可以方便的计算出当前温度传感器的温度了。
现在,我们就可以总结一下 STM32 内部温度传感器使用的步骤了,如下:
1)设置 ADC,并开启 ADC_CR2 的 VSENSEEN 位。
关于如何设置 ADC,请参考上一章对单通道 ADC 采集实验的设置,都是大同小异。然后,我们需要设置 ADC_CR2 寄存器的 VSENSEEN 位为 1,开启内部温度传感器。
2)读取 ADC 通道 16 的 AD 值,计算结果。
在设置完之后,我们就可以读取温度传感器的电压值了,得到该值就可以用上面的公式计算温度值了。
32.2 硬件设计
- 例程功能
通过 ADC1 的通道 16 读取 STM32F407 内部温度传感器的电压值,并将其转换为温度值,通过串口输出。 - 硬件资源
1)串口 1(PA9/PA10 连接在板载 USB 转串口芯片 CH340 上面)
2)ADC1 通道 16
3)内部温度传感器 - 原理图
ADC 和内部温度传感器都属于 STM32F407 内部资源,实际上我们只需要软件设置就可以正常工作。
32.3 程序设计
32.3.1 ADC 的 HAL 库驱动
本实验用到的 ADC 的 HAL 库 API 函数前面都介绍过,具体调用情况请看程序解析部分。
下面介绍读取内部温度传感器 ADC 值的配置步骤。
读取内部温度传感器 ADC 值配置步骤
1)开启 ADC 时钟
通过__HAL_RCC_ADC1_CLK_ENABLE 函数开启 ADC1 的时钟。
2)设置 ADC1,开启内部温度传感器
调用 HAL_ADC_Init 函数来设置 ADC1 时钟分频系数、分辨率、模式、扫描方式、对齐方式等信息。
注意:该函数会调用:HAL_ADC_MspInit 回调函数来完成对 ADC 底层的初始化,包括:ADC1 时钟使能、ADC1 时钟源的选择等。
3)配置 ADC 通道并启动 AD 转换器
调用 HAL_ADC_ConfigChannel()函数配置 ADC1 通道 16,根据需求设置通道、序列、采样时间和校准配置单端输入模式或差分输入模式等。然后通过 HAL_ADC_Start 函数启动 AD 转换器。
4)读取 ADC 值,计算温度
这里选择查询方式读取,在读取 ADC 值之前需要调用 HAL_ADC_PollForConversion 等待上一次转换结束。然后就可以通过 HAL_ADC_GetValue 来读取 ADC 值。最后根据上面介绍的公式计算出温度传感器的温度值。
32.3.3 程序解析
1. adc 驱动代码
首先是 ADC 初始化函数,其定义如下:
void MX_ADC1_Init(void)
{/* USER CODE BEGIN ADC1_Init 0 *//* USER CODE END ADC1_Init 0 */ADC_ChannelConfTypeDef sConfig = {0};/* USER CODE BEGIN ADC1_Init 1 *//* USER CODE END ADC1_Init 1 *//** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)*/hadc1.Instance = ADC1;hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;hadc1.Init.Resolution = ADC_RESOLUTION_12B;hadc1.Init.ScanConvMode = DISABLE;hadc1.Init.ContinuousConvMode = DISABLE;hadc1.Init.DiscontinuousConvMode = DISABLE;hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion = 1;hadc1.Init.DMAContinuousRequests = DISABLE;hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;if (HAL_ADC_Init(&hadc1) != HAL_OK){Error_Handler();}/** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.*/sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; /*ADC16通道*/sConfig.Rank = 1;sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)/*配置了ADC16,该函数就会打开内部温度传感器*/{Error_Handler();}/* USER CODE BEGIN ADC1_Init 2 *//* USER CODE END ADC1_Init 2 */}
下面是获得 ADC 转换后的结果函数,其定义如下:
#include "adc_app.h"extern ADC_HandleTypeDef hadc1;/**
* @brief 设置 ADC 通道采样时间
* @param adcx : adc 句柄指针,ADC_HandleTypeDef
* @param ch : 通道号, ADC_CHANNEL_0~ADC_CHANNEL_17
* @param stime: 采样时间 0~7, 对应关系为:
* @arg ADC_SAMPLETIME_3CYCLES, 3 个 ADC 时钟周期ADC_SAMPLETIME_15CYCLES, 15 个 ADC 时钟周期
* @arg ADC_SAMPLETIME_28CYCLES, 28 个 ADC 时钟周期 ADC_SAMPLETIME_56CYCLES, 56 个 ADC 时钟周期
* @arg ADC_SAMPLETIME_84CYCLES, 84 个 ADC 时钟周期 ADC_SAMPLETIME_112CYCLES,112 个 ADC 时钟周期
* @arg ADC_SAMPLETIME_144CYCLES,144 个 ADC 时钟周期ADC_SAMPLETIME_480CYCLES,480 个 ADC 时钟周期
* @param rank: 多通道采集时需要设置的采集编号, 假设你定义 channel1 的 rank=1,channel2 的 rank=2,
* 那么对应你在 DMA 缓存空间的变量数组 AdcDMA[0] 就 i 是 channle1 的转换结果, AdcDMA[1]就是通道 2 的转换结果。单通道 DMA 设置为 ADC_REGULAR_RANK_1
* @arg 编号 1~16:ADC_REGULAR_RANK_1~ADC_REGULAR_RANK_16
* @retval 无
*/
void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch, uint32_t rank, uint32_t stime)
{/* 配置对应 ADC 通道 */ADC_ChannelConfTypeDef adc_channel;adc_channel.Channel = ch; /* 设置 ADCX 对通道 ch */adc_channel.Rank = rank; /* 设置采样序列 */adc_channel.SamplingTime = stime; /* 设置采样时间 */HAL_ADC_ConfigChannel( adc_handle, &adc_channel);
}/**
* @brief 获得 ADC 转换后的结果
* @param ch: 通道值 0~17,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_17
* @retval 无
*/
uint32_t adc_get_result(uint32_t ch)
{/* 设置通道,序列和采样时间 *///adc_channel_set(&hadc1, ch, 1, ADC_SAMPLETIME_480CYCLES);HAL_ADC_Start(&hadc1); /* 开启 ADC */HAL_ADC_PollForConversion(&hadc1, 10); /* 轮询转换 *//* 返回最近一次 ADC1 规则组的转换结果 */return (uint16_t)HAL_ADC_GetValue(&hadc1);
}/**
* @brief 获取通道 ch 的转换值,取 times 次,然后平均
* @param ch : 通道号, 0~17
* @param times : 获取次数
* @retval 通道 ch 的 times 次转换结果平均值
*/
uint32_t adc_get_result_average(uint32_t ch, uint8_t times)
{uint32_t temp_val = 0;uint8_t t;for (t = 0; t < times; t++) /* 获取 times 次数据 */{temp_val += adc_get_result(ch);}return temp_val / times; /* 返回平均值 */
}/**
* @brief 获取内部温度传感器温度值
* @param 无
* @retval 温度值(扩大了 100 倍,单位:℃.)
*/
float adc_get_temperature(void)
{uint32_t adcx;float result;double temperature;adcx = adc_get_result_average(ADC_CHANNEL_TEMPSENSOR, 10);/* 读取内部温度传感器通道,10 次取平均 */temperature = (float)adcx*(3.3/4096); /* 获取电压值 */temperature = (temperature - 0.76)/0.0025 + 25; /* 将电压值转换为温度值 */result = temperature;return result;
}
该函数先是调用前面 ADC 实验章节写好的 adc_get_result_average 函数取获取通道 ch 的转换值,然后通过温度转换公式,返回温度值。
2. main.c 代码
在 main.c 里面编写如下代码:
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_USART1_UART_Init();MX_TIM6_Init();MX_RTC_Init();MX_ADC1_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){uart_debug_task();XL_TIME6_time_show(); /*周期输出内部温度值*//* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
3.内部温度周期调用
#include "stdio.h"
#include "tim.h"
#include "usart.h"
#include "rtc.h"
#include "adc_app.h"#define TIME_PERIODIC_1S (10) /*1s打印一次*/
#define TIME_PERIODIC_10S (100) /*修改为10s打印一次*/static uint32_t g_time_1s = 0;
static uint32_t g_time_10s = 0;void LED_blink(void)
{HAL_GPIO_TogglePin(LED_0_GPIO_Port, LED_0_Pin);HAL_GPIO_TogglePin(LED_1_GPIO_Port, LED_1_Pin);
}void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM6){LED_blink();g_time_1s++;g_time_10s++;}}void XL_TIME6_time_show(void)
{if (g_time_1s >= TIME_PERIODIC_1S){g_time_1s = g_time_1s - TIME_PERIODIC_1S;float tmp_value = adc_get_temperature();printf("tmp_value:%f\r\n", tmp_value);}if (g_time_10s >= TIME_PERIODIC_10S){g_time_10s = g_time_10s - TIME_PERIODIC_10S;RTC_TimeTypeDef sTime = {0};HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);printf("H:%d, M:%d, S:%d\r\n", sTime.Hours, sTime.Minutes, sTime.Seconds);RTC_DateTypeDef sDate = {0};HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);printf("Y:%d, M:%d, W:%d, D:%d\r\n", sDate.Year, sDate.Month, sDate.WeekDay, sDate.Date);}
}
32.4 下载验证
将程序下载到开发板后,可以看到串口周期输出温度:稳定在31.3度左右(因为芯片会发热,所以一般会比实际温度偏高一点)
32.5 STM32CubeMX
1.内部温度的配置
32.6 源代码路径
git clone git@gitee.com:xiaoliangliangcong/stm32.git
STM32F407ZGT6/10.internal_temperature_sensor
相关文章:
10.STM32F407ZGT6-内部温度传感器
参考: 1.正点原子 前言: 本笔记的主要目的和意义就是,再次练习ADC的使用。 32.1 内部温度传感器简介 STM32F407 有一个内部的温度传感器,可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说,该温度传感器在…...
软件测试预备知识④—NTFS权限管理、磁盘配额与文件共享
在软件测试的实际环境搭建与管理过程中,了解和掌握NTFS权限管理、磁盘配额以及文件共享等知识至关重要。这些功能不仅影响系统的安全性和稳定性,还对测试数据的存储、访问以及多用户协作测试有着深远的影响。 一、NTFS权限管理 1.1 NTFS简介 NTFS&am…...
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能 基于SpringBoot3Vue3前后端分离的Java快速开发框架 项目简介:基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-P…...
科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍 Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了部分刻度。这种图表…...
省森林防火应急指挥系统
森林防火形势严峻 我国森林防火形势十分严峻,森林火灾具有季节性强、发现难、成灾迅速等特点,且扑救难度大、影响范围广、造成的损失重。因此,构建森林防火应急指挥系统显得尤为重要。 系统建设模式与架构 森林防火应急指挥系统采用大智慧…...
HTML 迷宫游戏
HTML 迷宫游戏 相关资源文件已经打包成压缩文件,可双击index.html直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢࿰…...
【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法
工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法,主要考察开发经验与技术水平,回答不佳会影响面试印象。提供四个回答方向,准备其中一个方向即可。 1、设计模式应用方向 以登录为例,未…...
Autoencoder(李宏毅)机器学习 2023 Spring HW8 (Boss Baseline)
1. Autoencoder 简介 Autoencoder是一种用于学习数据高效压缩表示的人工神经网络。它由两个主要部分组成: Encoder 编码器将输入数据映射到一个更小的、低维空间中的压缩表示,这个空间通常称为latent space或bottleneck。 这一过程可以看作是数据压缩,去除冗余信息,仅保留…...
Python的循环
Python的循环 Python的循环有两种,分别是for…in循环和while循环。 for…in 循环 假设我们要循环输出一个列表里的元素: names [张三,李四,王五] for name in names:print(name)执行这段代码后,会依次打印names的每一个元素:…...
车联网安全--TLS握手过程详解
目录 1. TLS协议概述 2. 为什么要握手 2.1 Hello 2.2 协商 2.3 同意 3.总共握了几次手? 1. TLS协议概述 车内各ECU间基于CAN的安全通讯--SecOC,想必现目前多数通信工程师们都已经搞的差不多了(不要再问FvM了);…...
Git | git stash命令详解
关注:CodingTechWork 引言 在日常开发中,使用Git版本控制系统时,可能会遇到需要暂时中断当前工作,去处理其他任务的情况。这时,如果直接切换分支,可能会导致当前的修改未提交而丢失或需要暂时保存修改的状…...
LeetCode hot100-100
287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。你设计的解决方案必须 不修改 数组…...
AWS re:Invent 2024 现场实录 - It‘s all about Scale
时隔五年,再度造访美国,也是同样的主题,参加在拉斯维加斯举行的 AWS re:Invent 大会。 会场 从 2012 起第一届开始,每年的 re:Invent 大会都放在拉斯维加斯,主会场也都放在威尼斯人酒店 (Venetian)。有小伙伴好奇这背…...
qt-C++笔记之自定义继承类初始化时涉及到parents的初始化
qt-C笔记之自定义继承类初始化时涉及到parents的初始化 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QWidget …...
[微服务]redis数据结构
介绍 我们常用的Redis数据类型有5种,分别是: StringListSetSortedSetHash 还有一些高级数据类型,比如Bitmap、HyperLogLog、GEO等,其底层都是基于上述5种基本数据类型。因此在Redis的源码中,其实只有5种数据类型。 …...
android四大组件之一——Service
目录 一、Service概述 二、生命周期 三、权限 四、进程生命周期 五、组件与绑定Service的通信方式 1.扩展 Binder 类 2.Messenger信使 3.AIDL 七、总结 场景使用区别 一、Service概述 Service 是应用组件,代表一个应用的长时间后台运行的操作࿰…...
PythonOpenCV图片识别
在windows下面,使用python opencv 进行识别,获取到坐标。 依赖安装: pip install opencv-python pip install numpy pip install pyautogui pip install pywin32代码: import cv2 import numpy as np import pyautogui import o…...
ASP.NET Core 中使用 Cookie 身份验证
在 ASP.NET Core 中使用 Cookie 身份验证,通常是为了实现用户的登录和授权。以下是配置 Cookie 身份验证的步骤。 1. 安装必要的 NuGet 包 首先,确保项目中包含 Microsoft.AspNetCore.Authentication.Cookies 包。你可以通过 NuGet 包管理器或命令行安…...
2021 年 3 月青少年软编等考 C 语言五级真题解析
目录 T1. 红与黑思路分析T2. 密室逃脱思路分析T3. 求逆序对数思路分析T4. 最小新整数思路分析T1. 红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的…...
LeetCode带环链表题深度解析(是否带环、寻找环的入口结点)
目录 一、链表是否带环 常规方法解析: 拓展问题:那么fast一次走三步,走四步...是否还会相遇? fast :3 ,low :1 fast :4 ,low :1 总结: 二、…...
Redis--20--大Key问题解析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 大Key问题1.什么是 Redis 大 Key?在 Redis 中,大 Key 是指单个键值对的数据量非常大,可能包含大量数据。 2. Redis大Key的危害3.…...
如何使用Yarn Workspaces实现Monorepo模式在一个仓库中管理多个项目
Yarn Workspaces是Yarn提供的一种依赖管理机制,它支持在单个代码仓库中管理多个包的依赖。这种机制非常适合需要多个相互依赖的包的项目,能够减少重复依赖,加快依赖安装速度,并简化依赖管理。下面将详细介绍如何使用Yarn Workspac…...
测试ip端口-telnet开启与使用
前言 开发过程中我们总会要去测试ip通不通,或者ip下某个端口是否可以联通,为此我们可以使用telnet 命令来实现。 一、telnet 开启 可能有些人使用telnet报错,不是内部命令,可以如下开启: 1、打开控制面板ÿ…...
c#版本、.net版本、visual studio版本之间的对应关系
最近这几年一直没用过c#开发,都是从事Qt c开发工作,回想一下之前c#还要追溯到2019年,算算时间大概都已过去4,5年了,时间飞快。 2019真是个神奇的数字,vs2019是我用的时间最长的一个IDE,新冠起始…...
大语言模型训练
步骤 Self-Supervised Pre-Training,简称SPTSupervised Fine-Tuning,简称SFTLearning from Human Feedback,简称LfHF Self-Supervised Pre-Training 自监督预训练(Self-Supervised Pre-Training,简称SPT)…...
ElasticSearch | Elasticsearch与Kibana页面查询语句实践
关注:CodingTechWork 引言 在当今大数据应用中,Elasticsearch(简称 ES)以其高效的全文检索、分布式处理能力和灵活的查询语法,广泛应用于各类日志分析、用户行为分析以及实时数据查询等场景。通过 ES,用户…...
idea快捷键
IDEA常见快捷键 Ctrl A 全写 Ctrl C 粘贴 Ctrl V 复制 Ctrl F 搜索 Ctrl R 替换 Ctrl Z 撤销 Ctrl D 复制行 Ctrl X 删除行,并且被删除的行复制到剪贴板中 Ctrl Y 删除一行 Ctrl Shift Z 反撤销 IDEA重要快捷键 Ctrl / 单行注释&…...
2024年全国信息素养大赛-图形化编程-省赛-绘制正方和三角形
绘制正方和三角形 【编程实现】 使用自制积木,绘制正方形和三角形。 【具体要求】 *程序尽量简洁。 1.画出喜庆的红色图形。 2.先画正方形,再画三角形。 3.正方形和三角形不重叠。 4.正方形和三角形不超出背最中红框的范围。 题目程序演示可点击…...
二进制编码 和 Base64编码
我需要将音频数据存为字符串,不知道存为 二进制编码 和 Base64编码 以下内容来自 DeepSeek : 1. 二进制编码 优点: 高效:二进制编码直接存储原始数据,占用空间小,处理速度快。适合传输:在需要高效传输的…...
微信小程序防止重复点击事件
直接写在app.wpy里面,全局可以调用 // 防止重复点击事件preventActive(fn) {const self this;if (this.globalData.PageActive) {this.globalData.PageActive false;if (fn) fn();setTimeout(() > {self.globalData.PageActive true;}, 3000); //设置该时间内…...
Kafka集群安装
Apache kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,是消息中间件的一种,用于构建实时数据管道和流应用程序。 Kafka官网:http://kafka.apache.org/ 安装环境: Kafka集群环境搭建,依赖于zookeep…...
EXCEL: (二) 常用图表
10. 图表 134-添加.删除图表元素 图表很少是一个单独的整体,而是由十几种元素/对象拼凑出来的。 学习图表就是学习当中各类元素的插删改。 ①图表中主要元素的定义 图表上的一个颜色就是一个系列,每个系列都对应原数据中的一列/一行值数据。 每个系…...
系统日志优化---自定义springboot-starter日志组件供各个服务使用
在优化项目时发现各个微服务都有各自的接口调用日志逻辑,比如每个服务都定义一个aop类拦截,十分冗余,其实是可以做成starter被各个服务引用使用,前提要先了解一下springboot自动装配原理 创建springboot工程,如果是jdk…...
《GB50348-2018 安全防范工程技术标准》:安防工程的权威指南
《GB50348-2018 安全防范工程技术标准》:安防工程的权威指南 【下载地址】GB50348-2018安全防范工程技术标准分享 GB50348-2018 安全防范工程技术标准本仓库提供的是《GB50348-2018 安全防范工程技术标准》的高清电子版资源 项目地址: https://gitcode.com/Open-s…...
RabbitMQ高级篇
目录 确保发送者的可靠 为什么需要确保发送者的可靠性 RabbitMQ 的发送者重连机制配置 springAMQP实现发送者确认 MQ的可靠性 为什么需要实现MQ的可靠性? 数据持久化 Lazy Queue 核心思想 总结RabbitMQ 如何保证消息的可靠性 持久化 Lazy Queue 消息…...
任务调度系统Quartz.net详解2-Scheduler、Calendar及Listener
任务调度系统Quartz.net详解2-Scheduler、Calendar及Listener Scheduler 调度器scheduler是Quartz中的独立工作容器,所有的Trigger和Job都需要注册到scheduler中才能工作。我们可以通过SchedulerFactory来获取scheduler实例。如下: //1.获取默认的标准…...
服务器出现蓝屏现象的原因有什么?
当服务器定期出现蓝屏的现象,则会影响到企业业务的连续性,同时还可能会导致重要数据信息丢失和系统稳定性下降,是一种较为复杂的技术问题,本文就来探讨一下导致服务器出现蓝屏的原因都有什么。 服务器出现蓝屏有可能是硬件出现了故…...
IP 地址与蜜罐技术
基于IP的地址的蜜罐技术是一种主动防御策略,它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意,将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描,寻找可入侵的目标时&…...
探索数据存储的奥秘:深入理解B树与B+树
key value 类型的数据红黑树(最优二叉树,内存最优),时间复杂度:O(logn),调整方便;一个结点分出两个叉B树一个节点可以分出很多叉数据量相等的条件下:红黑树的层数很高&am…...
mac学习芋道源码记录
nodejs安装 v16.20.0 cd yudao-ui-admin-vue2 node install -g yarn yarn install npm run local改配置不然node install -g yarn报错 前往-前往文件夹-/Library 创建 /nodejs/node_global /nodejs/node_cache npm config set prefix /Library/nodejs/node_global npm c…...
CCF 赛事介绍
CCF 赛事介绍 中国计算机学会(CCF)举办了诸多具有影响力的赛事,面向不同年龄段与群体,各有其特色要求。 一、青少年编程启蒙类 CCF 编程能力等级认证(GESP): 适合年龄:涵盖中小学…...
MySQL表的约束
目录 一、空属性 二、默认值 三、列描述 四、zerofill 五、主键 六、自增长 七、唯一键 八、外键 一、空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能…...
相互带节奏
有些单词在发音方面是相互带节奏的 【1】 broccoli n.西兰花Berklee n.伯克利 Berklee College of Music 伯克利音乐学院 【2】 college n.大学,学院colleague n.同事,僚 league n.联合会,联赛;联盟,同盟 【3】…...
秒懂虚拟化(二):服务器虚拟化、操作系统虚拟化、服务虚拟化全解析,通俗解读版
秒懂虚拟化(一):从概念到网络、存储虚拟化全解析,通俗解读版-CSDN博客这篇文章学习了虚拟化的概念、网络虚拟化和存储虚拟化,本节将继续学习服务器虚拟化、操作系统虚拟化、服务虚拟化。 1、服务器虚拟化 服务器虚拟…...
ubuntu 配置OpenOCD与RT-RT-thread环境的记录
1.git clone git://git.code.sf.net/p/openocd/code openocd 配置gcc编译环境 2. sudo gedit /etc/apt/source.list #cdrom sudo apt-get install git sudo apt-get install libtool-bin sudo apt-get install pkg-config sudo apt-install libusb-1.0-0-dev sudo apt-get…...
优化 MySQL 的慢查询
文章目录 1. 分析慢查询日志2. 优化查询语句3. 优化表结构4. 调整服务器参数5. 数据库引擎选择6. 缓存策略7. 定期维护数据库 1. 分析慢查询日志 首先,要开启 MySQL 的慢查询日志,以便能够记录执行时间超过阈值的查询语句。可以通过修改 MySQL 配置文件…...
【机器学习】聚类评价指标之福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)
福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)是一种用于评估聚类结果与实际标签之间一致性的指标。FMI 值可以用于衡量聚类的准确性,特别是在有真值标签的监督评估场景中。 计算公式 FMI 的计算基于以下公式: 其中&#…...
vue3模板引用ref
1.访问模板引用 要在组合式 API 中获取引用,我们可以使用辅助函数 useTemplateRef() 只可以在组件挂载后才能访问模板引用 <script setup> import { useTemplateRef, onMounted } from vue// 第一个参数必须与模板中的 ref 值匹配 const input useTempla…...
20250111英语学习
place check in window seat; aisle seat boarding pass 登机牌 boarding pass depart from terminal C Gate 4 (Gate door entre to the plane) place : Check in window seat boarding pass 登机牌 depart from terminal C Gate 4 (Gate door entre to the plane) you…...
【Rust自学】11.6. 控制测试运行:并行和串行(连续执行)测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.6.1. 控制测试的运行方式 cargo test和cargo run一样,cargo test也会编译代码并生成一个二进制文件用于测试,…...