STM32PWM应用

目录

一、输出比较(OC)

二、PWM:

1、简介

2、基本结构

3、参数计算

三、PWM驱动LED呼吸灯

1、代码

四、PWM驱动Sg90舵机

1、工作原理

 2、完整代码

五、PWM驱动直流电机

1、TB6612芯片模块

 2、完整代码:


一、输出比较(OC)

OC(Output Compare)输出比较

  • 可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
  • 每个高级定时器和通用定时器都拥有4个输出比较通道
  • 高级定时器的前3个通道额外拥有死区生成和互补输出的功能

捕获/比较通道的输出部分(通道一)如下:

CNT>=CCR1时,输出模式控制器会输出一个OC1ref,也就是一个输出比较的参考信号,可以映射到至主模式控制器,最常用的是走下面的那一条路到达CC1P极性选择,给这个寄存器写0,信号往上走,信号电平不翻转;给这个寄存器写1,信号往下走,经过一个非门取反,信号电平会发生翻转,原来的参考信号中高低电平会相反。输出使能电路就是要不要输出,OC1引脚就是CH1通道的引脚。

输出模式控制器中的输出比较8种模式,如下图:

图中置有效电平不可以直接理解为就是高电平,置无效电平也不可以直接理解为就是低电平。因为有效电平与输出极性(TIMx_CCER寄存器中的 CCxP位)有直接关系,TIMx_CCER寄存器中置CCxP = 0,选择极性为高电平有效,这时候置有效电平就为高电平;TIMx_CCER寄存器中置CCxP = 1,选择极性为低电平有效,这时候置有效电平就为低电平。

假如我们用PWM模式1,定时器设置为向上计数模式,TIMx_CCER寄存器中置CCxP = 0(在编程库函数是这个参数TIM_OCInitStructure.TIM_OCPolarityTIM_OCPolarity_High)。CNT<CCR时REF置有效电压为高电平输出,CNT>=CCR时,REF置无效电压为低电平输出。相反,如果TIMx_CCER寄存器中置CCxP = 1,CNT<CCR时REF置有效电压为低电平输出,CNT>=CCR时,REF置无效电压为高电平输出

冻结模式:当使用时,状态为暂停时的状态。

匹配时置有效电平/无效电平:是高级定时器里面用的。它俩都是一次性的置完高电平/低电平后,就不管事了,所以这俩模式不适合输出连续变化的波形。

匹配时电平翻转:可以输出一个连续的波形,输出频率=定时器频率/2,如下,会输出一个占空比为50%的波形。

强制为无效电平/无效电平:把REF强制设置为高电平/低电平。

PWM模式1/模式2:可以输出频率和占空比可调的PWM波形,功能如上图,注意一点的是定时器计数方式。

二、PWM:

1、简介

必须在具有惯性系统下应用,如灯亮灭、电机调速等,所谓的惯性,如灯灭掉,不会立马熄灭,而是慢慢的熄灭;电机也是慢慢的停止。

2、基本结构

3、参数计算

三、PWM驱动LED呼吸灯

1、代码

  •  配置时钟外设
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  • GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;   //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_InitStructure);

如下图,当IO口作为普通IO口时使用输出数据寄存器进行输出数据;当我们使用复用功能输出时,输出数据寄存器会断开,从片上外设进行输出,片上外设如片上集成的PWM等等。复用功能输出就是从A0口进行输出PWM波形,使用的是复用推挽输出,可以输出高低平。所谓复用就是某个引脚具有多个功能。

  •  内部时钟配置
TIM_InternalClockConfig(TIM2);
  • 配置时基单元
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;     //滤波频率
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //计数方式,向上
TIM_TimeBaseInitStruct.TIM_Period=100-1;                 //自动重装载寄存器ARR
TIM_TimeBaseInitStruct.TIM_Prescaler=720-1;               //预分频器
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
  •  输出比较初始化
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit(&TIM_OCInitStructure);            //要给结构体赋一个初始值,否则有可能出现错误
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //输出模式
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High ;     //CC1P输出极性,这里的High指的是REF有效电平为高电平输出
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;   //输出使能
TIM_OCInitStructure.TIM_Pulse=0;                               //用来设置CCR
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
  • 启动定时器
