最新资讯

  • STM32笔记归纳9:定时器

STM32笔记归纳9:定时器

2026-02-09 17:00:54 栏目:最新资讯 3 阅读

定时器

目录

定时器

一、时基单元

1.1.定时器简介

1.2.时基单元的基本结构

1.3.上计数、下计数和中心对齐

1.3.1.上计数

1.3.2.下计数

1.3.3.中心对齐

1.4.时钟的来源

1.5.寄存器预加载

二、自制延迟函数

2.1.获取单片机的当前时间

2.2.实现延迟函数

2.3.初始化时基单元

2.3.1.使能时钟

2.3.2.配置时基单元的参数

2.3.3.使能总开关

2.4.4.总代码

2.4.配置中断

2.4.1.开启中断

2.4.2.配置NVIC

2.5.编写中断响应函数

2.6.总代码

三、输出比较

3.1.输出比较简介

3.2.基本工作原理(PWM)

3.3.8种工作模式

3.4.互补输出

3.5.极性选择

四、呼吸灯实验

4.1.呼吸灯原理

4.2.初始化IO引脚

4.3.配置时基单元

4.4.配置输出比较的参数

4.5.改变PWM占空比

4.6.总代码

五、输入捕获

5.1.输入捕获的基本原理

5.2.输入捕获的内部结构

5.3.输入滤波

5.4.边沿检测

5.5.信号选择

5.6.分频器

六、超声波测距实验 

6.1.HCSR04模块的使用方法

6.2.搭建电路

6.3.梳理思路

6.4.初始化时基单元

6.5.初始化输入捕获

6.6.编程

七、从模式控制器

7.1.什么是从模式控制器

7.2.8种从模式

7.3.8种主模式

7.4.定时器级联的例子 

7.5.定时器同时启停的例子

八、PWM参数测量原理

8.1.参考手册的定时器结构框图

8.2.输入捕获节点的名字

8.3.TRGI的来源

8.4.PWM参数测量原理

九、PWM参数测量实验

9.1.实验原理

9.2.产生PWM信号

9.3.初始化时基单元

9.4.初始化输入捕获

9.5.初始化模式控制器

9.6.测量PWM参数


一、时基单元

1.1.定时器简介

单片机内部的片上外设

参考手册13:高级定时器(TIM1、TIM8功能最全)

参考手册14:通用定时器(TIM2~5、TIM9~14)

参考手册15:基本定时器(TIM6、TIM7)

定时器结构框图:

1.2.时基单元的基本结构

时钟来源:产生时基单元的时钟信号

  • 来源1:时钟树
  • 来源2:从模式控制器

预分频器:对时钟信号进行降频

  • 分频系数:/ (PSC + 1)

计数器(CNT):对分频后的脉冲信号计数

  • 每来一个脉冲,计数器加一

自动重装寄存器(ARR):设置定时周期

  • 当计数器增长到与ARR相等时溢出
  • 计数器从0开始重新进行计数
  • 周期等于ARR+1

重复计数器(RCR):设置重复计算的次数

  • 计数器需要溢出RCR+1次才会产生update事件

1.3.上计数、下计数和中心对齐

1.3.1.上计数

1.3.2.下计数

1.3.3.中心对齐

1.4.时钟的来源

分辨率:计时的最小间隔(比如手表:1s)

周期: 循环一次的总时间(比如手表:60s)

时钟来源:

TIM1:

如果APB2分频器的分频系数为1

倍频器的倍频系数为1,TIM_CLK = PCLK2

如果APB2分频器的分频系数不为1

倍频器的倍频系数为2,TIM_CLK = PCLK2 * 2

TIM2~4:

如果APB1分频器的分频系数为1

倍频器的倍频系数为1,TIM_CLK = PCLK1

如果APB2分频器的分频系数不为1

倍频器的倍频系数为2,TIM_CLK = PCLK1 * 2

示例:将TIM3的时基单元设置为分辨率1us、周期1ms

1us = 1 * 10^(-6) s = 1MHz

1MHz = 72MHz / (71 + 1)

1ms = (999 + 1) * 1us

输入信号的频率为72MHz

预分频器PSC设置为71

自动重装载寄存器ARR设置为999

重复计数器RCR设置为0        

1.5.寄存器预加载

预加载:将修改值存入影子寄存器,等到上一个周期结束后再生效

示例:

假设不使用寄存器预加载,在定时器运行过程中突然改变ARR

写入值立即生效,如果当前值大于改变值,则会一直增加到65535

再次发生溢出,此时的周期就变成了65536

二、自制延迟函数

延迟函数:系统滴答定时器(内核定时器)

2.1.获取单片机的当前时间

配置时基单元,让单片机每毫秒产生一个中断

创建记录时间的变量

//记录当前时间(单位:ms)
volatile uint32_t currentTick = 0;

注:volatile关键字:防止编译器对变量进行优化,保证每次访问变量时都直接从其内存地址读取或写入,而不是使用可能过期的缓存值

2.2.实现延迟函数

//
//@简介:延迟一段时间
//@参数:ms:要延迟的时间(单位:ms)
//
void App_Delay(uint32_t ms)
{
	/*设置延迟结束时间*/
	uint32_t expireTime = currentTick + ms;
	/*等待延迟结束*/
	while(currentTick < expireTime);
}

2.3.初始化时基单元

2.3.1.使能时钟
//#1:开启定时器3的时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
2.3.2.配置时基单元的参数
//#2:配置时基单元的参数
/*声明TIM结构体变量*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
/*设置预分频系数*/
TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
/*设置自动重装寄存器*/
TIM_TimeBaseInitStruct.TIM_Period = 999;
/*设置计数方向*/
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
/*设置重复计数器*/
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
/*初始化TIM3*/
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
2.3.3.使能总开关
//#3:闭合时基单元的开关
TIM_Cmd(TIM3,ENABLE);
2.4.4.总代码
//创建TIM3初始化函数
void App_TIM3_TimeBaseInit(void)
{
	//#1:开启定时器3的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	//#2:配置时基单元的参数
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
	
	//#3:闭合时基单元的开关
	TIM_Cmd(TIM3,ENABLE);
}

2.4.配置中断

2.4.1.开启中断

void TIM_ITConfig(TIM_TypeDef* TIMx,uint16_t TIM_IT,FunctionalState NewState);

解析:

参数1:定时器名字

参数2:中断的名字

  • TIM_IT_Update
  • TIM_IT_Trigger
  • TIM_IT_CC1~TIM_IT_CC4

参数3:ENALE(使能)DISABLE(禁止)

作用:使能/禁止定时器的中断

//#4:使能Update中断
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
2.4.2.配置NVIC
int main(void)
{
	/*配置中断优先级分组*/
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	App_TIM3_TimeBaseInit();

	while(1)
	{
		
	}
}

//创建TIM3初始化函数
void App_TIM3_TimeBaseInit(void)
{
	//#1:开启定时器3的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	//#2:配置时基单元的参数
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
	
	//#3:闭合时基单元的开关
	TIM_Cmd(TIM3,ENABLE);
	
	//#4:使能Update中断
	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
	
	//#5:配置NVIC模块
	/*声明NVIC结构变量*/
	NVIC_InitTypeDef NVIC_InitStruct;
	/*设置TIM3_IRQn中断名称*/
	NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;
	/*设置抢占优先级*/
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
	/*子优先级*/
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
	/*闭合中断开关*/
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	/*初始化NVIC*/
	NVIC_Init(&NVIC_InitStruct);
}

2.5.编写中断响应函数

void TIM3_IRQHandler(void)
{
	/*如果是Update触发中断*/
	if(TIM_GetFlagStatus(TIM3,TIM_FLAG_Update) == SET)
	{
		/*清除中断标志位*/
		TIM_ClearFlag(TIM3,TIM_FLAG_Update);
		/*时间变量加一*/
		currentTick++;
	}
}

2.6.总代码

#include "stm32f10x.h"

//记录当前时间(单位:ms)
volatile uint32_t currentTick = 0;
//声明延迟函数
void App_Delay(uint32_t ms);
//声明TIM3初始化函数
void App_TIM3_TimeBaseInit(void);
//声明板载LED初始化函数
void App_OnBoardLED_Init(void);

int main(void)
{
	/*配置中断优先级分组*/
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	App_TIM3_TimeBaseInit();
	App_OnBoardLED_Init();
	while(1)
	{
		GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);
		App_Delay(50);
		GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);
		App_Delay(500);
		GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);
		App_Delay(50);
		GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);
		App_Delay(500);
		GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);
		App_Delay(500);
		GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);
		App_Delay(500);
	}
}

void TIM3_IRQHandler(void)
{
	/*如果是Update触发中断*/
	if(TIM_GetFlagStatus(TIM3,TIM_FLAG_Update) == SET)
	{
		/*清除中断标志位*/
		TIM_ClearFlag(TIM3,TIM_FLAG_Update);
		/*时间变量加一*/
		currentTick++;
	}
}

//
//@简介:延迟一段时间
//@参数:ms:要延迟的时间(单位:ms)
//
void App_Delay(uint32_t ms)
{
	/*设置延迟结束时间*/
	uint32_t expireTime = currentTick + ms;
	/*等待延迟结束*/
	while(currentTick < expireTime);
}

//创建TIM3初始化函数
void App_TIM3_TimeBaseInit(void)
{
	//#1:开启定时器3的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	//#2:配置时基单元的参数
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
	
	//#3:闭合时基单元的开关
	TIM_Cmd(TIM3,ENABLE);
	
	//#4:使能Update中断
	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
	
	//#5:配置NVIC模块
	/*声明NVIC结构变量*/
	NVIC_InitTypeDef NVIC_InitStruct;
	/*设置TIM3_IRQn中断名称*/
	NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;
	/*设置抢占优先级*/
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
	/*子优先级*/
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
	/*闭合中断开关*/
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	/*初始化NVIC*/
	NVIC_Init(&NVIC_InitStruct);
}


//创建板载LED初始化函数
void App_OnBoardLED_Init(void)
{
	/*启动GPIOC时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PC13引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	/*通用输出开漏模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PC13引脚*/
	GPIO_Init(GPIOC,&GPIO_InitStruct);
	/*熄灭板载LED*/
	GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);
}

三、输出比较

3.1.输出比较简介

中间是CCRx寄存器:

捕获比较寄存器

左边为输入捕获

外部信号通过CHx引脚输入到定时器内部,测量输入信号的周期、占空比等参数

右边为输出比较

通过定时器产生稳定性方波信号,再由CHx引脚将信号输出

3.2.基本工作原理(PWM)

PWM(Pulse Width Modulation):脉冲宽度调制

一种周期固定、占空比可调的信号,通过调节占空比,等效地调节信号的输出幅度

占空比:一个周期中,高电平占整个周期的比例

示例:使用定时器生成30%占空比的方波信号

3.3.8种工作模式

OCxRef(Output Compare x Reference):输出比较通道x参考

冻结:OCxRef保持原有的电平不变

相等有效(高电平):当CNT与CCR相等时,OCxRef输出高电平,否则为低电平

相等无效(低电平):当CNT与CCR相等时,OCxRef输出低电平,否则为高电平

翻转:当CNT与CCR相等时,电平高低切换

强制无效:OCxRef始终为低电平

强制有效:OCxRef始终为高电平

PWM模式1:当CNT < CCR时,OCxRef为高电平,否则为低电平

PWM模式2:当CNT < CCR时,OCxRef为低电平,否则为高电平

3.4.互补输出

互补输出:参考信号经过反相器与CHxN引脚相连,与正常输出的电平波形相反

