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

STM32 LL库 TIM3定时器多通道捕获输入采集

为什么不用HAL库,使用HAL库捕获输入一个通道还尚可,多通道捕获由于HAL的回调函数不符合我的要求,干脆直接切换到LL库。网上找了许多,代码处理写的不符合我的要求,这里记录一下我的调试过程。
TIM2输出1路PWM信号,使用1分3杜邦线接到TIM3的CH2-CH3-CH4通道进行捕获输入。
在这里插入图片描述
在这里插入图片描述


#include "tim.h"/* TIM2 init function */
void MX_TIM2_Init(void)
{LL_TIM_InitTypeDef TIM_InitStruct = {0};LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0};LL_GPIO_InitTypeDef GPIO_InitStruct = {0};/* Peripheral clock enable */LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);TIM_InitStruct.Prescaler = 63;TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;TIM_InitStruct.Autoreload = 9999;TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;LL_TIM_Init(TIM2, &TIM_InitStruct);LL_TIM_DisableARRPreload(TIM2);LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_INTERNAL);LL_TIM_OC_EnablePreload(TIM2, LL_TIM_CHANNEL_CH2);TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;TIM_OC_InitStruct.CompareValue = 5000;TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH;LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct);LL_TIM_OC_DisableFast(TIM2, LL_TIM_CHANNEL_CH2);LL_TIM_SetTriggerOutput(TIM2, LL_TIM_TRGO_RESET);LL_TIM_DisableMasterSlaveMode(TIM2);/* USER CODE BEGIN TIM2_Init 2 *//* USER CODE END TIM2_Init 2 */LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);/**TIM2 GPIO ConfigurationPB3     ------> TIM2_CH2*/GPIO_InitStruct.Pin = LL_GPIO_PIN_3;GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;GPIO_InitStruct.Alternate = LL_GPIO_AF_2;LL_GPIO_Init(GPIOB, &GPIO_InitStruct);//-------------------------------------------LL_TIM_OC_SetCompareCH2(TIM2,2000);LL_TIM_CC_EnableChannel(TIM2,LL_TIM_CHANNEL_CH2);LL_TIM_EnableCounter(TIM2);}
/* TIM3 init function */
void MX_TIM3_Init(void)
{LL_TIM_InitTypeDef TIM_InitStruct = {0};LL_GPIO_InitTypeDef GPIO_InitStruct = {0};/* Peripheral clock enable */LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);/**TIM3 GPIO ConfigurationPA7   ------> TIM3_CH2PB0   ------> TIM3_CH3PB1   ------> TIM3_CH4*/GPIO_InitStruct.Pin = LL_GPIO_PIN_7;GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;GPIO_InitStruct.Alternate = LL_GPIO_AF_1;LL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = LL_GPIO_PIN_0;GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;GPIO_InitStruct.Alternate = LL_GPIO_AF_1;LL_GPIO_Init(GPIOB, &GPIO_InitStruct);GPIO_InitStruct.Pin = LL_GPIO_PIN_1;GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;GPIO_InitStruct.Alternate = LL_GPIO_AF_1;LL_GPIO_Init(GPIOB, &GPIO_InitStruct);/* TIM3 interrupt Init */NVIC_SetPriority(TIM3_IRQn, 0);NVIC_EnableIRQ(TIM3_IRQn);/* USER CODE BEGIN TIM3_Init 1 *//* USER CODE END TIM3_Init 1 */TIM_InitStruct.Prescaler = 63;TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;TIM_InitStruct.Autoreload = 65535;TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;LL_TIM_Init(TIM3, &TIM_InitStruct);LL_TIM_DisableARRPreload(TIM3);LL_TIM_SetClockSource(TIM3, LL_TIM_CLOCKSOURCE_INTERNAL);LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_RESET);LL_TIM_DisableMasterSlaveMode(TIM3);LL_TIM_IC_SetActiveInput(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_ACTIVEINPUT_DIRECTTI);LL_TIM_IC_SetPrescaler(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_ICPSC_DIV1);LL_TIM_IC_SetFilter(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_IC_FILTER_FDIV1);LL_TIM_IC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_IC_POLARITY_RISING);LL_TIM_IC_SetActiveInput(TIM3, LL_TIM_CHANNEL_CH3, LL_TIM_ACTIVEINPUT_DIRECTTI);LL_TIM_IC_SetPrescaler(TIM3, LL_TIM_CHANNEL_CH3, LL_TIM_ICPSC_DIV1);LL_TIM_IC_SetFilter(TIM3, LL_TIM_CHANNEL_CH3, LL_TIM_IC_FILTER_FDIV1);LL_TIM_IC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH3, LL_TIM_IC_POLARITY_RISING);LL_TIM_IC_SetActiveInput(TIM3, LL_TIM_CHANNEL_CH4, LL_TIM_ACTIVEINPUT_DIRECTTI);LL_TIM_IC_SetPrescaler(TIM3, LL_TIM_CHANNEL_CH4, LL_TIM_ICPSC_DIV1);LL_TIM_IC_SetFilter(TIM3, LL_TIM_CHANNEL_CH4, LL_TIM_IC_FILTER_FDIV1);LL_TIM_IC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH4, LL_TIM_IC_POLARITY_RISING);/* USER CODE BEGIN TIM3_Init 2 */LL_TIM_EnableIT_UPDATE(TIM3);//更新中断使能LL_TIM_EnableIT_CC2(TIM3);//捕获通道2使能LL_TIM_EnableIT_CC3(TIM3);//捕获通道3使能LL_TIM_EnableIT_CC4(TIM3);//捕获通道4使能LL_TIM_CC_EnableChannel(TIM3,LL_TIM_CHANNEL_CH2);//通道2使能LL_TIM_CC_EnableChannel(TIM3,LL_TIM_CHANNEL_CH3);//通道3使能LL_TIM_CC_EnableChannel(TIM3,LL_TIM_CHANNEL_CH4);//通道4使能LL_TIM_EnableCounter(TIM3);/* USER CODE END TIM3_Init 2 */}uint32_t  TIM3_OverCnt = 0;
int32_t  Value_Temp2 = 0;
int32_t  Value_Temp3 = 0;
int32_t  Value_Temp4 = 0;uint32_t  TIM3_CH2_Capture_FristValue_1; 
uint32_t  TIM3_CH2_Capture_FristValue_2; 
uint32_t  TIM3_CH2_Capture_FristValue_3; 
uint32_t  TIM3_CH2_Capture_HighLevel; 
uint32_t  TIM3_CH2_Capture_LowLevel; 
uint8_t   TIM3_CH2_CaptureNumber;
//uint32_t  TIM3_CH2_Freq = 0;
//float 	  TIM3_CH2_Duty = 0;uint32_t  TIM3_CH3_Capture_FristValue_1; 
uint32_t  TIM3_CH3_Capture_FristValue_2; 
uint32_t  TIM3_CH3_Capture_FristValue_3; 
uint32_t  TIM3_CH3_Capture_HighLevel; 
uint32_t  TIM3_CH3_Capture_LowLevel; 
uint8_t   TIM3_CH3_CaptureNumber;
//uint32_t  TIM3_CH3_Freq = 0;
//float 	  TIM3_CH3_Duty = 0;uint32_t  TIM3_CH4_Capture_FristValue_1; 
uint32_t  TIM3_CH4_Capture_FristValue_2; 
uint32_t  TIM3_CH4_Capture_FristValue_3; 
uint32_t  TIM3_CH4_Capture_HighLevel; 
uint32_t  TIM3_CH4_Capture_LowLevel; 
uint8_t   TIM3_CH4_CaptureNumber;void TIM3_CallBack(void)
{	//------------------------------------------CC2if(LL_TIM_IsActiveFlag_CC2(TIM3)){		LL_TIM_ClearFlag_CC2(TIM3);if(TIM3_CH2_CaptureNumber == 0){TIM3_OverCnt = 0;TIM3_CH2_CaptureNumber = 1;	
//					  LL_TIM_SetCounter(TIM3,0);	}elseif(TIM3_CH2_CaptureNumber == 1){	TIM3_CH2_Capture_FristValue_1 = LL_TIM_IC_GetCaptureCH2(TIM3);	// 获取当前的捕获值. 即CCRx2  //设置下降沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH2,LL_TIM_IC_POLARITY_FALLING);						TIM3_CH2_CaptureNumber = 2;TIM3_OverCnt = 0;						}elseif(TIM3_CH2_CaptureNumber == 2){TIM3_CH2_Capture_FristValue_2 = LL_TIM_IC_GetCaptureCH2(TIM3);	// 获取当前的捕获值. 即CCRx2  if(TIM3_OverCnt >= 1){								 						TIM3_CH2_Capture_HighLevel = TIM3_OverCnt * 65535 + TIM3_CH2_Capture_FristValue_2 - TIM3_CH2_Capture_FristValue_1;			}else{Value_Temp2 = TIM3_CH2_Capture_FristValue_2 - TIM3_CH2_Capture_FristValue_1;Value_Temp2 = Value_Temp2>0?Value_Temp2:0;							TIM3_CH2_Capture_HighLevel = TIM3_OverCnt * 65535 + Value_Temp2;}											//设置上升沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH2,LL_TIM_IC_POLARITY_RISING);		TIM3_CH2_CaptureNumber = 3;TIM3_OverCnt = 0;}elseif(TIM3_CH2_CaptureNumber == 3){TIM3_CH2_Capture_FristValue_3 = LL_TIM_IC_GetCaptureCH2(TIM3);	// 获取当前的捕获值. 即CCRx2  if(TIM3_OverCnt >= 1){TIM3_CH2_Capture_LowLevel = TIM3_OverCnt * 65535 + TIM3_CH2_Capture_FristValue_3 - TIM3_CH2_Capture_FristValue_2;							}else{Value_Temp2 = TIM3_CH2_Capture_FristValue_3 - TIM3_CH2_Capture_FristValue_2;Value_Temp2 = Value_Temp2>0?Value_Temp2:0;TIM3_CH2_Capture_LowLevel = TIM3_OverCnt * 65535 + Value_Temp2;							}//					//设置    沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH2,LL_TIM_IC_POLARITY_FALLING);				TIM3_CH2_CaptureNumber = 4;TIM3_OverCnt = 0;}		elseif(TIM3_CH2_CaptureNumber == 4){//					//设置    沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH2,LL_TIM_IC_POLARITY_RISING);				TIM3_CH2_CaptureNumber = 1;TIM3_OverCnt = 0;}					}		//------------------------------------------CC3if(LL_TIM_IsActiveFlag_CC3(TIM3)){	LL_TIM_ClearFlag_CC3(TIM3);if(TIM3_CH3_CaptureNumber == 0){TIM3_OverCnt = 0;TIM3_CH3_CaptureNumber = 1;	
//					  LL_TIM_SetCounter(TIM3,0);	}elseif(TIM3_CH3_CaptureNumber == 1){TIM3_OverCnt = 0;TIM3_CH3_Capture_FristValue_1 = LL_TIM_IC_GetCaptureCH3(TIM3);	// 获取当前的捕获值. 即CCRx2  //设置下降沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH3,LL_TIM_IC_POLARITY_FALLING);						TIM3_CH3_CaptureNumber = 2;					}elseif(TIM3_CH3_CaptureNumber == 2){TIM3_CH3_Capture_FristValue_2 = LL_TIM_IC_GetCaptureCH3(TIM3);	// 获取当前的捕获值. 即CCRx2  if(TIM3_OverCnt >= 1){			TIM3_CH3_Capture_HighLevel = TIM3_OverCnt * 65535 + TIM3_CH3_Capture_FristValue_2 - TIM3_CH3_Capture_FristValue_1;							}	else{Value_Temp3 = TIM3_CH3_Capture_FristValue_2 - TIM3_CH3_Capture_FristValue_1;Value_Temp3 = Value_Temp3>0?Value_Temp3:0;						TIM3_CH3_Capture_HighLevel = TIM3_OverCnt * 65535 + Value_Temp3;}	//设置上升沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH3,LL_TIM_IC_POLARITY_RISING);			TIM3_CH3_CaptureNumber = 3;TIM3_OverCnt = 0;}elseif(TIM3_CH3_CaptureNumber == 3){TIM3_CH3_Capture_FristValue_3 = LL_TIM_IC_GetCaptureCH3(TIM3);	// 获取当前的捕获值. 即CCRx2  if(TIM3_OverCnt >= 1){					TIM3_CH3_Capture_LowLevel = TIM3_OverCnt * 65535 + TIM3_CH3_Capture_FristValue_3 - TIM3_CH3_Capture_FristValue_2;								}	else{Value_Temp3 = TIM3_CH3_Capture_FristValue_3 - TIM3_CH3_Capture_FristValue_2;Value_Temp3 = Value_Temp3>0?Value_Temp3:0;							TIM3_CH3_Capture_LowLevel = TIM3_OverCnt * 65535 + Value_Temp3;}	//					//设置    沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH3,LL_TIM_IC_POLARITY_FALLING);	TIM3_CH3_CaptureNumber = 4;TIM3_OverCnt = 0;}		elseif(TIM3_CH3_CaptureNumber == 4){//					//设置    沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH3,LL_TIM_IC_POLARITY_RISING);		TIM3_CH3_CaptureNumber = 1;TIM3_OverCnt = 0;}				}//------------------------------------------CC4if(LL_TIM_IsActiveFlag_CC4(TIM3)){	LL_TIM_ClearFlag_CC4(TIM3);if(TIM3_CH4_CaptureNumber == 0){TIM3_OverCnt = 0;TIM3_CH4_CaptureNumber = 1;	
//					   LL_TIM_SetCounter(TIM3,0);	}elseif(TIM3_CH4_CaptureNumber == 1){TIM3_OverCnt = 0;TIM3_CH4_Capture_FristValue_1 = LL_TIM_IC_GetCaptureCH4(TIM3);	// 获取当前的捕获值. 即CCRx2  //设置下降沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH4,LL_TIM_IC_POLARITY_FALLING);			TIM3_CH4_CaptureNumber = 2;}elseif(TIM3_CH4_CaptureNumber == 2){TIM3_CH4_Capture_FristValue_2 = LL_TIM_IC_GetCaptureCH4(TIM3);	// 获取当前的捕获值. 即CCRx2  if(TIM3_OverCnt >= 1){					TIM3_CH4_Capture_HighLevel = TIM3_OverCnt * 65535 + TIM3_CH4_Capture_FristValue_2 - TIM3_CH4_Capture_FristValue_1;								}	else{Value_Temp4 = TIM3_CH4_Capture_FristValue_2 - TIM3_CH4_Capture_FristValue_1;Value_Temp4 = Value_Temp4>0?Value_Temp4:0;							TIM3_CH4_Capture_HighLevel = TIM3_OverCnt * 65535 + Value_Temp4;}	//设置上升沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH4,LL_TIM_IC_POLARITY_RISING);			TIM3_CH4_CaptureNumber = 3;TIM3_OverCnt = 0;}elseif(TIM3_CH4_CaptureNumber == 3){TIM3_CH4_Capture_FristValue_3 = LL_TIM_IC_GetCaptureCH4(TIM3);	// 获取当前的捕获值. 即CCRx2  if(TIM3_OverCnt >= 1){									TIM3_CH4_Capture_LowLevel = TIM3_OverCnt * 65535 + TIM3_CH4_Capture_FristValue_3 - TIM3_CH4_Capture_FristValue_2; 								}	else{Value_Temp4 = TIM3_CH4_Capture_FristValue_3 - TIM3_CH4_Capture_FristValue_2;Value_Temp4 = Value_Temp4>0?Value_Temp4:0;							TIM3_CH4_Capture_LowLevel = TIM3_OverCnt * 65535 + Value_Temp4; }	//					//设置    沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH4,LL_TIM_IC_POLARITY_FALLING);	TIM3_CH4_CaptureNumber = 4;TIM3_OverCnt = 0;}		elseif(TIM3_CH4_CaptureNumber == 4){//					//设置    沿触发LL_TIM_IC_SetPolarity(TIM3,LL_TIM_CHANNEL_CH4,LL_TIM_IC_POLARITY_RISING);		TIM3_CH4_CaptureNumber = 1;TIM3_OverCnt = 0;}				} //------------------------------------------Updateif(LL_TIM_IsActiveFlag_UPDATE(TIM3)){	LL_TIM_ClearFlag_UPDATE(TIM3); //每次溢出时间为65536usTIM3_OverCnt++;}}
#ifndef __TIM_H__
#define __TIM_H__#ifdef __cplusplus
extern "C" {
#endif/* Includes ------------------------------------------------------------------*/
#include "main.h"void MX_TIM2_Init(void);
void MX_TIM3_Init(void);
void TIM3_CallBack(void);#ifdef __cplusplus
}
#endif#endif /* __TIM_H__ */
#include "main.h"
#include "tim.h"
#include "gpio.h"void SystemClock_Config(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM2_Init();MX_TIM3_Init();while (1){}}
/*** @brief This function handles TIM3 global interrupt.*/
void TIM3_IRQHandler(void)
{TIM3_CallBack();}

相关文章:

STM32 LL库 TIM3定时器多通道捕获输入采集

为什么不用HAL库,使用HAL库捕获输入一个通道还尚可,多通道捕获由于HAL的回调函数不符合我的要求,干脆直接切换到LL库。网上找了许多,代码处理写的不符合我的要求,这里记录一下我的调试过程。 TIM2输出1路PWM信号&#…...

如何为初创企业选择合适的 ERP 系统?

**ERP系统**是制造、分销、供应链、金融、会计、风险管理等多个行业必不可少的企业技术解决方案。不论垂直行业、企业规模或目标受众如何,将ERP作为企业管理战略的核心部分都非常重要。 对于渴望发展的小型企业和初创企业来说,更是如此。大型企业需要对…...

jssip contact的随机字符串的问题

let configuration {sockets: [socket],uri: sip:1001127.0.0.1,}; 如果这样注册freesswitch,那么fs注册信息中的Contact字段信息就是:sip:sdfsdfsdfsfcvdwvdwd.invalid;transportws;fs_natyes;fs_path... 正确的写法是: //URI是jssip内置…...

别再吐槽大学教材了,来看看这些网友强推的数学神作!

前言 关于大学数学教材的吐槽似乎从来没停止过。有人慨叹:数学教材晦涩难懂。错!难懂,起码还可以读懂。数学教材你根本读不懂;也有人说:数学教材简直就是天书。 数学教材有好有坏,这话不假,但更…...

Elasticsearch-汇总

Elasticsearch-基础介绍 跳转 分布式全文搜索引擎:包含【实时搜索】和【分析引擎】 Elasticsearch-倒排索引 跳转 倒排索引 跳转 Elasticsearch-Term Dictionary和Term Index 跳转 lucene-基础介绍 跳转 Elasticsearch-联合索引 跳转 Elasticsearch-Roaring B…...

9.3 【MySQL】系统表空间

了解完了独立表空间的基本结构,系统表空间的结构也就好理解多了,系统表空间的结构和独立表空间基本类似,只不过由于整个MySQL进程只有一个系统表空间,在系统表空间中会额外记录一些有关整个系统信息的页面,所以会比独立…...

STM32CUBEIDE生成hex文件 Release版本的下载不启动

现象描述: 使用STM32CUBEIDE生成hex文件,使用脱机下载器或者J-Flash下载到单片机中(STM32F407)单片机不启动。 测试其他的程序是可以启动的。 修改办法: 把Release版本切换到debug版本,重新编写&#xf…...

2023年亚太杯数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...

ceph集群移除物理节点

1. 概述 ceph分布式存储在生产或者实验环境,经常涉及到物理节点加入或者删除,本文仅对移除物理节点的相关步骤做了操作记录,以方便需要时查阅。 2. 移除物理节点 2.1 out掉相应osd 操作之前通过ceph -s确保整个集群状态是OK的,…...

(八)Spring源码解析:Spring MVC

一、Servlet及上下文的初始化 1.1> DispatcherServlet的初始化 对于Spring MVC来说,最核心的一个类就是DispatcherServlet,它负责请求的行为流转。那么在Servlet的初始化阶段,会调用init()方法进行初始化操作,在DispatcherSe…...

maven或者gradle打完jar,jekins启动提示找不到问题

1、记录下遇到的一个问题,maven或者gradle打完jar,然后jekins发布,启动提示找不到实体类,mapper,xml问题 2、首先排查jar包中这些文件是否存在 3、然后排查每层的包名或者文件名是否能对应上 我这次遇到的问题就是本地…...

浏览器缓存sessionStorage、localStorage、Cookie

一、sessionStorage 1、简介 sessionStorage用于在浏览器会话期间存储数据,数据仅在当前会话期间有效。 存储的数据在用户关闭浏览器标签页或窗口后会被清除。 2、方法 使用sessionStorage.setItem(key, value)方法将数据存储在sessionStorage中。使用sessionSt…...

易点易动固定资产管理系统场景应用一:集成ERP/财务系统

在企业的日常运营中,固定资产管理是一个重要而繁琐的任务。传统的手工管理方式往往效率低下且容易出错,给企业带来不必要的成本和风险。为了解决这一问题,易点易动固定资产管理系统应运而生。本文将重点介绍易点易动固定资产管理系统在集成ER…...

k8s部署elk8 直接通过logstash获取日志文件方式

配置文件 kibana [rootnode101 config]# cat kibana.yml # # ** THIS IS AN AUTO-GENERATED FILE ** ## Default Kibana configuration for docker target server.host: "0.0.0.0" server.shutdownTimeout: "5s" elasticsearch.hosts: [ "http:/…...

git 本地多个账号错乱问题解决

当我们在本地有多个git账号时,例如公司的gitlab有一个git账号,自己的开源项目有一个GitHub账号,我们可能会出现账号错乱的情况,例如提交到公司gitlab的代码是github账号 这种情况通常是由于您的git config配置文件中的用户信息未…...

wu-ui-uniapp 多平台快速开发的UI框架

WU-UI 多平台快速开发的UI框架(无论平台,一致体验) 官方群 wu-ui官方1群: 767943089 说明 wu-ui(如虎添翼) 是 全面兼容多端的uniapp生态框架,基于vue2、vue3和nvue开发。丰富组件库,便捷工具库,简单高效。无论平台&#x…...

Spring Boot Actuator:自定义端点

要在Spring Boot Actuator中实现自定义端点,可以按照以下步骤进行操作: 1.创建一个自定义端点类 该类需要使用Endpoint注解进行标记,并使用Component注解将其作为Spring Bean进行管理。 package com.example.highactuator.point;import lo…...

实时音视频方案汇总

若有好的方案欢迎留言讨论,非常感谢,汇总了一些,从市面上了解的一些低时延的端到端的方案,仅供参照,若有问题,也欢迎留言更正! 方案 方案描述 时延 备注 1大华同轴高清电缆200米电缆&#xf…...

vue3.0中实现excel文件的预览

最近开发了一个需求,要求实现预览图片、pdf、excel、word、txt等格式的文件; 每种格式的文件想要实现预览的效果需要使用对应的插件,如果要实现excel格式文件的预览,要用到哪种插件呢? 答案:xlsx.full.min…...

信息学奥赛一本通 1435:【例题3】曲线 | 洛谷 洛谷 P1883 函数

【题目链接】 ybt 1435:【例题3】曲线 洛谷 P1883 函数 【题目考点】 1. 三分 【解题思路】 每个 S i ( x ) S_i(x) Si​(x)是一个二次函数, F ( x ) m a x ( S i ( x ) ) F(x) max(S_i(x)) F(x)max(Si​(x)),即为所有二次函数当自变量…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

docker 部署发现spring.profiles.active 问题

报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...