TIM_Cmd(TIM2,ENABLE);
  •  配置CCR

CCR可以通过可以库函数TIM_SetCompare1()进行动态配置。

void PWM_SetCompare1(uint16_t Compare)
{
	
       TIM_SetCompare1(TIM2,Compare);
	
}

完整代码:

PWM.c:

#include "stm32f10x.h"                  // Device header


void PWM_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	//1.配置时钟,用那个外设
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
//	//重映射功能
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //先打开AFIO,让AFIO去重映射
//	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);
//	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);  //如果要使用PA15、B4、B3当作GPIO,首先需要先解除调式端口
	
 	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;   //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//2.内部时钟配置
	TIM_InternalClockConfig(TIM2);
	
	//3.配置时基单元
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;     //滤波频率
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //计数方式,向上
	TIM_TimeBaseInitStruct.TIM_Period=100-1;                 //自动重装载寄存器ARR
	TIM_TimeBaseInitStruct.TIM_Prescaler=720-1;               //预分频器
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;

	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
	
	
	//4.输出比较初始化
	TIM_OCStructInit(&TIM_OCInitStructure);            //要给结构体赋一个初始值,否则有可能出现错误
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //输出模式
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High ;     //CC1P输出极性,这里的High指的是REF有效电平为高电平输出
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;   //输出使能
	TIM_OCInitStructure.TIM_Pulse=0;                               //用来设置CCR
	TIM_OC1Init(TIM2,&TIM_OCInitStructure);
	
	//5.启动定时器
	TIM_Cmd(TIM2,ENABLE);
	

}

void PWM_SetCompare1(uint16_t Compare)
{
	
       TIM_SetCompare1(TIM2,Compare);
	
}

PWM.h:

#ifndef _PWM_H
#define _PWM_H


void PWM_SetCompare1(uint16_t Compare);

void PWM_Init(void);

#endif

main.c:

#include  "stm32f10x.h"                  // Device header
#include  "OLED.h"
#include  "delay.h"
#include  "PWM.h"

uint16_t  i;

int main(void)
{
	
   OLED_Init();
	PWM_Init();
	while(1) 
	{
	  
		for(i=0;i<=100;i++)
		{
			 PWM_SetCompare1(i);
			 Delay_ms(10);
		}
		for(i=0;i<=100;i++)
		{
			 PWM_SetCompare1(100-i);
			 Delay_ms(10);
		}
	}
	
}

四、PWM驱动Sg90舵机

1、工作原理

  • 舵机是一种根据输入PWM信号占空比来控制输出角度的装置
  • 输入PWM信号要求:频率为50HZ,周期为20ms,高电平宽度为0.5ms~2.5ms 

 角度范围为0~180度

                                0.5ms------------- 0度 ;  占空比为2.5%
                                1.0ms------------ 45度 ; 占空比为2.5%
                                1.5ms------------ 90度 ; 占空比为7.5%
                                2.0ms----------- 135度 ;占空比为10.0%
                                2.5ms----------- 180度 ;占空比为12.5%

 以0度和135度为例:

 2、完整代码

 黄色的那根线接的是PA1,用的CH2输出通道。

PWM.c:

#include "stm32f10x.h"                  // Device header