示例:通过同步buck电路将12V的电压降为3.3V

3.5.极性选择

目的:灵活翻转输出电平的有效极性

四、呼吸灯实验

4.1.呼吸灯原理

蓝色Led:连接在定时器1通道1的正常输出(CH1)

红色Led:连接在定时器1通道1的互补输出(CH1N)

现象本质:让Led的亮度连续变化

y = 0.5 * (sin(2πt) + 1)

波形配置:

占空比 = 0.5 * (sin(2πt) + 1)

周期 = 1ms

4.2.初始化IO引脚

Led长脚为正极

void App_PWM_Init(void)
{
	//#1:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PA8*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	/*开启GPIOB的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	/*选择PB13引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PB13*/
	GPIO_Init(GPIOB,&GPIO_InitStruct);
}

4.3.配置时基单元

时钟:

TIM1挂在APB2总线(分频系数为1),从PCLK2(72MHz)获取时钟信号,此时倍频系数为1

所以时钟信号为72MHz

预分频器:

分辨率为1us = 1MHz,所以PSC = 71,72 / (71 + 1) = 1MHz

自动重装寄存器:

定时周期为1ms = 1us * 1000,所以ARR = 999,1us * (999 + 1)= 1ms

重复计数器:

RCR = 0,每溢出1次,产生一次update事件

void App_PWM_Init(void)
{
	//#1:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PA8*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	/*开启GPIOB的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	/*选择PB13引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PB13*/
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	//#2:配置时基单元的参数
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM1*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM1,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM1,ENABLE);
	/*使能Update中断*/
	TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
}

4.4.配置输出比较的参数

//@简介:初始化输出比较通道1的参数
//@参数:初始化参数列表
void TIM_OC1Init(TIM_TypeDef* TIM,TIM_OCInitTypeDef* TIM_OCInitStruct);
//@简介:闭合/断开MOE开关
//@参数:ENABLE(闭合) DISABLE(断开)
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx,FunctionalState NewState);

注:只有使用高级定时器时才需要闭合MOE开关

//创建初始化PWM函数
void App_PWM_Init(void)
{
	//#1:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PA8*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	/*开启GPIOB的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	/*选择PB13引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PB13*/
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	//#2:配置时基单元的参数
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM1*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM1,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM1,ENABLE);
	
	//#3:初始化输出比较
	
	/*声明输出比较结构体变量*/
	TIM_OCInitTypeDef TIM_InitStruct;
	/*设置为PWM1模式*/
	TIM_InitStruct.TIM_OCMode = TIM_OCMode_PWM1;
	/*设置互补通道为高极性*/
	TIM_InitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High;
	/*设置正常通道为高极性*/
	TIM_InitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
	/*开启互补通道开关*/
	TIM_InitStruct.TIM_OutputNState = TIM_OutputNState_Enable;
	/*开启正常通道开关*/
	TIM_InitStruct.TIM_OutputState = TIM_OutputState_Enable;
	/*设置CCR初值*/
	TIM_InitStruct.TIM_Pulse = 0;
	/*初始化通道1*/
	TIM_OC1Init(TIM1,&TIM_InitStruct);
	/*闭合MOE总开关*/
	TIM_CtrlPWMOutputs(TIM1,ENABLE);
	/*手动开启CCR预加载*/
	TIM_CCPreloadControl(TIM1,ENABLE);
}

4.5.改变PWM占空比

//@简介:设置CCR1的值
void TIM_SetCompare1(TIM_TypeDef* TIMx,uint16_t Compare1);
#include "stm32f10x.h"
#include "delay.h"
#include "math.h"

//声明初始化PWM函数
void App_PWM_Init(void);
	
int main(void)
{
	App_PWM_Init();
	while(1)
	{
		/*获取当前时间*/
		float t = GetTick() * 1.0e-3f;
		/*计算占空比*/
		float duty = 0.5* (sin(2*3.14*t) + 1);
		/*计算CCR1*/
		uint16_t ccr1 = duty * 1000;
		/*设置CCR1*/
		TIM_SetCompare1(TIM1,ccr1);
	}
}

4.6.总代码

#include "stm32f10x.h"
#include "delay.h"
#include "math.h"

//声明初始化PWM函数
void App_PWM_Init(void);
	
int main(void)
{
	App_PWM_Init();
	while(1)
	{
		/*获取当前时间*/
		float t = GetTick() * 1.0e-3f;
		/*计算占空比*/
		float duty = 0.5* (sin(2*3.14*t) + 1);
		/*计算CCR1*/
		uint16_t ccr1 = duty * 1000;
		/*设置CCR1*/
		TIM_SetCompare1(TIM1,ccr1);
	}
}


//创建初始化PWM函数
void App_PWM_Init(void)
{
	//#1:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PA8*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	/*开启GPIOB的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	/*选择PB13引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PB13*/
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	//#2:配置时基单元的参数
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM1*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM1,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM1,ENABLE);
	
	//#3:初始化输出比较
	
	/*声明输出比较结构体变量*/
	TIM_OCInitTypeDef TIM_InitStruct;
	/*设置为PWM1模式*/
	TIM_InitStruct.TIM_OCMode = TIM_OCMode_PWM1;
	/*设置互补通道为高极性*/
	TIM_InitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High;
	/*设置正常通道为高极性*/
	TIM_InitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
	/*开启互补通道开关*/
	TIM_InitStruct.TIM_OutputNState = TIM_OutputNState_Enable;
	/*开启正常通道开关*/
	TIM_InitStruct.TIM_OutputState = TIM_OutputState_Enable;
	/*设置CCR初值*/
	TIM_InitStruct.TIM_Pulse = 0;
	/*初始化通道1*/
	TIM_OC1Init(TIM1,&TIM_InitStruct);
	/*闭合MOE总开关*/
	TIM_CtrlPWMOutputs(TIM1,ENABLE);
	/*手动开启CCR预加载*/
	TIM_CCPreloadControl(TIM1,ENABLE);
}

五、输入捕获

外部信号通过CHx引脚输入到定时器内部,测量输入信号的周期、占空比等参数

5.1.输入捕获的基本原理

输入信号由一个一个的上升沿与下降沿组成

输入捕获电路可以捕捉到这些电平信号变化

当事件发生时,会发生拍照动作

计数器将当前数值存放在CCR中

脉宽 = (8 - 2)/ 1us = 6us

5.2.输入捕获的内部结构

5.3.输入滤波

由输入滤波电路组成

作用:对输入信号进行滤波

输入信号由于噪声的影响,会在波形中产生毛刺,干扰后续测量

5.4.边沿检测

由边沿检测电路与复用器组成

作用:检测输入信号的变化边沿

上升沿脉冲检测上升沿,下降沿脉冲检测下降沿

5.5.信号选择

由复位器组成

TRC:来自于从模式控制器

直接:通道信号来自于本身

间接:通道信号来自于另一个通道

交叉引用可以节省引脚:

5.6.分频器

由分频器组成

作用:出现分配系数次的上升沿才能产生事件,发生拍照动作

六、超声波测距实验 

6.1.HCSR04模块的使用方法

距离 = 声速(340m/s)* 时间 / 2

VCC:电源正

GND:

Trig:触发引脚,用于启动测量

Echo:回声引脚,用于返回脉冲

工作流程:

  • 向Trig引脚输入大于10us的脉冲信号
  • 发送器连续发送8个49KHz的超声波后
  • Echo引脚立即输出高电平
  • 接收器连续接收8个周期的回声后
  • Echo引脚立即输出低电平
  • Echo引脚上的脉冲宽度等于超声波收发时间间隔
  • 通过定时器的输入捕获来测量脉冲宽度

6.2.搭建电路

6.3.梳理思路

初始化串口:

#include "stm32f10x.h"
#include "usart.h"

//声明USART1初始化函数
void App_USART1_Init(void);
	
int main(void)
{
	App_USART1_Init();
	//测试代码
	My_USART_SendString(USART1,"Hello world. 
");
	
	while(1)
	{
	}
}

//创建USART1初始化函数
void App_USART1_Init(void)
{
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	/*声明GPIO结构*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA9引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
	/*设置复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速度为10MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
	/*初始化PA9引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	/*选择PA10引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
	/*设置输入上拉模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	/*初始化PA10引脚*/
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	/*开启USART1模块时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	/*USART结构的前置声明*/
	USART_InitTypeDef USART_InitStruct;
	/*波特率为115200*/
	USART_InitStruct.USART_BaudRate = 115200;
	/*数据位为8位*/
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;
	/*停止位为1位*/
	USART_InitStruct.USART_StopBits = USART_StopBits_1;
	/*校验方式为无*/
	USART_InitStruct.USART_Parity = USART_Parity_No;
	/*收发方向为双向*/
	USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
	/*初始化USART1*/
	USART_Init(USART1,&USART_InitStruct);
	/*闭合串口总开关*/
	USART_Cmd(USART1,ENABLE);
}

  • 对计数器CNT清零(防止CNT溢出)
  • 对CC1和CC2清零(标志位)
  • 开启定时器,闭合时基单元开关
  • 发送脉冲启动传感器
  • 等待CC1和CC2(从0变成1)
  • 关闭定时器,断开时基单元开关

6.4.初始化时基单元

分辨率:足够精细(不能取无限小)

周期:长度最大脉宽,越长越好

由于HCSR04芯片的最大测距精度最高为3mm

3mm / 340 m/s ≈ 8us

所以分辨率要小于8us,可以取1us

由于PSC、ARR、CNT、RCR都为16位寄存器

它们的值域都为0~65535

所以周期可以取65535

//创建HCSR04初始化函数
void App_HCSR04_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 65535;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM1*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
}

6.5.初始化输入捕获

注:

由于Echo引脚空闲时两边都处于低电压,所以最好配置成输入下拉模式,保证电平稳定

//创建HCSR04初始化函数
void App_HCSR04_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 65535;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM1*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	
	//#2:初始化输入捕获引脚
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*输入下拉模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
	/*初始化PA8引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
}

//创建HCSR04初始化函数
void App_HCSR04_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 65535;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM1*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	
	//#2:初始化输入捕获引脚
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*输入下拉模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
	/*初始化PA8引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#3:初始化输入捕获通道1
	
	/*声明IC结构变量*/
	TIM_ICInitTypeDef TIM_ICInitStruct;
	/*选择通道1*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获上升沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为直接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
	/*初始化通道1*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
	
	//#3:初始化输入捕获通道2
	
	/*选择通道2*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获下降沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Falling;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为间接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI;
	/*初始化通道2*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
}

6.6.编程

#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"

//声明USART1初始化函数
void App_USART1_Init(void);
//声明HCSR04初始化函数
void App_HCSR04_Init(void);

int main(void)
{
	App_USART1_Init();
	App_HCSR04_Init();
	while(1)
	{
		//#1:向CNT写0
		TIM_SetCounter(TIM1,0);
		
		//#2:向CC1和CC2写0
		TIM_ClearFlag(TIM1,TIM_FLAG_CC1);
		TIM_ClearFlag(TIM1,TIM_FLAG_CC2);
		
		//#3:开启定时器
		TIM_Cmd(TIM1,ENABLE);
		
		//#4:向Trig引脚发送10us脉冲
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
		/*延迟10us*/
		DelayUs(10);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
		
		//#5:等待CC1和CC2标志位
		while(TIM_GetFlagStatus(TIM1,TIM_FLAG_CC1) == RESET);
		while(TIM_GetFlagStatus(TIM1,TIM_FLAG_CC2) == RESET);
		
		//#6:关闭定时器
		TIM_Cmd(TIM1,DISABLE);
		
		/*读取CCR1的值*/
		uint16_t ccr1 = TIM_GetCapture1(TIM1);
		/*读取CCR2的值*/
		uint16_t ccr2 = TIM_GetCapture2(TIM1);
		/*计算距离:(CCR1 - CCR2)* 分辨率 * 声速 / 2*/
		float distance = (ccr2 - ccr1) * 1.0e-6f * 340.0f / 2;
		/*打印结果*/
		My_USART_Printf(USART1,"distance = %.4f
",distance);
		/*延迟100ms*/
		Delay(100);
	}
}

