STM32的HAL库开发---高级定时器---互补输出带死区实验
一、互补输出简介
互补输出:OCx输出高电平,则互补通道OCxN输出低电平。OCx输出低电平,则互补通道OCxN输出高电平。
带死区控制的互补输出:OCx输出高电平时,则互补通道OCxN过一会再输出输出低电平。这个时间里输出的电平为无效电平。
二、带死区控制的互补输出应用H桥
在H桥中间的是电动机, 电流从左边流向右边为正转,从右边流向左边为反转。正转的时候,Q1和Q4导通,反转的时候,Q2和Q3导通。4个三极管都是NPN型三极管,都需要高电平才能导通。
Q1和Q3连接的OC1,Q2和Q3连接的是互补通道OC1N。当OC1输出高电平时,Q1和Q4导通,电机正转,OC1N输出低电平,Q2和Q3都截止。当OC1N输出高电平时,Q2和Q3导通,电机反转,此时OC1输出低电平,Q1和Q4截止。
如果输出通道OC1和互补输出通道OC1N都为有效电平,在这个图里边有效电平为高电平,都为有效电平则短路。
由于元器件是有延迟特性,所以需要加上死区时间控制。这个电路图的无效电平为低电平。
三、捕获/比较通道的输出部分(通道1至3)
1、OC1RE为输出参考信号,高电平有效。
2、TIMx_CCMR1的OC1M设置输出比较模式,在F1系列有8种比较模式。
3、 ETRF信号,设置了OC1CE为,则ETRF信号来的时候,OC1REF会被强制清0。
4、配置TIMx_CCER寄存器的CC1E和CC1NE位,来设置输出通道使能和输出互补通道使能。当使能输出通道,关闭互补输出通道,则直接走死区发生器上面那个线,经过输出极性选择器,从OC1输出。当关闭输出通道,使能互补输出通道,则经过互补输出极性选择器,从OC1N输出。
死区输出:同时使能输出通道和互补输出通带,OC1REF信号经过死区发生器,然后分别经过各自的极性选择器,来到OC1和OC1N。
MOE位:高级定时器的主输出控制,想输出。必须置1,否则两个通道都无法输出。
补充:
高级定时的刹车功能寄存器BDTR里边有一个OSSR位,对用在运行状态(MOE = 1)时,可以控制输出和互补输出通道电平。
手册种给出如下表格
重点看红色部分,当OSSR位设置为1时,如果只使能了输出通道或者互补输出通道中的任意一个,那个另一个通道会输出无效电平。当OSSR位设置为0的时候,另一个通道都是输出0。这个对于学习电机控制的时候有用,如果程序不设置这位,对于想使用一个定时器的互补输出通道控制电机,是不行的,因为另一个通道一直输出0。
sBreakDeadTimeConfig.OffStateRunMode=TIM_OSSR_ENABLE;
如果设置了这位,另一个通道会根据你设置的有效电平,来输出无效电平。
sConfig.OCNPolarity = TIM_OCNPOLARITY_LOW;
sConfig.OCPolarity = TIM_OCPOLARITY_LOW;
下面这俩是控制在刹车输入时,MOE位会被自动清零,然后输出通道和互补输出通道根据空闲状态输出电平,但是要注意,如果你两个通道都设置的是低电平有效,那下面这个设置就是无效的,因为硬件不允许两个通道同时输出有效电平,他会同时输出高电平。但是你设置的是高电平有效,下面这个设置会使两个通道都输出低电平,也就是同时输出无效电平。
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
四、死区时间计算
1、确定tDTS的值:
其中CKD位在TIMx_CR1寄存器里边设置,Ft为定时器时钟频率,F1系列就是72Mhz。
2、判断DTG[7:5],选择计算公式,在TIMx_BDTR寄存器设置。
3、带入选择的公式计算。
五、刹车(断路)功能
1、使能刹车功能:将TIMx_BDTR的BKE位置1,刹车输入信号极性由BKP位设置
将TIMx_BKIN引脚复用为刹车功能,刹车信号经过极性选择后,来到或门。BI为刹车中断。
使能刹车功能后:由TIMx_BDTR的MOE、OSSI、OSSR位,TIMx_CR2的OISx、OISxN位,TIMx_CCER的CCxE、CCxNE位控制OCx和OCxN输出状态
无论何时,OCx和OCxN输出都不能同时处在有效电平,由硬件强制设置。
2、发生刹车后,会怎么样?
- MOE位被清零,OCx和OCxN为无效、空闲或复位状态(OSSI位选择),MOE为0,被称为空闲模式,为1被称为运行模式。
- OCx和OCxN的状态:由相关控制位状态决定,当使用互补输出时:根据情况自动控制输出电平,参考参考手册使用刹车(断路)功能小节
- BIF位置1,如果使能了BIE位,还会产生刹车中断;如果使能了TDE位,会产生DMA请求
- 如果AOE位置 1,在下一个 更新事件UEV时,MOE位被自动置 1
从图中可以看出,当刹车信号来时,MOE位会被置0,同时输出通道电平由OIS1位决定,OIS1为1,则输出高电平,OIS1为0,则输出低电平。
1、设置输出通道极性为高电平有效,当OCxREF下降沿来的时候,没有延迟,当上升沿来的时候,需要加死区延迟。当刹车信号来的时候,OISx为0,输出低电平,低电平不是有效输出电平,所以没有延迟。
设置互补输出通道为高电平有效,在OCxREF下降沿来的时候,OCxN需要加死区延迟,在OCxREF上升沿来的时候,OCxN变为低电平,不需要加死区延迟。刹车信号来的时候,设置的OCSxN为1,为有效电平,需要加死区延迟。
2、设置输出通道极性为高电平有效,当OCxREF下降沿来的时候,不需要死区延迟,当上升沿来的时候,需要加死区延迟。当刹车信号来的时候,OISx为1,输出高电平,高电平是有效输出电平,需要加死区延迟。
设置互补输出通道为低电平有效,在OCxREF下降沿来的时候,OCxN需要加死区延迟,在OCxREF上升沿来的时候,OCxN变为高电平,不需要加死区延迟。刹车信号来的时候,设置的OCSxN为1,为无效电平,不需要加死区延迟。
3、互补输出没有开启,设置输出通道为高电平有效,输出与OCxREF一样,刹车信号来的时候,OCSx为0,为无效电平,不需要死区延迟。
互补输出通道没有开启,设置的设置互补输出通道为高电平有效,同时OCSxN为1,高电平是有效输出电平,需要加死区延迟。
4、互补输出没有开启,设置输出通道为高电平有效,输出与OCxREF一样,刹车信号来的时候,OCSx为1,为有效电平,需要死区延迟。
互补输出通道没有开启,设置的设置互补输出通道为高电平有效,同时OCSxN为0,低电平不是有效输出电平,不需要加死区延迟。
4、互补输出没有开启,设置输出通道为高电平有效,输出与OCxREF一样,刹车信号来的时候,OCSx为1,为有效电平,需要死区延迟。
互补输出通道没有开启,设置的设置互补输出通道为高电平有效,同时OCSxN为0,低电平不是有效输出电平,不需要加死区延迟。
六、高级定时器互补输出带死区控制实验配置步骤
1、HAL_TIM_PWM_Init()函数,配置定时器基础工作参数。这个函数与HAL_TIM_Base_init()函数功能是一样的。
2、HAL_TIM_PWM_MspInit(),配置NVIC、CLOCK、GPIO等。
3、HAL_TIM_PWM _Configchannel()函数,配置PWM模式/比较值。
4、HAL_TIMEx_ConfigBreakDeadTime()函数,配置刹车功能、死区时间等。
5、HAL_TIM_PWM _Start()函数,使能输出、主输出、计数器。
6、HAL_TIM_PWMN _Start()函数,使能互补输出、主输出、计数器。
七、高级定时器互补输出带死区控制实验
1、寄存器版本
#include "./BSP/TIMER/atim.h"//配置定时器1的通道1 和 通道1互补输出 PE8 PE9
void Advanced_TIM_Init(void)
{//开启定时器1时钟RCC->APB2ENR |= (1 << 11);//设置CKD分频系数为4TIM1->CR1 |= (1 << 9);TIM1->CR1 &= ~(1 << 8);//设置ARR寄存器缓冲功能TIM1->CR1 |= (1 << 7);//注意硬件不允许同时输出有效电平 有效电平在CCxP和CCxNP设置//设置OIS1 输出空闲状态//TIM1->CR2 |= (1 << 8);TIM1->CR2 &= ~(1 << 8);//设置OIS1N 互补输出空闲状态TIM1->CR2 |= (1 << 9);//设置CC1S模式为输出 00 TIM1->CCMR1 &= ~(0X03 << 0);//OC1M 设置为PWM1模式 110 TIM1->CCMR1 |= (0X03 << 5);TIM1->CCMR1 &= ~(1 << 4);//CC1NP 互补输出高电平有效TIM1->CCER &= ~(1 << 3);//CC1NE 开启互补输出比较使能TIM1->CCER |= (1 << 2);//CC1P 输出高电平有效TIM1->CCER &= ~(1 << 1);//CC1E开启输出比较使能TIM1->CCER |= (1 << 0);//设置预分频系数为71TIM1->PSC = 71;//设置预装载值为999 TIM1->ARR = 999;//设置CCR1输出比较值 控制占空比TIM1->CCR1 = 0.3 * (TIM1->ARR + 1) - 1;//MOE 开启主输出TIM1->BDTR |= (1 << 15);//AOE 开启刹车失效之后MOE自动恢复TIM1->BDTR |= (1 << 14);//刹车极性高电平有效TIM1->BDTR |= (1 << 13);//开启刹车使能TIM1->BDTR |= (1 << 12);//CKD分频系数设置为4 72M/4 取倒数为Tdts时间 //然后用100 成这个时间为死区延迟时间 5.56us//设置DTG死区延时为100 TIM1->BDTR |= 100;TIM1->EGR |= (1 << 0);//开启GPIOE1时钟RCC->APB2ENR |= (1 << 6);//设置PE8为复用推挽输出GPIOE->CRH |= (0X03 << 0);GPIOE->CRH |= (1 << 3);GPIOE->CRH &= ~(1 << 2);//设置PE9为复用推挽输出GPIOE->CRH |= (0X03 << 4);GPIOE->CRH |= (1 << 7);GPIOE->CRH &= ~(1 << 6);//设置PE15为复用推挽输出GPIOE->CRH |= (0X03 << 28);GPIOE->CRH |= (1 << 31);GPIOE->CRH &= ~(1 << 30);//使能AFIO时钟RCC->APB2ENR |= (1 << 0);//设置TIM1完全重映射 将CH1映射到PE9 CH1N映射到PE8 BKIN映射到PE15上AFIO->MAPR |= (0x03 << 6);//使能计数器TIM1->CR1 |= (1 << 0);
}
注意:配置过程中发现刹车输入使能位和刹车极性位设置无效,但是debug的时候通过断点设置便可以,全速运行就不可以 问题还没有找到,有思路的小伙伴可以私信我。
2、库函数版本
atim.h头文件
#ifndef __ATIM_H
#define __ATIM_H#include "stm32f1xx.h"
void Advanced_TIM_Init(void);
#endif
atim.c源文件
#include "./BSP/TIMER/atim.h"TIM_HandleTypeDef htim;void Advanced_TIM_Init(void)
{htim.Instance = TIM1;htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;htim.Init.CounterMode = TIM_COUNTERMODE_UP;htim.Init.Period = 999;htim.Init.Prescaler = 71;//配置PWM输出HAL_TIM_PWM_Init(&htim);TIM_OC_InitTypeDef sConfig = {0};sConfig.OCIdleState = TIM_OCIDLESTATE_SET;sConfig.OCMode = TIM_OCMODE_PWM1;sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;sConfig.Pulse = 499;HAL_TIM_PWM_ConfigChannel(&htim,&sConfig,TIM_CHANNEL_1);TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE;sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;sBreakDeadTimeConfig.BreakState = TIM_BREAK_ENABLE;sBreakDeadTimeConfig.DeadTime = 100;sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;sBreakDeadTimeConfig.OffStateRunMode=TIM_OSSR_DISABLE;//刹车输入及死区时间配置HAL_TIMEx_ConfigBreakDeadTime(&htim,&sBreakDeadTimeConfig);HAL_TIM_PWM_Start(&htim,TIM_CHANNEL_1);HAL_TIMEx_PWMN_Start(&htim,TIM_CHANNEL_1);
}void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{//开启定时器1时钟__HAL_RCC_TIM1_CLK_ENABLE();//开启GPIOE时钟__HAL_RCC_GPIOE_CLK_ENABLE();GPIO_InitTypeDef GPIO_Init = {0};GPIO_Init.Mode = GPIO_MODE_AF_PP;GPIO_Init.Pin = GPIO_PIN_8;GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH;//初始化PE8为复用推挽输出HAL_GPIO_Init(GPIOE, &GPIO_Init);//初始化PE9为复用推挽输出GPIO_Init.Pin = GPIO_PIN_9;HAL_GPIO_Init(GPIOE, &GPIO_Init);GPIO_Init.Mode = GPIO_MODE_INPUT;GPIO_Init.Pull = GPIO_PULLDOWN;GPIO_Init.Pin = GPIO_PIN_15;HAL_GPIO_Init(GPIOE, &GPIO_Init);//开启AFIO时钟__HAL_RCC_AFIO_CLK_ENABLE();//开启TIM1完全重映射__HAL_AFIO_REMAP_TIM1_ENABLE();
}
main.c源文件
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/TIMER/atim.h"int main(void)
{HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72); /* 延时初始化 */led_Init(); /* LED初始化 */Advanced_TIM_Init();while(1){ LED0(1);LED1(0);delay_ms(500);LED0(0);LED1(1);delay_ms(500);}
}
相关文章:
STM32的HAL库开发---高级定时器---互补输出带死区实验
一、互补输出简介 互补输出:OCx输出高电平,则互补通道OCxN输出低电平。OCx输出低电平,则互补通道OCxN输出高电平。 带死区控制的互补输出:OCx输出高电平时,则互补通道OCxN过一会再输出输出低电平。这个时间里输出的电…...
AntDesign X 报错:Cannot read properties of undefined (reading ‘_context‘)
解决: Cannot read properties of undefined (reading _context) 报错问题 我是基于umi的前端工程,react版本18.2, package.json,全部安装完之后的 "react": "^18.2.0", "ant-design/x": "^1…...
Day62_补20250210_图论part6_108冗余连接|109.冗余连接II
Day62_20250210_图论part6_108冗余连接|109.冗余连接II 108冗余连接 【把题意转化为并查集问题】 题目 有一个图,它是一棵树,他是拥有 n 个节点(节点编号1到n)和 n - 1 条边的连通无环无向图(其实就是一个线形图&am…...
06排序 + 查找(D2_查找(D1_基础学习))
目录 温故而知新 -------------------------------- 讲解一:基础理论 一、什么是查找 二、为什么需要查找 -------------------------------- 讲解二:代码学习 一、顺序查找 1. 算法原理 2. 算法步骤 3. Java代码实现 4. 适用场景 5. 知识小…...
SystemVerilog基础:disable fork语句
相关阅读 SystemVerilog基础https://blog.csdn.net/weixin_45791458/category_12517449.html?spm1001.2014.3001.5482 一、进程的概念 在学习disable fork语句之前,首先的了解SystemVerilog中的进程概念:进程是一系列可以独立执行的一个或多个表达式。…...
基于钉钉API的连接器实现:企业数据集成与自动化管理
文章目录 概要背景与需求钉钉API概述连接器实现小结 概要 在当今数字化时代,企业面临着海量数据的管理与整合挑战。钉钉作为国内广泛使用的办公协作平台,提供了丰富的API接口,支持企业进行数据集成与自动化管理。本文将介绍如何通过钉钉API实…...
windows server独立部署Qwen2.5-vl-7B
服务器配置信息 CPU:64G GPU:48G(RTX 4090) 一、使用conda下载模型 Qwen2.5-VL-7B-Instruct conda下载 conda create --name qwen python3.11 conda activate qwen 魔塔社区下载模型 pip install modelscope modelscope downl…...
nginx安装并部署前端项目【包括Linux与Windows系统】
nginx安装并部署前端项目 一、 nginx下载与安装二、 前端项目部署三、 常用命令&注意事项四、 常见问题【持续更新】 一、 nginx下载与安装 ① 下载地址:https://nginx.org/en/download.html ② 下载教程:根据不同操作系统(Linux或者Wi…...
pytest生成报告no tests ran in 0.01s
除了基本的环境配置、用例名要以test_开头,有个地方是我自己忽略了,在执行时没有指定用例文件,所以没有找到。 if __name__ __main__:pytest.main(["testcases/test_demo.py","-svq", __file__, --alluredir./allure-r…...
前后端服务配置
1、安装虚拟机(VirtualBox或者vmware),在虚拟机上配置centos(选择你需要的Linux版本),配置如nginx服务器等 1.1 VMware 下载路径Sign In注册下载 1.2 VirtualBox 下载路径https://www.virtualbox.org/wiki/Downloads 2、配置服…...
一文学会:用DeepSeek R1/V3 + AnythingLLM + Ollama 打造本地化部署的个人/企业知识库,无须担心数据上传云端的泄露问题
文章目录 前言一、AnythingLLM 简介&基础应用1.主要特性2.下载与安装3.配置 LLM 提供商4.AnythingLLM 工作区&对话 二、AnythingLLM 进阶应用:知识增强使用三、AnythingLLM 的 API 访问四、小结1.聊天模式2.本地存储&向量数据库 前言 如果你不知道Olla…...
[学习笔记] Kotlin Compose-Multiplatform
Compose-Multiplatform 原文:https://github.com/zimoyin/StudyNotes-master/blob/master/compose-multiplatform/compose.md Compose Multiplatform 是 JetBrains 为桌面平台(macOS,Linux,Windows)和Web编写Kotlin UI…...
202406 青少年软件编程等级考试C/C++ 三级真题答案及解析(电子学会)
第 1 题 谷歌的招聘 2004年7月,谷歌在硅谷的101号公路边竖立了一块巨大的广告牌用于招聘。内容超级简单,就是一个以.com 结尾的网址,而前面的网址是一个 10位素数,这个素数是自然常数e中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入…...
如何在Vue中实现事件处理
在Vue中,事件处理是一个核心概念,它让我们能够响应用户的操作,比如点击按钮、输入文本等。Vue提供了一个简洁而强大的方式来绑定事件和处理事件。本文将介绍如何在Vue中实现事件处理,覆盖事件绑定、事件修饰符以及事件处理函数等内…...
从零到一:基于Rook构建云原生Ceph存储的全面指南(下)
接上篇:《从零到一:基于Rook构建云原生Ceph存储的全面指南(上)》 链接: link 六.Rook部署云原生CephFS文件系统 6.1 部署cephfs storageclass cephfs文件系统与RBD服务类似,要想在kubernetes pod里使用cephfs&#…...
结合实际讲NR系列2—— SIB1
这是在基站抓取的sib1的一条信令 L3MessageContent BCCH-DL-SCH-Messagemessagec1systemInformationBlockType1cellSelectionInfoq-RxLevMin: -64q-QualMin: -19cellAccessRelatedInfoplmn-IdentityListPLMN-IdentityInfoplmn-IdentityListPLMN-IdentitymccMCC-MNC-Digit: 4MC…...
git rebase 和 git merge的区别
Rebase 可使提交树变得很干净, 所有的提交都在一条线上。 Merge 则是包含所有的调试记录,合并之后,父级的所有信息都会合并在一起 Rebase 修改了提交树的历史 比如, 提交 C1 可以被 rebase 到 C3 之后。这看起来 C1 中的工作是在 C3 之后进行的…...
JavaScript字符串类型详解
目录 一、创建字符串 1. 字面量方式 2. 使用 String 构造函数 二、字符串的不可变性 三、字符串的长度与索引 四、字符串的拼接 1. 使用加号 () 2. 使用模板字符串(ES6) 五、字符串的常用方法 1. 获取子串 substring(start, end) slice(start…...
Hdoop之MapReduce的原理
简单版本 AppMaster: 整个Job任务的核心协调工具 MapTask: 主要用于Map任务的执行 ReduceTask: 主要用于Reduce任务的执行 一个任务提交Job --> AppMaster(项目经理)--> 根据切片的数量统计出需要多少个MapTask任务 --> 向ResourceManager(Yarn平台的老大)索要资源 --…...
数据仓库和商务智能:洞察数据,驱动决策
在数据管理的众多领域中,数据仓库和商务智能(BI)是将数据转化为洞察力、支持决策制定的关键环节。它们通过整合、存储和分析数据,帮助组织更好地理解业务运营,预测市场趋势,从而制定出更明智的战略。今天&a…...
可视化工作流编排参数配置完整方案设计文档
一、背景及需求分析 1. 背景 在复杂的工作流程中,后续程序需要动态构造输入参数,这些参数源自多个前序程序的 JSON 数据输出。为了增强系统的灵活性和可扩展性,配置文件需要支持以下功能: 灵活映射前序程序的 JSON 数据。…...
Linux sysfs虚拟文件系统
文章目录 简介sysfs接口sysfs和procfs参考 本文拟对Linux sysfs虚拟文件系统进行简单的介绍和原理分析 简介 测试环境:Linux dev-PC 5.18.17-amd64-desktop-hwe #20.01.00.10 SMP PREEMPT_DYNAMIC Thu Jun 15 16:17:50 CST 2023 x86_64 GNU/Linux sysfs虚拟文件系统…...
C++ 设计模式 - 访问者模式
一:概述 访问者模式将作用于对象层次结构的操作封装为一个对象,并使其能够在不修改对象层次结构的情况下定义新的操作。 《设计模式:可复用面向对象软件的基础》一书中的访问者模式因两个原因而具有传奇色彩:一是因为它的复杂性&a…...
微软编程之C#如何学习,C#学习路线:从入门到精通
引言 C# 是一种由微软开发的面向对象编程语言,广泛应用于 Windows 应用程序开发、游戏开发(Unity)、Web 开发(ASP.NET)等领域。对于初学者来说,掌握 C# 不仅能够打开编程世界的大门,还能为未来…...
PromptSource官方文档翻译
目录 核心概念解析 提示模板(Prompt Template) P3数据集 安装指南 基础安装(仅使用提示) 开发环境安装(需创建提示) API使用详解 基本用法 子数据集处理 批量操作 提示创建流程 Web界面操作 手…...
深入理解QT的View-Model-Delegate机制和用法
文章目录 Model-View-Delegate机制Model(数据模型)设置模型属性访问元素操作元素数据排序封装好的模型View(视图)显示数据数据选择Delegate(代理)数据选择易用封装类QListWidgetQTreeWidgetQTableWidget元素拖拽代理模型参考示例Model-View-Delegate机制 Qt的View/Model/Deleg…...
【JavaScript】JavaScript 运行原理
执行上下文 JavaScript引擎会在执行代码之前,会在堆内存中创建一个全局对像:Global Object(GO) 该对象所有的作用域(scope)都可以访问,在浏览器中这个对象就是window;里面会包含Date、Array、StringNumber、setTimeout、setInte…...
力扣hot100刷题第一天
哈希 1. 两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意…...
数据结构-find()-判断字符串s1中是否包含字符串s2
find()库函数 #include <iostream> using namespace std;bool check(string s1,string s2){int n s1.size();int m s2.size();if(n0||m0 || n<m){return false;}if(s1.find(s2) ! string::npos){return true;}else{return false;} }int main () {string a "…...
寒假2.7
题解 web:[HCTF 2018]WarmUp 打开是张表情包 看一下源代码 访问source.php,得到完整代码 代码审计 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.p…...
【韩顺平linux】部分上课笔记整理
整理一下一些韩顺平老师上课时候的笔记 课程:【小白入门 通俗易懂】韩顺平 一周学会Linux linux环境:使用阿里云服务器 笔记参考 : [学习笔记]2021韩顺平一周学会Linux 一、自定义函数 基本语法 应用实例: 计算两个参数的和…...
Linux proc虚拟文件系统
文章目录 简介proc常用节点pid节点procfs接口参考 简介 测试环境:Linux dev-PC 5.18.17-amd64-desktop-hwe #20.01.00.10 SMP PREEMPT_DYNAMIC Thu Jun 15 16:17:50 CST 2023 x86_64 GNU/Linux proc虚拟文件系统是linux内核提供的一种让用户和内核内部数据结构进行交…...
IDEA中常见问题汇总
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
Spring Security 学习大纲
Spring Security 系统学习大纲 一、基础入门 Spring Security 概述 安全框架的核心功能(认证、授权、攻击防护)核心组件:SecurityFilterChain, UserDetailsService, AuthenticationProvider, AccessDecisionManager与 Servlet 容器的集成原理…...
本地部署模型全攻略阶段二_3---Kiln AI
Kiln AI && Ollma && DeepSeek Kil AI:简单介绍与入门教程Kiln AI简介核心功能优势与特点二、Kiln AI安装步骤下载安装创建项目和任务使用界面Fine Tuning三、资源与支持Kil AI:简单介绍与入门教程 Kiln AI简介 简述Kiln AI是什么 Kiln AI是一款开源的AI开发…...
从零开始:使用Jenkins实现高效自动化部署
在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得…...
机器学习 - 线性回归(最大后验估计)
最大似然估计的一个缺点是当训练数据比较少时会发生过拟合,估计的参数可能不准确.为了避免过拟合,我们可以给参数加上一些先验知识. 一、先从最大似然估计的一个缺点入手 最大似然估计(MLE)在处理小样本数据时,容易发…...
Web前端开发--HTML
HTML快速入门 1.新建文本文件,后缀名改为.html 2.编写 HTML结构标签 3.在<body>中填写内容 HTML结构标签 特点 1.HTML标签中不区分大小写 2.HTML标签属性值中可以使用单引号也可使用双引号 3.HTML语法结构比较松散(但在编写时要严格一点&…...
Linux | 系统调用
文章目录 Linux | 系统调用open 系统调用功能头文件和函数原型参数解释返回值示例代码 其他常用系统调用read 系统调用write 系统调用close 系统调用lseek 系统调用stat 系统调用 Linux | 系统调用 前言:在Linux系统中,系统调用是用户空间程序与内核进行…...
用easyExcel如何实现?
要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能,需要结合 EasyExcel 库来读取 Excel 数据。具体来说,可以使用 EasyExcel.read() 方法来读取 Excel 文件,并指定 ExcelModelListener 作为事件监听器。 下面是…...
ASP.NET Core SignalR身份验证
在需要登录才能访问的集线器类上或者方法上添加[Authorize]。也支持角色等设置,可以设置到Hub或者方法上。 配置好User、Role、MyDbContext、JWTSettings、IdentityHelper Program.cs using SignaIR的基本使用; using Scalar.AspNetCore; using Identity框架; us…...
查询语句来提取 detail 字段中包含 xxx 的 URL 里的 commodity/ 后面的数字串
您可以使用以下 SQL 查询语句来提取 detail 字段中包含 oss.kxlist.com 的 URL 里的 commodity/ 后面的数字串: <p><img style"max-width:100%;" src"https://oss.kxlist.com//8a989a0c55e4a7900155e7fd7971000b/commodity/20170925/20170…...
linux本地部署deepseek
目录 安装ollama安装open-webui网页客户端界面本地安装open-webui直接安装在裸机上安装在docker中 外部服务器安装open-webui,并链接本地的ollama服务直接安装在外部服务器裸机上配置systemd启动open-webui 安装在docker中 最后更新时间2024-05-24 安装ollama olla…...
ESP32_H2(IDF)学习系列-蓝牙基础学习(上)
一、简介 参考:[乐鑫-蓝牙] Bluetooth LE 的分层架构 Bluetooth LE 协议定义了三层软件结构,自上而下分别是 应用层 (Application Layer) 应用层(Application Layer) 主机层 (Host Layer) 控制器层 (Controller Layer) 应用…...
防御综合实验
需求一 配置vlan [SW2]int g 0/0/2 [SW2-GigabitEthernet0/0/2]port link-type access [SW2-GigabitEthernet0/0/2]port default vlan 10 [SW2-GigabitEthernet0/0/2]int g0/0/3 [SW2-GigabitEthernet0/0/3]port link-type access [SW2-GigabitEthernet0/0/3]port default vl…...
Blazor-<select>
今天我们来说说<select>标签的用法,我们还是从一个示例代码开始 page "/demoPage" rendermode InteractiveAuto inject ILogger<InjectPage> logger; <h3>demoPage</h3> <select multiple>foreach (var item in list){<…...
zy.21
PHP(续) PHP代码执行漏洞 1.PHP中代码漏洞的概念 代码执行漏洞就是在代码中若存在eval、assert等能将所接收的参数作为代码去执行,并且拼接的内容可被访问者控制,也就是把传入的参数给拼接进去了,造成了额外的代码执行,也就造成了代码执行漏洞。(大概原理&#x…...
【c++】四种类型转换形式
【c】四种类型转换形式 编译时: static_cast(静态转换) const_cast(去常性转换) reinterpret_cast(重新解释转换,直接转换地址) 运行时: dynamic_cast(动态转换,运行时类…...
在npm上传属于自己的包
最近在整理代码,上传到npm方便使用,所以学习了如何在npm发布一个包,整理写成一篇文章和大家一起交流。 1、注册npm账号 npm | Home 2、确保是登录状态 (在包目录下,终端执行 npm login) 按enter键自动打开页面&…...
关系型数据库主备高可用方案对比笔记
目录标题 数据库高可用性解决方案对比Oracle Data GuardMySQL 主从复制SQL Server AlwaysOnPG Patroni 流复制达梦 DMDataWatch人大金仓 repmgr 备库故障是否影响主库?表格关系型数据库主备高可用方案对比笔记 数据库高可用性解决方案对比 Oracle Data Guard Orac…...