void PWM_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	//1.配置时钟,用那个外设
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
//	//重映射功能
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //先打开AFIO,让AFIO去重映射
//	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);
//	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);  //如果要使用PA15、B4、B3当作GPIO,首先需要先解除调式端口
	
 	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;   //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//2.内部时钟配置
	TIM_InternalClockConfig(TIM2);
	
	//3.配置时基单元
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;     //滤波频率
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //计数方式
	TIM_TimeBaseInitStruct.TIM_Period=20000-1;                 //自动重装载寄存器ARR
	TIM_TimeBaseInitStruct.TIM_Prescaler=72-1;               //预分频器
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;

	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
	
	
	//TIM_ClearFlag(TIM2,TIM_FLAG_Update);
	
	//配置输出比较初始化
	TIM_OCStructInit(&TIM_OCInitStructure);            //要给结构体赋一个初始值,否则有可能出现错误
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //输出模式
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;       //输出极性
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=0;                               //用来设置CCR
	TIM_OC2Init(TIM2,&TIM_OCInitStructure);
	
	//4.启动定时器
	TIM_Cmd(TIM2,ENABLE);
	

}

void PWM_SetCompare2(uint16_t Compare)
{
	
       TIM_SetCompare2(TIM2,Compare);
	
}

PWM.h:

#ifndef _PWM_H
#define _PWM_H


void PWM_SetCompare2(uint16_t Compare);

void PWM_Init(void);

#endif

Sg90.c:

#include "stm32f10x.h"                  // Device header
#include "PWM.h" 

void Sg90_Init(void)
{
	PWM_Init();
}


void Sg90_SetAngle(float Angle)  //angle 角度
{
	
	PWM_SetCompare2(Angle/180*2000+500);
	
}

Sg90.h:

#ifndef _SG90_H
#define _SG90_H

void Sg90_Init(void);

void Sg90_SetAngle(float Angle);  //angle 角度


#endif

main.c:

#include  "stm32f10x.h"                  // Device header
#include  "OLED.h"
#include  "delay.h"
#include  "Sg90.h"

float i;

int main(void)
{
	
   OLED_Init();
	Sg90_Init();
	Sg90_SetAngle(0);
	OLED_ShowString(1,1,"Angle:");
	while(1) 
	{

	   for(i=0;i<=180;i+=0.5)
		{
			Sg90_SetAngle(i);
			OLED_ShowNum(1,7,(uint16_t)i,3);
			Delay_ms(20);
		}
		Delay_ms(10);
		for(i=0;i<=180;i+=0.5)
		{
			Sg90_SetAngle(180-i);
			OLED_ShowNum(1,7,(uint16_t)(180-i),3);
			Delay_ms(20);
		}
	
	}
	
}

五、PWM驱动直流电机

1、TB6612芯片模块

驱动直流电机使用的是TB6612芯片模块,TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向。

硬件电路和功能: 

 2、完整代码:

接线图:

PWM.c:

#include "stm32f10x.h"                  // Device header


void PWM_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	//1.配置时钟,用那个外设
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
//	//重映射功能
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //先打开AFIO,让AFIO去重映射
//	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);
//	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);  //如果要使用PA15、B4、B3当作GPIO,首先需要先解除调式端口
	
 	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;   //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//2.内部时钟配置
	TIM_InternalClockConfig(TIM2);
	
	//3.配置时基单元
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;     //滤波频率
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //计数方式
	TIM_TimeBaseInitStruct.TIM_Period=100-1;                    //自动重装载寄存器ARR
	TIM_TimeBaseInitStruct.TIM_Prescaler=18-1;                  //预分频器
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;

	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
	
	
	//TIM_ClearFlag(TIM2,TIM_FLAG_Update);
	
	//配置输出比较初始化
	TIM_OCStructInit(&TIM_OCInitStructure);            //要给结构体赋一个初始值,否则有可能出现错误
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //输出模式
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;       //输出极性
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=0;                               //用来设置CCR
	TIM_OC3Init(TIM2,&TIM_OCInitStructure);
	
	//4.启动定时器
	TIM_Cmd(TIM2,ENABLE);
	

}

void PWM_SetCompare3(uint16_t Compare)
{
	
       TIM_SetCompare3(TIM2,Compare);
	
}

PWM.h:

#ifndef _PWM_H
#define _PWM_H


void PWM_SetCompare3(uint16_t Compare);

void PWM_Init(void);

#endif

Motor.c:

#include "stm32f10x.h"                  // Device header
#include "PWM.h"

void Motor_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;  //如果有错误,就把这个函数放在最前面
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	PWM_Init();
	
}

void Motor_SetSpeed(int16_t Speed)
{
	if(Speed>=0)
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_4);
		GPIO_ResetBits(GPIOA,GPIO_Pin_5);
		PWM_SetCompare3(Speed);
	}
	else{
		GPIO_SetBits(GPIOA,GPIO_Pin_5);
		GPIO_ResetBits(GPIOA,GPIO_Pin_4);
		PWM_SetCompare3(-Speed);
	}
}

Motor.h:

#ifndef _PWM_H
#define _PWM_H


void Motor_Init(void);

void Motor_SetSpeed(int16_t Speed);


#endif

main.c:

#include  "stm32f10x.h"                  // Device header
#include  "OLED.h"
#include  "delay.h"
#include  "Motor.h"

uint16_t i;
int main(void)
{
	
   OLED_Init();
   Motor_Init();
   Motor_SetSpeed(0);
	while(1) 
	{
      for(i=0;i<=100;i++)
		{
        Motor_SetSpeed(i);
		  Delay_ms(10);
		}
		Delay_ms(100);
		for(i=0;i<=100;i++)
		{
        Motor_SetSpeed(100-i);
		  Delay_ms(10);
		}
	}
	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/887887.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能医疗:Spring Boot医院管理系统开发

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

【Python】PDFMiner.six:高效处理PDF文档的Python工具

PDF是一种广泛使用的文件格式&#xff0c;特别适用于呈现固定布局的文档。然而&#xff0c;提取PDF文件中的文本和信息并不总是那么简单。幸好有许多Python库可以帮助我们&#xff0c;其中&#xff0c;PDFMiner.six 是一个功能强大、专门用于PDF文档解析的库。 ⭕️宇宙起点 &a…

cnn突破四(生成卷积核与固定核对比)

cnn突破三中生成四个卷积核&#xff0c;训练6万次&#xff0c;91分&#xff0c;再训练6万次&#xff0c;95分&#xff0c;不是很满意&#xff0c;但又找不到问题点&#xff0c;所以就想了个办法&#xff0c;使用三个固定核&#xff0c;加上三层bpnet神经网络&#xff0c;看看效…

王道-数据结构

1 设数组data[m]作为循环队列的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为____ 答案:D 解析:队列的头指针指向队首元素的实际位置,因此出队操作后,头指针需向上移动一个元素的位置。循环队列的容量为m,所以头指针front加1以后,需…

【d60】【Java】【力扣】509. 斐波那契数

思路 要做的问题&#xff1a;求F&#xff08;n&#xff09;, F&#xff08;n&#xff09;就等于F(n-1)F(n-2)&#xff0c;要把这个F(n-1)F(n-2)当作常量&#xff0c;已经得到的值&#xff0c; 结束条件&#xff1a;如果是第1 第2 个数字的时候&#xff0c;没有n-1和n-2,所以…

闯关训练三:Git 基础知识

任务1: 破冰活动&#xff1a;自我介绍 点击Fork目标项目&#xff0c;创建一个新的Fork 获取仓库链接 在连接好开发机的vscode终端中逐行执行以下代码&#xff1a; git clone https://github.com/KelvinIII/Tutorial.git # 修改为自己frok的仓库 cd Tutorial/ git branch -a g…

4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1

目录 前序工作 1. 服务器项目名和本地一致 2. pycharm连接服务器 3. 本地项目对应到服务器项目 4. 简单测试一下同步效果 同步成功 前序工作 在同步到服务器之前&#xff0c;得确保已经完成以下几个前置步骤&#xff1a; 1. 租一个云服务器&#xff0c;可参考&#xff1a…

18734 拓扑排序

### 思路 1. **建模问题**&#xff1a;将课程和依赖关系建模为有向图&#xff0c;其中课程是节点&#xff0c;依赖关系是有向边。 2. **选择算法**&#xff1a;使用拓扑排序算法来确定课程的学习顺序。由于需要确保输出唯一性&#xff0c;同等条件下编号小的课程排在前面&…

WDG看门狗在stm32中的应用

一&#xff0c;WDG看门狗的介绍 看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入长时间的罢工状态&#xff0c;保证系统的可靠性和安全性看…

2-114 基于matlab的CA模型

基于matlab的CA模型&#xff0c;Singer模型对单机动目标进行跟踪算法&#xff0c;具有10页实验文档。采用蒙特卡罗方法对一个二坐标雷达对一平面上运动的目标进行观测&#xff0c;得到跟踪滤波结果。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-114 …

libcurl网络协议库使用Demo

目录 1 libcurl简介 2 libcurl编译 3 使用步骤 4 函数说明 4.1 全局初始化函数 curl_global_init 4.2 全局释放函数 curl_global_cleanup 4.3 libcurl库版本 curl_version 4.4 开启会话 curl_easy_init 4.5 结束会话 curl_easy_cleanup 4.6 设置传输选项 curl_easy_se…

Stable Diffusion绘画 | 插件-Deforum:动态视频生成(中篇)

本篇文章重点讲解参数最多的 关键帧 模块。 「动画模式」选择「3D」&#xff1a; 下方「运动」Tab 会有一系列参数&#xff1a; 以下4个参数&#xff0c;只有「动画模式」选择「2D」才会生效&#xff0c;可忽略&#xff1a; 运动 平移 X 让镜头左右移动&#xff1a; 大于0&a…

Seata学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

华为eNSP:端口隔离

一&#xff0c;什么是端口隔离 端口隔离是一种网络配置技术&#xff0c;用于将不同的网络设备或用户隔离在不同的虚拟局域网&#xff08;VLAN&#xff09;中&#xff0c;以实现网络流量的隔离和安全性提升。通过在交换机或路由器上配置端口隔离&#xff0c;可以将连接到同一设…

【机器学习-无监督学习】概率图模型

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

在VS code 中部署C#和avalonia开发环境

要在 Mac 的 VS Code 中配置 C# 和 Avalonia 的开发环境&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 安装 .NET SDK 下载 .NET SDK&#xff1a; 访问 .NET 下载页面。选择适用于 macOS 的最新稳定版本的 .NET SDK&#xff0c;并下载安装程序。安装 .NET SDK&#xff1…

VSCode | 设置Jupyter Notebook显示行号

vscode中的jupyter notebook每个cell都是默认不显示行号的&#xff0c;如果出现了报错&#xff0c;比如在52行出现报错&#xff0c;如果代码多的话不显示行号就有点麻烦&#xff0c;本文介绍如何设置显示行号。 1、VScode点击文件-首选项-设置 2、搜索“python”&#xff0c;点…

约数个数约数之和

好久没发文章了.......不过粉丝还是一个没少...... 今天来看两道超级恶心的数论题目&#xff01; No.1 约数个数 No.2 约数之和 先来看第一道&#xff1a;约数个数 题目描述 给定 n 个正整数 ai​,请你输出这些数的乘积的约数个数,答案对 10^97 取模 输入格式 第一行包含…

cherry-markdown开源markdown组件详细使用教程

文章目录 前言开发定位目标调研技术方案前提工作量安排数据库表设计实现步骤1、引入依赖2、实现cherry-markdown的vue组件&#xff08;修改上传接口路径&#xff09;3、支持draw.io组件4、支持展示悬浮目录toc前端使用&#xff1a;编辑状态使用cherry-markdown的vue组件前端使用…

netty之Netty心跳服务与断线重连

前言 使用netty中&#xff0c;需要监测服务是否稳定以及在网络异常链接断开时候可以自动重连。需要实现监听&#xff1b;f.addListener(new MyChannelFutureListener()) 代码目录结构 package com.lm.demo.netty.client;import io.netty.channel.ChannelFuture; import io.nett…