//创建USART1初始化函数
void App_USART1_Init(void)
{
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	/*声明GPIO结构*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA9引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
	/*设置复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速度为10MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
	/*初始化PA9引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	/*选择PA10引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
	/*设置输入上拉模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	/*初始化PA10引脚*/
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	/*开启USART1模块时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	/*USART结构的前置声明*/
	USART_InitTypeDef USART_InitStruct;
	/*波特率为115200*/
	USART_InitStruct.USART_BaudRate = 115200;
	/*数据位为8位*/
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;
	/*停止位为1位*/
	USART_InitStruct.USART_StopBits = USART_StopBits_1;
	/*校验方式为无*/
	USART_InitStruct.USART_Parity = USART_Parity_No;
	/*收发方向为双向*/
	USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
	/*初始化USART1*/
	USART_Init(USART1,&USART_InitStruct);
	/*闭合串口总开关*/
	USART_Cmd(USART1,ENABLE);
}

//创建HCSR04初始化函数
void App_HCSR04_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 65535;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM1*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	
	//#2:初始化输入捕获引脚
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*输入下拉模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
	/*初始化PA8引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#3:初始化输入捕获通道1
	
	/*声明IC结构变量*/
	TIM_ICInitTypeDef TIM_ICInitStruct;
	/*选择通道1*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获上升沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为直接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
	/*初始化通道1*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
	
	//#3:初始化输入捕获通道2
	
	/*选择通道2*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获下降沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Falling;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为间接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI;
	/*初始化通道2*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
	
	//#4:初始化Trig引脚
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	/*选择PA0引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	/*设置通用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	/*最大输出速度为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PA0引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
}

七、从模式控制器

7.1.什么是从模式控制器

TRGI(Trigger Input):触发输入

相当于红外接收头,接收命令

从而控制时基单元,做出指定动作

控制定时器开关、控制计数器清零、增减

TRGO(Trigger Output):触发输出

相当于遥控器,发送命令,将定时器内部事件输出

从而控制另外一个定时器(定时器的级联)

或者控制其他模块的采样时机(ADC模块)

7.2.8种从模式

从模式:通过TRGI接收控制信号,用来控制时基单元,做出相应动作

(定时器为被控对象)

8种从模式

从模式禁止:不通过TRGI接收控制信号

编码器模式1:与编码器有关

编码器模式2:与编码器有关

编码器模式3:与编码器有关

复位模式:TRGI上升沿对CNT清零

门模式:TRGI高、总开关闭合;TRGI低、总开关断开

触发模式:TRGI上升沿闭合总开关

外部时钟模式1:TRGI作为时基单元的时钟来源

7.3.8种主模式

8种主模式:

复位:手动产生Update事件时,TRGO输出脉冲

使能:总开关闭合,TRGO为0;总开关打开,TRGO为1

Update:每个update事件,TRGO输出脉冲

比较脉冲:与输出比较通道1有关

比较OC1REF:OC1REF作为TRGO

比较OC2REF:OC2REF作为TRGO

比较OC3REF:OC3REF作为TRGO

比较OC4REF:OC4REF作为TRGO

7.4.定时器级联的例子 

让TIM1、TIM2、TIM3同时启停

当TIM1开关闭合时,TIM2、TIM3也跟着闭合

当TIM1开关断开时,TIM2、TIM3也跟着断开

将TIM1的TRGO设置为使能模式

将TIM2、TIM3的TRGI设置为门模式

将TIM1的TRGO与TIM2、TIM3的TRGI相连

7.5.定时器同时启停的例子

八、PWM参数测量原理

捕获PWM信号的周期与占空比

8.1.参考手册的定时器结构框图

参考手册13:高级定时器(TIM1、TIM8功能最全)

8.2.输入捕获节点的名字

TI(Timer Input):定时器输入

F(Filtered):滤波后的

P(Polarized):选择了极性的

示例:

TI1FP1:输入信号从定时器通道1输入进来,经过了滤波与极性选择后,给通道1使用

TI2FP1:输入信号从定时器通道2输入进来,经过了滤波与极性选择后,给通道1使用

8.3.TRGI的来源

TI1FP1:通道1直接信号

TI2FP2:通道2直接信号

TIMx_ETR:外部参考信号(实际使用较少)

TRC:ITR0~ITR3(其他定时器的TRGO信号)、TI1F_ED(实际使用较少)

TIM2和TIM3都为通用定时器:

TIM2的ITR0表示TIM1的TRGO

TIM2的ITR1表示TIM8的TRGO

TIM2的ITR2表示TIM3的TRGO

TIM2的ITR3表示TIM4的TRGO

所以TIM2选择ITR0

TIM3的ITR0表示TIM1的TRGO

TIM3的ITR0表示TIM2的TRGO

TIM3的ITR0表示TIM5的TRGO

TIM3的ITR0表示TIM4的TRGO

所以TIM3选择ITR0

8.4.PWM参数测量原理

通道1捕获上升沿,通道2捕获下降沿

TRGI选择复位模式,TRGI的信号来源为TI1FP1

检测到上升沿,CCR1存放当前数值,随后计数清零

检测到下降沿,CCR2存放当前数值,继续计数

再次检测到上升沿,CCR1存放当前数值,计数清零

其中CCR2是一个周期中高电平时间

CCR1 - CCR2 是一个周期中低电平时间

九、PWM参数测量实验

9.1.实验原理

TIM3通道1产生PWM信号

TIM1通道1接收PWM信号

将参数值输出到USART1

初始化串口:

#include "stm32f10x.h"
#include "usart.h"

//声明串口初始化函数
void App_USART1_Init(void);

int main(void)
{
	App_USART1_Init();
	
	My_USART_SendString(USART1,"你好世界");
	
	while(1)
	{
	}
}

//创建串口初始化函数
void App_USART1_Init(void)
{
	//#1:初始化IO引脚 PA9 AF_PP
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	/*选择PA9引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
	/*设置复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速度为10MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
	/*初始化PA9引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#2:配置USART1参数
	
	/*开启USART1模块时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	/*USART结构的前置声明*/
	USART_InitTypeDef USART_InitStruct = {0};
	/*波特率为115200*/
	USART_InitStruct.USART_BaudRate = 115200;
	/*无硬件流控*/
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	/*数据位为8位*/
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;
	/*停止位为1位*/
	USART_InitStruct.USART_StopBits = USART_StopBits_1;
	/*校验方式为无*/
	USART_InitStruct.USART_Parity = USART_Parity_No;
	/*收发方向为发送方向*/
	USART_InitStruct.USART_Mode = USART_Mode_Tx;
	/*初始化USART1*/
	USART_Init(USART1,&USART_InitStruct);
	/*闭合串口总开关*/
	USART_Cmd(USART1,ENABLE);
}

9.2.产生PWM信号

​#include "stm32f10x.h"
#include "usart.h"

//声明串口初始化函数
void App_USART1_Init(void);
//声明TIM3初始化函数
void App_TIM3_Init(void);

int main(void)
{
	App_USART1_Init();
	
	App_TIM3_Init();

    TIM_SetCompare1(TIM3,200);
	
	while(1)
	{
	}
}

//创建TIM3初始化函数
void App_TIM3_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器3的时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM3,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM3,ENABLE);
	
	//#2:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA6引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PA6引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#3:初始化输出比较
	
	/*声明输出比较结构体变量*/
	TIM_OCInitTypeDef TIM_InitStruct;
	/*设置为PWM1模式*/
	TIM_InitStruct.TIM_OCMode = TIM_OCMode_PWM1;
	/*设置正常通道为高极性*/
	TIM_InitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
	/*开启正常通道开关*/
	TIM_InitStruct.TIM_OutputState = TIM_OutputState_Enable;
	/*设置CCR初值*/
	TIM_InitStruct.TIM_Pulse = 0;
	/*初始化通道1*/
	TIM_OC1Init(TIM3,&TIM_InitStruct);
	/*闭合MOE总开关*/
	TIM_CtrlPWMOutputs(TIM3,ENABLE);
	/*手动开启CCR预加载*/
	TIM_CCPreloadControl(TIM3,ENABLE);
}

9.3.初始化时基单元

//创建TIM1初始化函数
void App_TIM1_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 65535 ;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM1,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM1,ENABLE);
}

9.4.初始化输入捕获

//创建TIM1初始化函数
void App_TIM1_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 65535 ;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM1,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM1,ENABLE);
	
	//#2:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*输入下拉模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
	/*初始化PA8引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#3:初始化输入捕获通道1
	
	/*声明IC结构变量*/
	TIM_ICInitTypeDef TIM_ICInitStruct;
	/*选择通道1*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获上升沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为直接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
	/*初始化通道1*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
	
	//#3:初始化输入捕获通道2
	
	/*选择通道2*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获下降沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Falling;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为间接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI;
	/*初始化通道2*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
}

9.5.初始化模式控制器

//创建TIM1初始化函数
void App_TIM1_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 65535 ;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM1,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM1,ENABLE);
	
	//#2:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*输入下拉模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
	/*初始化PA8引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#3:初始化输入捕获通道1
	
	/*声明IC结构变量*/
	TIM_ICInitTypeDef TIM_ICInitStruct;
	/*选择通道1*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获上升沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为直接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
	/*初始化通道1*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
	
	//#3:初始化输入捕获通道2
	
	/*选择通道2*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获下降沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Falling;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为间接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI;
	/*初始化通道2*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
	
	//#4:初始化从模式控制器
	
	/*选择TI1FP1作为TRGI信号源*/
	TIM_SelectInputTrigger(TIM1,TIM_TS_TI1FP1);
	/*TRGI设为复位模式*/
	TIM_SelectSlaveMode(TIM1,TIM_SlaveMode_Reset);
}

9.6.测量PWM参数

#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"

//声明串口初始化函数
void App_USART1_Init(void);
//声明TIM3初始化函数
void App_TIM3_Init(void);
//声明TIM1初始化函数
void App_TIM1_Init(void);

int main(void)
{
	App_USART1_Init();
	
	App_TIM3_Init();
	
	App_TIM1_Init();
	
	TIM_SetCompare1(TIM3,200);
	
	while(1)
	{
		//#1:清除Trigger标志位
		TIM_ClearFlag(TIM1,TIM_FLAG_Trigger);
		
		//#2:等待Trigger标志位从0变成1
		while(TIM_GetFlagStatus(TIM1,TIM_FLAG_Trigger) == RESET);
		
		//#3:计算
		uint16_t ccr1 = TIM_GetCapture1(TIM1);
		uint16_t ccr2 = TIM_GetCapture2(TIM1);
		
		float period = ccr1 * 1.0e-6f * 1.0e3f;
		float duty = (float)ccr2 / ccr1 * 100.0f;
		
		My_USART_Printf(USART1,"周期 = %.3fms,占空比 = %.2f%%
",period,duty);
		
		Delay(100);
	}
}

//创建串口初始化函数
void App_USART1_Init(void)
{
	//#1:初始化IO引脚 PA9 AF_PP
	
	/*开启GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	/*选择PA9引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
	/*设置复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速度为10MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
	/*初始化PA9引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#2:配置USART1参数
	
	/*开启USART1模块时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	/*USART结构的前置声明*/
	USART_InitTypeDef USART_InitStruct = {0};
	/*波特率为115200*/
	USART_InitStruct.USART_BaudRate = 115200;
	/*无硬件流控*/
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	/*数据位为8位*/
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;
	/*停止位为1位*/
	USART_InitStruct.USART_StopBits = USART_StopBits_1;
	/*校验方式为无*/
	USART_InitStruct.USART_Parity = USART_Parity_No;
	/*收发方向为发送方向*/
	USART_InitStruct.USART_Mode = USART_Mode_Tx;
	/*初始化USART1*/
	USART_Init(USART1,&USART_InitStruct);
	/*闭合串口总开关*/
	USART_Cmd(USART1,ENABLE);
}

//创建TIM3初始化函数
void App_TIM3_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器3的时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM3,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM3,ENABLE);
	
	//#2:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA6引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
	/*复用输出推挽模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	/*最大输出速率为2MHz*/
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	/*初始化PA6引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#3:初始化输出比较
	
	/*声明输出比较结构体变量*/
	TIM_OCInitTypeDef TIM_InitStruct;
	/*设置为PWM1模式*/
	TIM_InitStruct.TIM_OCMode = TIM_OCMode_PWM1;
	/*设置正常通道为高极性*/
	TIM_InitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
	/*开启正常通道开关*/
	TIM_InitStruct.TIM_OutputState = TIM_OutputState_Enable;
	/*设置CCR初值*/
	TIM_InitStruct.TIM_Pulse = 0;
	/*初始化通道1*/
	TIM_OC1Init(TIM3,&TIM_InitStruct);
	/*闭合MOE总开关*/
	TIM_CtrlPWMOutputs(TIM3,ENABLE);
	/*手动开启CCR预加载*/
	TIM_CCPreloadControl(TIM3,ENABLE);
}

//创建TIM1初始化函数
void App_TIM1_Init(void)
{
	//#1:初始化时基单元
	
	/*开启定时器1的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	/*声明TIM结构体变量*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	/*设置预分频系数*/
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	/*设置自动重装寄存器*/
	TIM_TimeBaseInitStruct.TIM_Period = 65535 ;
	/*设置计数方向*/
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	/*设置重复计数器*/
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	/*初始化TIM3*/
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);	
	/*手动开启ARR预加载*/
	TIM_ARRPreloadConfig(TIM1,ENABLE);
	/*闭合时基单元的开关*/
	TIM_Cmd(TIM1,ENABLE);
	
	//#2:初始化IO引脚
	
	/*开启GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*声明GPIO结构变量*/
	GPIO_InitTypeDef GPIO_InitStruct;
	/*选择PA8引脚*/
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	/*输入下拉模式*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
	/*初始化PA8引脚*/
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//#3:初始化输入捕获通道1
	
	/*声明IC结构变量*/
	TIM_ICInitTypeDef TIM_ICInitStruct;
	/*选择通道1*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获上升沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为直接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
	/*初始化通道1*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
	
	//#3:初始化输入捕获通道2
	
	/*选择通道2*/
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;
	/*不使用输入滤波器*/
	TIM_ICInitStruct.TIM_ICFilter = 0;
	/*捕获下降沿*/
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Falling;
	/*分频系数为1*/
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	/*复用器为间接*/
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI;
	/*初始化通道2*/
	TIM_ICInit(TIM1,&TIM_ICInitStruct);
	
	//#4:初始化从模式控制器
	
	/*选择TI1FP1作为TRGI信号源*/
	TIM_SelectInputTrigger(TIM1,TIM_TS_TI1FP1);
	/*TRGI设为复位模式*/
	TIM_SelectSlaveMode(TIM1,TIM_SlaveMode_Reset);
}

本文地址:https://www.yitenyun.com/7117.html

搜索文章

Tags

#飞书 #人工智能 #AI #语言模型 #服务器 #大模型 #ai #ai大模型 #agent #python #pip #conda #log4j #ollama #运维 #微信 #私有化部署 #github #信息与通信 #自然语言处理 #rpa #实时互动 #学习 #产品经理 #AI大模型 #大模型学习 #大模型教程 #AI编程 #linux #云计算 #云原生 #飞牛nas #fnos #kylin #docker #arm #远程工作 #企业微信 #AI办公 #智能助手 #ios面试 #ios弱网 #断点续传 #ios开发 #objective-c #ios #ios缓存 #ssh #Trae #IDE #AI 原生集成开发环境 #Trae AI #fastapi #html #css #mongodb #数据库 #算法 #数据结构 #Telegram机器人 #ClawdBot #多模态翻译 #大模型推理 #银河麒麟高级服务器操作系统安装 #银河麒麟高级服务器V11配置 #设置基础软件仓库时出错 #银河麒高级服务器系统的实操教程 #生产级部署银河麒麟服务系统教程 #Linux系统的快速上手教程 #堡垒机 #安恒明御堡垒机 #windterm #web安全 #安全 #开发语言 #php #网络安全 #就业指南 #网络 #tcp/ip #深度学习 #vscode #ubuntu #gitee #notepad++ #PyTorch #模型训练 #星图GPU #rag #langchain #分布式 #架构 #配置中心 #SpringCloud #Apollo 香港站群服务器 多IP服务器 香港站群 站群服务器 #kubernetes #笔记 #平面 #容器 #学习方法 #YOLO #java #spring boot #maven #spring #ARM服务器 # GLM-4.6V # 多模态推理 #大语言模型 #长文本处理 #GLM-4 #Triton推理 #AIGC #开源 #大数据 #职场和发展 #程序员创富 #llama #opencv #神经网络 #golang #数据结构与算法 #科技 #微服务 #Oauth2 #mysql #分库分表 #垂直分库 #水平分表 #雪花算法 #分布式ID #跨库查询 #自动化 #ansible #数学建模 #音视频 #华为云 #部署上线 #动静分离 #Nginx #新人首发 #流程图 #论文阅读 #信息可视化 #大模型入门 #ide #前端 #javascript #hadoop #hbase #hive #zookeeper #spark #kafka #flink #pytorch #http #mcp #mcp server #AI实战 #springboot #pycharm #lstm #分类 #低代码 #爬虫 #gemini #gemini国内访问 #gemini api #gemini中转搭建 #Cloudflare #毕业设计 #CFD #C++ #Reactor #阿里云 #ddos #visual studio #程序员 #node.js #Agent #RTP over RTSP #RTP over TCP #RTSP服务器 #RTP #TCP发送RTP #FRP #区块链 #测试用例 #生活 #MobaXterm #开源软件 #sql #agi #pjsip #centos #测试工具 #能源 #flutter #鸿蒙 #物联网 #websocket #SSM 框架 #孕期健康 #产品服务推荐 #推荐系统 #用户交互 #java-ee #harmonyos #华为 #项目 #高并发 #OCR #文档识别 #DeepSeek-OCR-2 #信创适配 #机器学习 #aws #转行 #知识图谱 #windows #进程控制 #nginx #FaceFusion # Token调度 # 显存优化 #重构 #计算机视觉 #openHiTLS #TLCP #DTLCP #密码学 #商用密码算法 #网络协议 #cpolar #内网穿透 #Linux #TCP #c++ #线程 #线程池 #RAGFlow #DeepSeek-R1 #MCP #MCP服务器 #Windows 更新 #面试 #servlet #git #经验分享 #安卓 #fabric #postgresql #word #umeditor粘贴word #ueditor粘贴word #ueditor复制word #ueditor上传word图片 #风控模型 #决策盲区 #多个客户端访问 #IO多路复用 #回显服务器 #TCP相关API #Ansible # 自动化部署 # VibeThinker #搜索引擎 #导航网 #矩阵 #线性代数 #AI运算 #向量 #分阶段策略 #模型协议 #scrapy #电脑 #https #iventoy #VmWare #OpenEuler #ai agent #ai大小模型 #小模型 #开源小模型 #8b模型 #国产大模型 #SOTA #机器人 #自动化巡检 #蓝桥杯 #程序设计 #计算机毕业设计 #程序定制 #源码 #课程设计 #大作业 #RAG #RAG调优 #RAG系统 #召回 #单片机 #stm32 #嵌入式硬件 #电脑故障 #文件系统 #unity #游戏引擎 #c# #unitask #驱动开发 #HCIA-Datacom #H12-811 #题库 #最新题库 #vue.js #论文 #毕设 #后端 #鸿蒙PC #腾讯云 #mvp #个人开发 #设计模式 #android #大模型面试 #c语言 #链表 #swiftui #swift #mobaxterm #vue上传解决方案 #vue断点续传 #vue分片上传下载 #vue分块上传下载 #开源社区 #国产基础软件 #操作系统 #AI框架 #Rust #FL Studio #FLStudio #FL Studio2025 #FL Studio2026 #FL Studio25 #FL Studio26 #水果软件 #国企混改 #国企混改咨询 #国企混改战略规划 #GPU #曦望 #内容运营 #产品运营 #正则 #正则表达式 #qt #计算机网络 #redis #nosql #ESP32 #开发环境搭建 #bytebase #目标检测 #pyqt #单目测距 #速度估计 #pyqt界面 #注意力机制 #dify #360AI图片精简版 #看图工具 #电脑看图工具 #360看图工具 #AI看图工具 #性能优化 #vllm #缓存 #Conda # 私有索引 # 包管理 #rocketmq #硬件工程 #程序人生 #科研 #博士 #LabVIEW #光谱仪 #串口通信 #AQ6370 #压枪 #数信院生信服务器 #Rstudio #生信入门 #生信云服务器 #iBMC #UltraISO #spring cloud #json #ci/cd #jenkins #gitlab #Redisson #处理器模块 #现货库存 #价格优惠 #PM864AK01 #3BSE018161R1 #PLC #控制器模块 #ecmascript #elementui #serverless #Harbor #jvm #学习笔记 #jdk #microsoft #le audio #蓝牙 #低功耗音频 #通信 #连接 #内存治理 #django #进程 #超算服务器 #算力 #高性能计算 #仿真分析工作站 #DeepSeek #服务器繁忙 #lvs #负载均衡 #软件构建 #PyCharm # 远程调试 # YOLOFuse #numpy #scikit-learn #matplotlib #FutureWarning #Canal #ui #团队开发 #墨刀 #figma #jar #chrome #LangFlow #智能体 #牛客周赛 #LLM #策略模式 #系统安全 #udp #matlab #支持向量机 #散列表 #哈希算法 #sqlmap #文心一言 #AI智能体 #svn #APM #AudioPolicy #音频策略 #软件工程 #时序数据库 #gitea #mcu #企业开发 #ERP #项目实践 #.NET开发 #C#编程 #编程与数学 #服务器架构 #AI推理芯片 #华为od #华为od机考真题 #华为od机试真题 #华为OD上机考试真题 #华为OD机试双机位C卷 #华为OD上机考试双机位C卷 #华为ODFLASH坏块监测系统 #leetcode #jetty #uni-app #微信小程序 #小程序 #jmeter #功能测试 #软件测试 #自动化测试 #ESXi #儿童书籍 #儿童诗歌 #童话故事 #经典好书 #儿童文学 #好书推荐 #经典文学作品 #高仿永硕E盘的个人网盘系统源码 #新浪微博 #前端框架 #Springboot3.0 #go #CISSP #CISSP考点 #信息安全 #CISSP哪里考 #公众号:厦门微思网络 #+微信号:xmweisi #autosar #数据分析 #数据挖掘 #GEO服务 #mybatis #后端 #ssl #flask #AI写作 #设备驱动 #芯片资料 #网卡 #react.js #汽车 #数字化转型 #实体经济 #中小企业 #商业模式 #软件开发 #青蓝送水模式 #创业干货 #vim #gcc #yum #ProCAST2025 #ProCast #脱模 #顶出 #应力计算 #铸造仿真 #变形计算 #推荐算法 #游戏 #shell #CPU利用率 #酒店客房管理系统 #web #webdav #stl #dubbo #2026年美赛C题代码 #2026年美赛 #select #TRO #TRO侵权 #TRO和解 #typescript #银河麒麟操作系统 #信创 #国产化 #godot #全排列 #回溯 #剪枝 #STJ算法 #建造者模式 #智能家居 #FTP服务器 #边缘计算 #线性回归 #嵌入式 #b/s架构 #ssm #移动学习平台 #防排烟监控 #消防风机一体化 #BA楼宇自控 #DDC控制器 #IBMS集成系统 #diskinfo # TensorFlow # 磁盘健康 #命令模式 #鸭科夫 #逃离鸭科夫 #鸭科夫联机 #鸭科夫异地联机 #开服 #google #search #智能制造 #供应链管理 #工业工程 #java大文件上传 #java大文件秒传 #java大文件上传下载 #java文件传输解决方案 #es安装 #prometheus #系统架构 #架构师 #软考 #系统架构师 #信奥赛 #提高组 #csp-s #初赛 #真题 #题解 #Ubuntu服务器 #硬盘扩容 #命令行操作 #VMware #SSH # ProxyJump # 跳板机 #dreamweaver #css3 #三种参数 #参数的校验 #fastAPI #pdf #excel #肿瘤相关巨噬细胞 #CXCL5 #信号通路 #胃癌 #mTOR #乐备实 #labex #同步WebServer服务器 #ESP32网页服务器 #轻量级http服务器 #ESP32物联网 #社科数据 #数据统计 #经管数据 #数据仓库 #Dell #PowerEdge620 #内存 #硬盘 #RAID5 #OBC #visual studio code #postman #easyui #math #homework #深度优先 #远程连接 #DFS #whisper #我的世界 #游戏私服 #云服务器 #虚幻 #ue5 #openclaw #实在Agent #全能视频处理软件 #视频裁剪工具 #视频合并工具 #视频压缩工具 #视频字幕提取 #视频处理工具 #职场发展 #ISP Pipeline #行缓冲 #wsl #L2C #勒让德到切比雪夫 #创业创新 #论文笔记 #PowerBI #企业 #压力测试 #xss #selenium #SSE #transformer #计算机 #连锁药店 #连锁店 #数列 #数学 #数论 #洛谷 #SQL #编辑器 #wpf #Android #Bluedroid #chatgpt #无人机 #安全架构 #AI大模型应用开发 #ffmpeg #数字营销 #seo #本地部署 #vLLM #DS随心转 #钉钉 #逻辑回归 #Buck #NVIDIA #交错并联 #DGX #Java面试 #Java程序员 #后端开发 #Spring #单元测试 #娱乐 #3d #健康医疗 #金融 #教育电商 #媒体 #prompt #汇编 #BIOS中断 #防毒口罩 #防尘口罩 #七年级上册数学 #有理数 #有理数的加法法则 #绝对值 #SEO #arm开发 #敏捷流程 #wps #思维模型 #认知框架 #认知 #macos #全栈 #广播 #组播 #并发服务器 #powerpoint #Com #IPMI #模型微调 #其他 #SEO优化 #MIMO #OFDM #技术原理 #通信算法 #智慧校园一体化平台 #智慧校园管理系统 #合肥自友科技-智慧校园 #智慧校园源头厂家 #智慧校园软件供应商 #智慧校园平台服务商 #高性价比智慧校园系统 #GNC #控制 #姿轨控 #游戏美术 #技术美术 #游戏策划 #游戏程序 #用户体验 #cnn #零售 #laravel #自动驾驶 #Java生成PDF #Freemarker转PDF #PDFBox转图片 #HTML转PDF乱码解决 #rpc #protobuf #googlecloud #具身智能 #发展心理学 #运动控制 #内在动机 #镜像神经元 #交叉学科 #企业架构治理 #电力企业IT架构 #IT架构设计 #LangGraph #sklearn #openresty #lua ##程序员和算法的浪漫 #echarts #语义检索 #文本向量化 #GTE-Pro #企业AI #电商 #js逆向 #逆向 #混淆 #计算机现代史 #oracle #android-studio #android studio #android runtime #阻塞队列 #生产者消费者模型 #服务器崩坏原因 #漏洞 #数据安全 #注入漏洞 #测试覆盖率 #可用性测试 #智能体从0到1 #新手入门 #设计规范 #SAM3 #信号处理 #目标跟踪 #KMP #Modbus-TCP #RAID #磁盘 #系统管理 #服务 #labview #集成测试 #DisM++ # 系统维护 #打卡 #计算机英语翻译 # Triton # 高并发 #mmap #nio #adb #rust #爱心代码 #表白代码 #爱心 #tkinter #情人节表白代码 #测评 #YOLO26 #YOLO11 #MapGIS #云服务 #云门户 #IGServer #车辆排放 #bash #高考 #企业级存储 #网络设备 #就业 #CNAS #CMA #程序文件 #STL #string #笔试 #Playbook #AI服务器 #tomcat #firefox #海外服务器安装宝塔面板 #list #智能路由器 #材料工程 #数码相机 #智能电视 #sglang #fastmcp #智能手机 #语义搜索 #嵌入模型 #Qwen3 #AI推理 #AI运维 #Clawdbot #企业微信集成 #DevOps自动化 #pipeline #Transformers #NLP #贪心算法 #Tetrazine-Acid #1380500-92-4 #阳台种菜 #园艺手扎 #Gemini #Nano Banana Pro #sqlserver #ZeroTermux #宝塔面板 #移动服务器 #Linux环境 #html5 #状态模式 #r-tree #多线程 #数组 #性能调优策略 #双锁实现细节 #动态分配节点内存 #vision pro #私域运营 #流量运营 #vue #vue3 #天地图 #403 Forbidden #天地图403错误 #服务器403问题 #天地图API #部署报错 #考研 #GB/T4857 #GB/T4857.17 #GB/T4857测试 #omv8 #树莓派 #nas #图像分类 #图像分割 #yolo26算法 #6G #太赫兹 #无线通信 #频谱 #无线 #Chatgpt #clawdbot #QQbot #QQ #AI产品经理 #大模型开发 #twitter #Java #Spring Boot #蓝耘智算 #语音识别 #统信UOS #搜狗输入法 #gpu算力 #算法笔记 #Redis #分布式锁 #tcp/ip #智能路由器 #JavaScript #osg #漏洞挖掘 #Exchange #usb #通信协议 #放大电路 #abtest #IndexTTS2 # 阿里云安骑士 # 木马查杀 #银河麒麟 #人大金仓 #Kingbase #百度 #百度文库 #爱企查 #旋转验证码 #验证码识别 #图像识别 #react native #Smokeping #ssh登录 #聚类 #TCP服务器 #语音控制 #高品质会员管理系统 #收银系统 #同城配送 #最好用的电商系统 #最好用的系统 #推荐的前十系统 #JAVA PHP 小程序 #麒麟 #单例模式 #TURN # WebRTC # HiChatBox #apache #梁辰兴 #传输连接管理 #计算机网络基础 #SSH保活 #Miniconda #远程开发 #everything #synchronized #锁 #reentrantlock #gpio #esp32 arduino #排序算法 #idea #todesk #eureka #KMS 激活 #windows11 #系统修复 #企业存储 #RustFS #对象存储 #高可用 #运营 #测试流程 #金融项目实战 #P2P #结构体 #门禁 #读卡器 #梯控 #门禁一卡通 #门禁读卡器 #梯控读卡器 #IC卡读卡器 #fpga开发 #Moltbot #2026AI元年 #年度趋势 # CUDA #算法备案 #DHCP #跳槽 #业界资讯 #asp.net #扩展屏应用开发 #前端界面 #mvc #asp.net大文件上传 #asp.net大文件上传下载 #asp.net大文件上传源码 #ASP.NET断点续传 #LoRA # RTX 3090 # lora-scripts #window10 #window11 #病毒 #DCOM进程 #系统进程资源占用高 #收银台开源 #收银台接口 #东方仙盟 #仙盟创梦IDE #商业开源 #Chat平台 #ARM架构 #windbg分析蓝屏教程 #jupyter #vnstat #监控 #powerbi #Moltbook #Cpolar #国庆假期 #服务器告警 #WT-2026-0001 #QVD-2026-4572 #smartermail #SSH代理转发 #AI聊天机器人 #隐私合规 #网络安全保险 #法律风险 #风险管理 #求职招聘 #copilot #容斥原理 #旅游推荐管理系统 #旅游攻略 #源代码管理 #ai编程 #京东云 #elasticsearch #版本控制 #Git入门 #开发工具 #代码托管 #svm #amdgpu #kfd #ROCm #grafana #研发管理 #禅道 #禅道云端部署 #计算几何 #斜率 #方向归一化 #叉积 #微PE #硬盘克隆 #DiskGenius #winscp #.net #CCE #Dify-LLM #Flexus #HeyGem # 数字人系统 # 远程部署 #GESP4级 #GESP四级 #sort #滑动窗口 #字符串 #sql注入 #Keycloak #Quarkus #AI编程需求分析 #risc-v #安全威胁分析 #spine #Deepseek #gpt-3 #若依 #quartz #框架 #bootstrap #提词器 #芦笋提词器 #中间件 #图书馆 #自习室 #可信计算技术 #迁移重构 #代码迁移 #Ubuntu #Steam #饥荒联机版 #iphone #CPU #监测 #ShaderGraph #图形 #Taiji #KMS激活 #以太网温湿度气体多参量传感器 #以太网多合一传感器 #以太网环境监测终端 #可定制气体监测模组 #epoll #.netcore #部署 # IndexTTS 2.0 # 自动化运维 #intellij-idea #database #儿童AI #图像生成 #Qwen #AI论文写作工具 #学术写作辅助 #论文创作效率提升 #AI写论文实测 #wordpress #雨云 #文字检测 # GLM-4.6V-Flash-WEB # AI部署 #LED #设备树 #GPIO #DooTask #n8n解惑 #sentinel #SSH Agent Forwarding # PyTorch # 容器化 #长文本理解 #glm-4 #推理部署 #Cesium #交互设计 #智能避障 #proc #homelab #Lattepanda #Jellyfin #Plex #Emby #Kodi #cocoa #I/O #Lenyiin #SIP服务器 #语音服务器 #VoIP #SIP协议 #gpt #http头信息 #sqlite # 服务器IP # 端口7860 #建筑缺陷 #红外 #数据集 #启发式算法 #Kylin-Server #国产操作系统 #服务器安装 #智能化测试 #质量效能 #skills #playwright #持续测试 #职业和发展 #未加引号服务路径 #戴尔服务器 #戴尔730 #装系统 #webrtc #junit #泛型 #接口 #抽象类 #面向对象设计 #clickhouse #大模型呼叫 #外呼系统 #AI外呼 #外呼系统推荐 #智能客服 #外呼 #遛狗 #muduo #EventLoop #eclipse #投标 #标书制作 #claude #插入排序 #CUDA #Triton #bond #服务器链路聚合 #网卡绑定 #交互 #Fun-ASR # 语音识别 # WebUI #2026美国大学生数学建模 #2026美赛 #美赛ICM #美赛ICM Problem F #ICM赛题F #MATLAB #nmodbus4类库使用教程 #汇智网盘系统 #企业级云存储 #智能协作 #Streamlit #ajax #运维开发 #春秋云境 #CVE-2020-5515 #并发 #企业微信机器人 #本地大模型 #uv #铬锐特 #uv胶 #紫外线胶水 #光固化胶水 #胶粘剂 #数据采集 #tensorflow #azure #embedding #1024程序员节 #建站 #AI-native #dba #社交智慧 #职场生存 #系统思维 #身体管理 #商务宴请 #拒绝油腻 #清醒日常 #vivado license #WIN32汇编 #非标机械设计 #weston #x11 #x11显示服务器 #openvino #手机检测 #课堂手机检测 #超算中心 #PBS #lsf #反向代理 #守护进程 #复用 #screen #文本生成 #AI助手 #幼儿园 #园长 #幼教 #余行补位 #意义对谈 #余行论 #领导者定义计划 # 双因素认证 #智能合约 #STUN # TURN # NAT穿透 #Docker #rabbitmq #智慧社区 #管理系统 #原型模式 #空间计算 #制造 #带宽 #流量 #大带宽 #网络攻击模型 #ipmitool #BMC #鸿蒙系统 #车载系统 #Claude #用户运营 #榛樿鍒嗙被 #我的世界服务器搭建 #minecraft #OpenAI #故障 #优化 #paddleocr #生信 #pencil #pencil.dev #设计 #V11 #kylinos #大模型应用 #API调用 #PyInstaller打包运行 #服务端部署 #强化学习 #策略梯度 #REINFORCE #蒙特卡洛 #双指针 #CSDN #电气工程 #C# #考试系统 #在线考试 #培训考试 #考试练习 #全链路优化 #实战教程 #AI生成 # outputs目录 # 自动化 #轻量大模型 #AB包 #m3u8 #HLS #移动端H5网页 #APP安卓苹果ios #监控画面 直播视频流 #流媒体 #NAS #飞牛NAS #NVR #EasyNVR #C₃₂H₄₅N₇O₁₁S₂ #Mycat #Tracker 服务器 #响应最快 #torrent 下载 #2026年 #Aria2 可用 #迅雷可用 #BT工具通用 #vuejs #学工管理系统 #学工一体化平台 #学工软件二次开发 #学工平台定制开发 #学工系统服务商 #学工系统源头厂家 #智慧校园学工系统 #AirDrop #Puppet # IndexTTS2 # TTS # 显卡驱动备份 #聊天小程序 #cursor #uvicorn #uvloop #asgi #event #三维 #3D #三维重建 #信令服务器 #Janus #MediaSoup #kmeans #TensorRT # 推理优化 #seata #TC/TM/RM #Jetty # CosyVoice3 # 嵌入式服务器 #CVE-2025-61686 #路径遍历高危漏洞 #x-cmd #doubao #kimi #zhipu #claude-code #摩尔线程 #Llama-Factory # 大模型推理 #直流无刷电机 #六步换相 #5G #C语言 #标准IO #函数接口 #小白 #一人公司 #独立开发者 #OSS #分片上传 #断电续传 #vue2 #需求分析 #r语言-4.2.1 #r语言 #语言 # GPU租赁 # 自建服务器 #健身房预约系统 #健身房管理系统 #健身管理系统 #高级IO #MinIO服务器启动与配置详解 #ueditor导入word #ueditor导入pdf #代理 #平板 #交通物流 #智能硬件 # 服务器IP访问 # 端口映射 #贝叶斯优化深度学习 #struts #markdown #GitPuk #国产开源免费代码管理工具 #Arbess #cicd工具 #一文上手 #SSH复用 # Miniconda # 远程开发 #1Panel #Fail2ban #服务器安全 #SSH防护 #IO #n8n #nodejs #机器视觉 #6D位姿 #Coze工作流 #AI Agent指挥官 #多智能体系统 #mssql #动态规划 #时间复杂度 #空间复杂度 #GATT服务器 #蓝牙低功耗 #邮箱 #postfix #dovecot #esb接口 #走处理类报异常 #bug菌问答团队 #AI电商客服 #学术论文创作 #论文效率提升 #MBA论文写作 #昇腾300I DUO #银河麒麟部署 #银河麒麟部署文档 #银河麒麟linux #银河麒麟linux部署教程 # 远程连接 #旅游 #ROS #编程语言 #gerrit #memcache #vp9 #模板和元编程 #支付 #系统升级 #指针 #anaconda #虚拟环境 #GB28181 #SIP信令 #SpringBoot #视频监控 #ModelEngine #openssh #华为交换机 #信创终端 #PyTorch 特性 #动态计算图 #张量(Tensor) #自动求导Autograd #GPU 加速 #生态系统与社区支持 #与其他框架的对比 # OTA升级 # 黄山派 #mariadb #编程助手 #Gunicorn #WSGI #Flask #并发模型 #容器化 #Python #性能调优 #ceph #ambari #muduo库 #公共MQTT服务器 #ida #SSH跳转 #GPU服务器 #在线培训系统 #RustDesk # IndexTTS # GPU集群 #防火墙 #RPA #影刀RPA #国产化OS #AutoDL使用教程 #AI大模型训练 #linux常用命令 #PaddleOCR训练 #cpu #CVE-2025-68143 #CVE-2025-68144 #CVE-2025-68145 #xeon #RSO #机器人操作系统 #安全性测试 #Anaconda配置云虚拟环境 ##python学习笔记 #python中with语句详解 #ONLYOFFICE #MCP 服务器 #Zernike #hcipy #光学设计 #像差仿真 #数模美赛 #mapreduce #连接数据库报错 #毕设代做 #课设 #复数 #openEuler #pytest #ocr #lprnet #车牌识别 #crnn #车牌检测 # 黑屏模式 # TTS服务器 #LabVIEW知识 #LabVIEW程序 #LabVIEW功能 #IndexTTS 2.0 #本地化部署 #kong #Kong Audio #Kong Audio3 #KongAudio3 #空音3 #空音 #中国民乐 #智能体来了 #视频去字幕 #clamav #标准化事件委托 #工序流程工艺路径 #业务流程标准化 #多进程 #python技巧 #文生视频 #CogVideoX #AI部署 #图像处理 #pve #路由器 #RIP #结构体与联合体 #gnu #zotero #WebDAV #同步失败 #代理模式 #行为模式分析 #数据 #应用层 #跨领域 #敏感信息 #yolo #RTSP #Live555 #流媒体服务器 #测试网 #erc-20 #独立链 #polkadot #deepseek #经济学 #算力一体机 #ai算力服务器 #知识库 #决策树 #HistoryServer #Spark #YARN #jobhistory #JAVA #ue4 #DedicatedServer #独立服务器 #专用服务器 #tornado #防毒面罩 #防尘面罩 #模拟退火算法 #简单数论 #埃氏筛法 #EDCA OS #可控AI #UEFI #BIOS #Legacy BIOS #内存接口 # 澜起科技 # 服务器主板 #几何学 #拓扑学 #yolov12 #研究生life #多接口并发 #首页优化 #codex #SRS #API安全 #漏洞修复 #gpu #nvcc #cuda #nvidia #Highcharts #插件封装 #unix #1panel #vmware #python学习路线 #python基础 #python进阶 #python标准库 #zabbix #ICPC #ip #模块 #RXT4090显卡 #RTX4090 #深度学习服务器 #硬件选型 #群晖 #音乐 #IntelliJ IDEA #paddlepaddle #scala #ThingsBoard MCP # 公钥认证 #IPMB #远程管理 #debian #改行学it #dash # 远程访问 # 服务器IP配置 #捷配 #pcb工艺 #顶刊 #绘图 #研究生 #区间dp #二进制枚举 #图论 #runtmie #回归 #CANN #域名注册 #新媒体运营 #网站建设 #国外域名 #HBA卡 #RAID卡 #实时检测 #卷积神经网络 #密码 #MCP SDK #图 #dijkstra #迪杰斯特拉 #IO编程 #硬件 #HTML #web前端 #网页开发 #面试宝典 #8U #硬件架构 #docker-compose #fiddler #NPU #智慧城市 #海外短剧 #海外短剧app开发 #海外短剧系统开发 #短剧APP #短剧APP开发 #短剧系统开发 #海外短剧项目 #comfyui # 局域网访问 # 批量处理 # 树莓派 # ARM架构 #nacos #opc ua #opc # 环境迁移 #zygote #应用进程 #OpenManage #LVDS #高速ADC #DDR #Node.js #漏洞检测 #CVE-2025-27210 # GLM-TTS # 数据安全 #can #DIY机器人工房 #claude code #code cli #ccusage #xshell #host key #江协 #瑞萨 #OLED屏幕移植 #TTS私有化 # 音色克隆 #blender #设计师 #分布式数据库 #集中式数据库 #业务需求 #选型误 #Ascend #MindIE #静脉曲张 #腿部健康 #spring native #远程访问 #远程办公 #飞网 #安全高效 #配置简单 #快递盒检测检测系统 #智能一卡通 #消费一卡通 #智能梯控 #一卡通 #claudeCode #content7 #pygame #超时设置 #客户端/服务器 #网络编程 #电路仿真 #proteus #AD #keil #硬件工程师面试 #笔记本电脑 #TcpServer #accept #高并发服务器 #金融投资Agent #web3 #mybatis #uniapp #合法域名校验出错 #服务器域名配置不生效 #request域名配置 #已经配置好了但还是报错 #uniapp微信小程序 #Tokio #异步编程 #系统编程 #Pin #http服务器 #架构设计 # 批量管理 #glibc #MQTT协议 #galeweather.cn #高精度天气预报数据 #光伏功率预测 #风电功率预测 #高精度气象 #SEW #赛威 #SEW变频器 #政务 #RAID技术 #存储 #里氏替换原则 #科普 #参数估计 #矩估计 #概率论 #JT/T808 #车联网 #车载终端 #模拟器 #仿真器 #开发测试 #LE Audio #BAP #可再生能源 #绿色算力 #风电 #大学生 #AI赋能盾构隧道巡检 #开启基建安全新篇章 #以注意力为核心 #YOLOv12 #AI隧道盾构场景 #盾构管壁缺陷病害异常检测预警 #隧道病害缺陷检测 #AI技术 #Discord机器人 #云部署 #程序那些事 #sizeof和strlen区别 #sizeof #strlen #计算数据类型字节数 #计算字符串长度 #Spring AI #AI Agent #开发者工具 #C/C++ #静态链接 #链接 #web3.py #Kuikly #openharmony #llm #领域驱动 #IT #技术 #麒麟OS #串口服务器 #工业级串口服务器 #串口转以太网 #串口设备联网通讯模块 #串口服务器选型 #计算机外设 #rustdesk #全文检索 #树莓派4b安装系统 #scanf #printf #getchar #putchar #cin #cout #api #key #AI作画 #AI应用 #iot #STDIO协议 #Streamable-HTTP #McpTool注解 #服务器能力 #AutoDL #租显卡 #训练推理 #零代码平台 #AI开发 #UDP #pandas #程序员转型 #Spring源码 #esp32教程 #Dify #轻量化 #低配服务器 #Anything-LLM #IDC服务器 #工具集 #环境搭建 #知识点 #动画 #journalctl #aiohttp #asyncio #异步 #ipv6 #p2p #YOLOFuse # 水冷服务器 # 风冷服务器 #流量监控 #LobeChat #GPU加速 #翻译 #开源工具 #vrrp #脑裂 #keepalived主备 #高可用主备都持有VIP #SMP(软件制作平台) #EOM(企业经营模型) #应用系统 #软件需求 #910B #寄存器 #408 #线索二叉树 #熵权法 #灰色关联分析 #黑客技术 #挖漏洞 #日志分析 #二值化 #Canny边缘检测 #轮廓检测 #透视变换 #ZooKeeper #ZooKeeper面试题 #深入解析 #MC #openlayers #bmap #tile #server #elk #集成学习 #虚拟机 #EMC存储 #存储维护 #NetApp存储 #Hadoop #客户端 #交换机 #三层交换机 #CosyVoice3 # 语音合成 #链表的销毁 #链表的排序 #链表倒置 #判断链表是否有环 #eBPF #SSH反向隧道 # Jupyter远程访问 #宠物 #Socket #传统服饰销售平台 #文件传输 #电脑文件传输 #电脑传输文件 #电脑怎么传输文件到另一台电脑 #电脑传输文件到另一台电脑 #身体实验室 #健康认知重构 #微行动 #NEAT效应 #亚健康自救 #ICT人 #数据库架构 #银河麒麟aarch64 #vlookup #人脸识别 #人脸核身 #活体检测 #身份认证与人脸对比 #H5 #微信公众号 #asp.net上传文件夹 #React安全 #漏洞分析 #Next.js #反序列化漏洞 #SSH别名 #灌封胶 #有机硅灌封胶 #聚氨酯灌封胶 #环氧树脂灌封胶 #电子灌封胶 # 权限修复 #neo4j #NoSQL #ping通服务器 #读不了内网数据库 ##租显卡 #高精度农业气象 #Cubase #Cubase15 #Cubase14 #Cubase12 #Cubase13 #Cubase 15 Pro #Cubase 14 Pro #智慧校园解决方案 #智慧校园选型 #智慧校园采购 #智慧校园软件 #智慧校园专项资金 #智慧校园定制开发 #代码规范 #模型上下文协议 #MultiServerMCPC #load_mcp_tools #load_mcp_prompt #webgl #VMware Workstation16 #服务器操作系统 #Android16 #音频性能实战 #音频进阶 #VibeVoice # 云服务器 #CPU推理 #4U8卡 AI 服务器 ##AI 服务器选型指南 #GPU 互联 #GPU算力 #国产PLM #瑞华丽PLM #瑞华丽 #PLM #数据访问 #H5网页 #网页白屏 #H5页面空白 #资源加载问题 #打包部署后网页打不开 #HBuilderX #创业管理 #财务管理 #团队协作 #创始人必修课 #数字化决策 #经营管理 # AI翻译机 # 实时翻译 #arm64 #机器人运动学 #PyKDL #Deepoc #具身模型 #开发板 #未来 #自动化运维 #ms-swift # 一锤定音 # 大模型微调 #wireshark #UOS #海光K100 #统信 #tdengine #涛思数据 #Modbus #MOXA #cpp #随机森林 #boosting #K8s #镜像 #集群自动化 #esp32 #mosquito #SSH公钥认证 # 安全加固 #练习 #基础练习 #循环 #九九乘法表 #计算机实现 #VS Code调试配置 # GPU服务器 # tmux #Proxmox VE #虚拟化 #llvm #数据可视化 #网路编程 #百万并发 #rtmp #IFix #N8N #c++20 #SQL调优 #EXPLAIN #慢查询日志 #分布式架构 #Qwen3-14B # 大模型部署 # 私有化AI #工厂模式 #跨域 #发布上线后跨域报错 #请求接口跨域问题解决 #跨域请求代理配置 #request浏览器跨域 #screen 命令 #晶振 #连锁门店核销 #美团团购券核销 #美团核销api #saas平台美团核销 #java接入美团团购 #C2000 #TI #实时控制MCU #AI服务器电源 #攻防演练 #Java web #红队 #黑群晖 #无U盘 #纯小白 #hdfs #游戏机 #JumpServer #UDP的API使用 # ARM服务器 #人流量统计 #roi区域识别 #车辆识别 #screen命令 #React #Next #CVE-2025-55182 #RSC #SSH免密登录 #振镜 #振镜焊接 #蓝湖 #Axure原型发布 #梯控一卡通 #电梯一卡通 #考勤一卡通 #工作 #挖矿 #Linux病毒 # 目标检测 #chat #hibernate #逆向工程 #ngrok #SAP #ebs #metaerp #oracle ebs # 串口服务器 # NPort5630 #Python办公自动化 #Python办公 #昇腾 #机器人学习 #TTS #Gateway #认证服务器集成详解 #网络配置实战 #Web/FTP 服务访问 #计算机网络实验 #外网访问内网服务器 #Cisco 路由器配置 #静态端口映射 #网络运维 #一周会议与活动 #ICLR #CCF #框架搭建 #直播 #水性三防漆 #UV三防漆 #有机硅三防漆 #聚氨酯三防漆 #醇酸树脂三防漆 #丙烯酸三防漆 #华为机试 #OpenHarmony #Nacos #gRPC #注册中心 #milvus #win11 #CDN #最佳实践 #后端框架 #ArkUI #ArkTS #鸿蒙开发 #实时音视频 #贴图 #材质 #UDP套接字编程 #UDP协议 #网络测试 #证书 #知识 #MCP服务器注解 #异步支持 #方法筛选 #声明式编程 #自动筛选机制 #agentic bi #数据迁移 #论文复现 #鼠大侠网络验证系统源码 #系统安装 #js #unity3d #服务器框架 #Fantasy #运动 #GLM-4.6V-Flash-WEB # AI视觉 # 本地部署 #cocos2d #图形渲染 #进程创建与终止 #xlwings #Excel #DNS #dlms #dlms协议 #逻辑设备 #逻辑设置间权限 #Docsify #技术博客 #文件IO #输入输出流 #文件管理 #文件服务器 #tcpdump #期刊 #SCI #reactor反应堆 #mamba #flume #凤希AI伴侣 # 大模型 # 模型训练 #CLI #langgraph.json #对话框 #Dialog #桌面开发 #MessageDialog #QInputDialog #CMake #Make #工程实践 #bigtop #hdp #hue #kerberos # 高并发部署 #vps #glances #模版 #函数 #类 #raid #raid阵列 #排序 #软件 #本地生活 #电商系统 #商城 #WEB #格式工厂 #千问 #欧拉 #simulink #docker安装seata #bug #毕设定制 #生产服务器问题查询 #日志过滤 #Autodl私有云 #深度服务器配置 #VoxCPM-1.5-TTS # 云端GPU # PyCharm宕机 #webpack # 模型微调 #传统行业 #AI赋能 #IIS Crypto #rdp #人脸识别sdk #视频编解码 #项目申报系统 #项目申报管理 #项目申报 #企业项目申报 #Unity #游戏服务器 #AI教材写作工具 #AI创作技术 #教材编写实战 #创作效率优化 #大模型部署 #mindie #ComfyUI # 推理服务器 #AI零代码开发 #敏捷开发 #自然语言编程 #软件开发范式变革 #libosinfo #FunASR #语音转文字 #联机教程 #局域网联机 #局域网联机教程 #局域网游戏 #青少年编程 #二维数组 #Aluminium #Google #昭和仙君 #Shiro #CVE-2016-4437 #tekton #gateway #2025年 #因果学习 #性能 #RAM #x86_64 #数字人系统 # 服务器迁移 # 回滚方案 #BoringSSL #asp.net上传大文件 #rtsp #转发 #CS2 #debian13 #视觉检测 #turn #ICE #信创国产化 #达梦数据库 #鲲鹏 #Coturn #k8s #LangGraph 1.0 #企业级部署 #Kubernetes集群 #生产环境 # 代理转发 #idm #网站 #截图工具 #批量处理图片 #图片格式转换 #图片裁剪 #npm #VPS #搭建 #温湿度监控 #WhatsApp通知 #IoT #MySQL #土地承包延包 #领码SPARK #aPaaS+iPaaS #智能审核 #档案数字化 #万悟 #联通元景 #SMARC #ARM #银河麒麟服务器系统 #远程桌面 #X11转发 #可撤销IBE #服务器辅助 #私钥更新 #安全性证明 #双线性Diffie-Hellman #短剧 #短剧小程序 #短剧系统 #微剧 # 智能运维 # 性能瓶颈分析 #devops #SMTP # 内容安全 # Qwen3Guard #web服务器 #I/O模型 #水平触发、边缘触发 #多路复用 #MS #Materials #Comate #C++ UA Server #SDK #Windows #跨平台开发 #xml #FHSS #心理健康服务平台 #心理健康系统 #心理服务平台 #心理健康小程序 #OWASP #juice-shop #安全漏洞练习靶场 #北京百思可瑞教育 #百思可瑞教育 #北京百思教育 #人形机器人 #人机交互 #插件 #DDD #tdd #系统故障 #硬盘修复 #lucene #DAG #RGFNet多模态目标检测 #可见光-红外图像融合目标检测 #TGRS 2025顶刊论文 #YOLO多模态创新改进 #YOLO多模态融合属于发文热点 #safari #b树 # 远程运维 # ControlMaster #dynadot #域名 #机器翻译 #程序开发 #HarmonyOS APP #TFTP #NSP #下一状态预测 #aigc #spring ai #oauth2 #memory mcp #Cursor #性能测试 #LoadRunner #基于uni-app的 #校园二手物品交易系统 #开题报告 #ClaudeCode #AICoder #人工智能编码助手 #WinDbg #Windows调试 #内存转储分析 #redisson #大剑师 #nodejs面试题 #西门子 #汇川 #Blazor #log #EtherCAT #XMC4800 #工业自动化 #硬件设计 #AI视频创作系统 #AI视频创作 #AI创作系统 #AI视频生成 #AI工具 #AI创作工具 #夏天云 #夏天云数据 #远程控制 #SSH跳板机 # Python3.11 #力扣 #前缀和 #浏览器自动化 #python #API限流 # 频率限制 # 令牌桶算法 #cascadeur #内网 #batch #springboot3 #springboot3升级 #Spring Batch #升级Spring Batch #rsync # 数据同步 #视频 #雨云服务器 #Minecraft服务器 #教程 #MCSM面板 #Apple AI #Apple 人工智能 #FoundationModel #Summarize #SwiftUI #Tailscale #渗透测试 #网安应急响应 #管道Pipe #system V #浏览器指纹 #RK3576 #瑞芯微 #uvx #uv pip #npx #Ruff # 服务器配置 # GPU #edge #迭代器模式 #观察者模式 #服务器开启 TLS v1.2 #IISCrypto 使用教程 #TLS 协议配置 #IIS 安全设置 #服务器运维工具 #YOLO识别 #YOLO环境搭建Windows #YOLO环境搭建Ubuntu #懒汉式 #恶汉式 #套接字 #I/O多路复用 #字节序 #工程设计 #预混 #扩散 #燃烧知识 #层流 #湍流 #WinSCP 下载安装教程 #SFTP #FTP工具 #服务器文件传输 #samba #英语学习 #个人博客 # 键鼠锁定 #mtgsig #美团医药 #美团医药mtgsig #美团医药mtgsig1.2 #YOLOv13多模态创新改进 #YOLO多模态融合检测改进 #ICCV 2025多模态顶会 #LIF 局部光照感知融合模块 #效融合 RGB 与红外信息 #可见光与红外图像融合目标检测 #istio #服务发现 #手机h5网页浏览器 #安卓app #苹果ios APP #手机电脑开启摄像头并排查 #开关电源设计 #HarmonyOS #主板 #电源 #ArcGIS #批量操作 #地理空间分析 #嵌入式编译 #ccache #distcc #JNI #MinIO #express #cherry studio #puppeteer #音乐分类 #音频分析 #ViT模型 #Gradio应用 #free #vmstat #sar #KMS #slmgr #宝塔面板部署RustDesk #RustDesk远程控制手机 #手机远程控制 #运维工具 # Base64编码 # 多模态检测 #canvas层级太高 #canvas遮挡问题 #盖住其他元素 #苹果ios手机 #安卓手机 #调整画布层级 #测速 #iperf #iperf3 #学术生涯规划 #CCF目录 #基金申请 #职称评定 #论文发表 #科研评价 #顶会顶刊 #AI应用编程 #移动端h5网页 #调用浏览器摄像头并拍照 #开启摄像头权限 #拍照后查看与上传服务器端 #摄像头黑屏打不开问题 #nfs #iscsi #ARM64 # DDColor # ComfyUI #SPA #单页应用 #服务器IO模型 #非阻塞轮询模型 #多任务并发模型 #异步信号模型 #多路复用模型 #moltbot #C #STDIO传输 #SSE传输 #WebMVC #WebFlux #YOLOv8 # Docker镜像 #游戏服务器断线 #国产开源制品管理工具 #Hadess #swagger #范式 #Fluentd #Sonic #日志采集 #面向对象 #入侵 #日志排查 #taro #Karalon #AI Test #ET模式 #非阻塞 #remote-ssh #外卖配送 #SA-PEKS # 关键词猜测攻击 # 盲签名 # 限速机制 #Spring AOP #系统降级 #华为P30 #Archcraft #restful #解释器模式 #多模态 #微调 #超参 #LLamafactory #向量嵌入 #同态加密 #boltbot #K8s集群 #LangSmith 香港VPS服务器 VPS服务器 香港VPS #人脸活体检测 #live-pusher #动作引导 #张嘴眨眼摇头 #苹果ios安卓完美兼容 #电子电气架构 #系统工程与系统架构的内涵 #Routine #OPCUA #API #标准化流模型 #概率生成模型 #可逆变换 #概率密度变换 #duckdb #poll #信息收集 #Langchain-Chatchat # 国产化服务器 # 信创 #阿里云RDS #Syslog #系统日志 #日志监控 #爬虫实战 #零基础python爬虫教学 #双色球历史开奖数据 #期号红球篮球开奖日期等 #结构化CSV存储 # 硬件配置 #攻击溯源 #编程 美国站群服务器 美国多IP服务器 美国站群 #warp #coffeescript #数智红包 #商业变革 #Prometheus #Zabbix #语音合成 #FASTMCP #H3C #Go并发 #高并发架构 #Goroutine #系统设计 #net core #kestrel #web-server #asp.net-core #grpc #宝塔 #Navidrome #reactjs #高斯溅射 #开关电源 #热敏电阻 #PTC热敏电阻 #说话人验证 #声纹识别 #CAM++ #云开发 #AI智能棋盘 #Rock Pi S #网络 #MC群组服务器 #传媒 #云计算运维 #隐函数 #常微分方程 #偏微分方程 #线性微分方程 #线性方程组 #非线性方程组 #复变函数 #PTP_1588 #gPTP #c++高并发 #Termux #Samba # 鲲鹏 #uip #思爱普 #SAP S/4HANA #ABAP #NetWeaver #进程等待 #wait #waitpid #递归 #线性dp # 离线AI #水利信息化 #智慧水务 #授时服务 #北斗授时服务器 #农产品物流管理 #物流管理系统 #农产品物流系统 #农产品物流 #开发实战 #Ward #测量 #VSCode # SSH #日志模块 #文件上传漏洞 #网络安全计划 #数字时代 #奈飞工厂算法挑战赛 #CTF #A2A #GenAI #Proteus #UART #嵌入式系统 #结构与算法 #磁盘配额 #存储管理 #形考作业 #国家开放大学 #系统运维 #gaussdb #服务器解析漏洞 #云服务器选购 #Saas #NFC #智能公交 #服务器计费 #FP-增长 #outlook #错误代码2603 #无网络连接 #2603 #算力建设 #TLS协议 #HTTPS #运维安全 #idc #金仓数据库 #数据库平替用金仓 #SSH密钥 #持续部署 #ETL管道 #向量存储 #数据预处理 #DocumentReader #效率神器 #办公技巧 #自动化工具 #Windows技巧 #打工人必备 #smtp #smtp服务器 #PHP #intellij idea #声源定位 #MUSIC #fs7TF #cosmic #数字孪生 #三维可视化 # Qwen3Guard-Gen-8B #AI 推理 #NV #npu #版本兼容 #API兼容 #AI写作工具 #教材编写效率提升 #AI教材编写 #教材编写难题解决 #教育领域AI应用 #cmmi #结对编程 #ansys #ansys问题解决办法 # 网络延迟 #atlassian #xcode #华为od机试 #华为od机考 #华为od最新上机考试题库 #华为OD题库 #od机考题库 #ranger #MySQL8.0 #AI+ #coze #AI入门 #远程软件 #计组 #数电 #resnet50 #分类识别训练 #运维 #处理器 #Python3.11 #Spire.Office # Connection refused #智能体对传统行业冲击 #行业转型 #teamviewer #智能检索 #Web of Science #MOSFET #晶圆制造 #芯片制造 #上下文工程 #langgraph #意图识别 #win10 #qemu #Socket网络编程 # GLM # 服务连通性 #vertx #vert.x #vertx4 #runOnContext #传感器 #MicroPython #WRF #WRFDA #RS232 #RS485 #RS422 #数据恢复 #视频恢复 #视频修复 #RAID5恢复 #流媒体服务器恢复 #web server #请求处理流程 # IP配置 # 0.0.0.0 #嵌入式开发 # DIY主机 # 交叉编译 #ftp #sftp # 轻量化镜像 # 边缘计算 #0day漏洞 #DDoS攻击 #漏洞排查 #视觉理解 #Moondream2 #多模态AI #美食 # 批量部署 #分享 #PS #photoshop #ASR #SenseVoice #opc模拟服务器 #PN 结 #服务器线程 # SSL通信 # 动态结构体 #大数据分析 #node #报表制作 #职场 #用数据讲故事 #语音生成 #勒索病毒 #勒索软件 #加密算法 #.bixi勒索病毒 #数据加密 #CA证书 # ms-swift #bochs #个人助理 #数字员工 #pxe #Host #SSRF #星际航行 #Minecraft #ARMv8 #内存模型 #内存屏障 #麦克风权限 #访问麦克风并录制音频 #麦克风录制音频后在线播放 #用户拒绝访问麦克风权限怎么办 #uniapp 安卓 苹果ios #将音频保存本地或上传服务器 #protobuffer #结构化数据序列化机制 #gmssh #铁路桥梁 #DIC技术 #箱梁试验 #裂纹监测 #四点弯曲 #闲置物品交易系统 #SQL注入 #WAF绕过 #IPv6 #节日 #ESP32编译服务器 #Ping #DNS域名解析 #PaperMC #我的世界服务器 #前端开发 #EN4FE #自由表达演说平台 #演说 # REST API # keep-alive #haproxy #地理 #遥感 #Linly-Talker # 数字人 # 服务器稳定性 #ACID #多文档事务 #分布式事务 #starrocks #Linux多线程 #L6 #L10 #L9 #Helm Chart #cesium #可视化 #恒源云 #图形化界面 #海量数据存储 #uni-app x #uts #uvue #跨端开发 #实战 #VMware创建虚拟机 #远程更新 #缓存更新 #多指令适配 #物料关联计划 #个性化推荐 #BERT模型 #文献综述 #个人电脑 #Qwen3-VL # 服务状态监控 # 视觉语言模型 #UDP服务器 #recvfrom函数 #校园志愿者 #SQL注入主机 #CVE-2025-13878 #CWE-617 #远程攻击 #音诺ai翻译机 #AI翻译机 # Ampere Altra Max #WAN2.2 #Object类 #VMWare Tool #Spring Cloud #Grafana #网络安全大赛 #编译原理 #词法分析 #统信操作系统 #LLM大模型部署与微调 #OpenCode #技能系统 #技能模板 #电梯 #电梯运力 #电梯门禁 #数据报系统 #Typora #状态图 #甘特图 #类图 #时序/序列图 #实体关系ER图 #量子计算 #库存管理 # 高温监控 #DSL #解析器 #RK3588 #RK3588J #评估板 #核心板 #ServBay #状态空间 #远程桌面协议 #SPICE #代理服务器 #保姆级教程 #电机正反转 #TMC2240 #DIR引脚控制 #Xshell #Finalshell #生物信息学 #组学 #odoo #Matrox MIL #二次开发 #CMC #appche #TCP/IP #c #VON #伯希和敦煌石窟笔记 #伯希和 #CS336 #Assignment #Experiments #TinyStories #Ablation #RWK35xx #语音流 #实时传输 #SpringSecurity #鉴权 #Hot100 #求职面试 #N皇后 #解数独 #adobe # child_process #AE #AI降重 #快降重 #论文降重 #降AI率 #车载嵌入式 #Zigzag #AITechLab #cpp-python #CUDA版本 #POC #问答 #交付 #jquery #分子动力学 #化工仿真 #小智 #Ra-08H #LoRaWAN #TTN #边缘AI # Kontron # SMARC-sAMX8 #okhttp #基础语法 #标识符 #常量与变量 #数据类型 #运算符与表达式 #Fast R-CNN #深度学习模型 #anti-content #anti-content分析 #anti-content逆向 #小艺 #搜索 #总体设计 #电源树 #框图 #Claude opus 4.6 #Beidou #北斗 #SSR #实例分割 #isic2016 #composer #symfony #java-zookeeper #DuckDB #协议 #量化交易 #期权分析 #Python金融 #AlphaGBM #金融科技 #底层原理 #源码实现 #CSDN开发云 #vncdotool #链接VNC服务器 #如何隐藏光标 #Arduino BLDC #核辐射区域探测机器人 #工控 #FPGA #动态数码管 #Verilog HDL #计时 #图像检测 #Couchbase #元数据过滤 #相似性搜索 #JSON文档数据库 #智慧医疗 #xr #AI工具集成 #容器化部署 #AI教程 #基金 #股票 #Peta #ossinsight #Gazebo #ROS 2 #消息桥接 #机器人仿真 #fork函数 #进程创建 #进程终止 #session #JADX-AI 插件 #模块测试 #Nyquist #控制工程 #频域分析 #UID9622 #notion #龍魂系统 #龍骨 #国学易经 #Bubble chart #气泡图 #环境领域 #机器狗 #AGV #AMR #机器人乘梯 #钟点工管理系统 #数字化管理 #ChatPPT #HC05 #蓝牙模块 #caffeine #多级缓存 #GESP2级 #GESP二级 #幂 #枚举算法 #JDK #国产技术 #自主可控 #体系 #建设 #落地 #云安全 #迁移学习 #密评 #商用密码应用安全性评估 #高通410 #随身WiFi #OpenWRT #家庭服务器 #claudecode