输入捕获模式测频率、PWMI模式测频率占空比

news2024/9/19 2:33:57

一、知识点

TIM输入捕获模式:
1、输入捕获模式测频率占空比

信号源:产生一个频率和占空比可调的波形

无信号发生器的情况:先用PWM模块,在PA0端口输出一个频率和占空比可调的波形,把PA0和PA6连在一起,PA6为输入波形,这样就是测量自己PWM模块产生波形的频率

在显示屏上显示PA6的频率

2、PWMI模式测频率和占空比

 1、IC(Input Capture)输入捕获

输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR(即把当前CNT的值读出来,写入到CCR中) 

2、通用定时器结构 

(1)输出比较的执行逻辑

根据CNT和CCR的关系,从通道引脚输出高低电平

(2)四个输入捕获和输出比较通道 

共用4个CCR寄存器,其CH1到CH4也是共用的,故对于同一个定时器,输入捕获和输出比较,只能使用一个,不能同时使用

(3)输入捕获的执行流程和输出比较的区别 

输出比较:引脚是输出端口,根据CNT和CCR的大小关系来执行输出动作

输入捕获:引脚是输入端口,接收到输入信号,执行CNT锁存到CCR的动作

(4)输入捕获的作用 

测量PWM波形的频率、占空比、脉冲间隔(和频率差不多意思)、电平持续时间(和占空比差不多意思)等参数

(5)输入捕获通道 

每个高级定时器和通用定时器都拥有4个输入捕获通道,且高级和通用定时器都没有什么区别,基本定时器没有输入捕获的功能

 (6)PWMI模式:同时测量频率和占空比

  PWMI模式是PWM的输入模式,专门为测量PWM频率和占空比设计的。

(7)主从触发模式:实现硬件全自动测量 

注意:(6)、(7)结合起来,测量频率占空比就是硬件全自动执行,软件不需要进行任何干预,也不需要进中断,需要测量时直接读取CCR寄存器的值即可,方便+减轻软件的压力

二、输入捕获过程详解

在这里插入图片描述

  • 最左边四个通道的引脚,引脚进来为一个三输入(接在通道1、2、3的端口)的异或门,执行逻辑是三个引脚任何一个有电平翻转输出引脚就会产生一次电平翻转,输出通过数据选择器(梯形符号)到达输入捕获通道1。(连接异或门的输入方式一般用于三相无刷电机的实验当中)
  • 数据选择器如果选择上面一个,输入捕获通道1的输入就是3个引脚的异或值,如果选择下面一个那么异或门没用,四个通道各用各的引脚对应相应输入捕获通道。(下图通道1详细图)CC1S位可对数据选择器进行选择,
  • 输入信号到达输入滤波器和边沿检测器。滤波可避免高频毛刺信号误触发;边沿检测和外部中断一样,可以选择高电平触发或者低电平触发,当出现指定电平时边沿检测电路会触发后续电路执行动作。注意这里其实内部有两套滤波和边沿检测(极性选择)电路,一路得到TI1FP1(TI1 Filter Polarity 1),输出给通道1后续电路,另一路给通道2,其他同理(如图),即两个通道之间可以选择各走各的,也可选择交叉连接,可灵活切换后续捕获电路的输入,并可借此实现把一个引脚的输入同时映射到两个捕获单元,这也是PWMI模式的经典结构。
  • **PWMI模式:**第一个捕获通道使用上升沿触发,用来捕获周期,第二个通道使用下降沿触发用来捕获占空比,两个通道同时对一个引脚进行捕获就可同时测量频率和占空比。
  • 另外还有一个TRC信号,也可以选择作为捕获部分的输入,它来自上面橙框的中心那个TRC,这样设计也是为了无刷电机的驱动。
  • 信号来到预分频器可选择对信号进行分频,分频之后的触发信号就可触发捕获电力进行工作,每来一个触发信号CNT的值就会向CCR转运一次。转运的同时会发生一个捕获事件CC1I,这个事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间处理一些事件得话,就可以开启这个捕获中断。(下图通道1详细图)ICPS位可配置分频器,可选择不分频(1)、2、4、8分频,最后CC1E位控制输出使能或失能。
  • 每捕获一次CNT的值都需要把CNT清零一下以便下次捕获,硬件电路可自动完成此操作:(下图)TI1FP1信号和TI1_ED(TI1的边沿信号)都可以通向从模式控制器,比如TI1FP1信号的上升沿触发捕获,它同时触发从模式,从模式里的电路自动完成对CNT的清零。主从触发模式详细见本博客第三部分。
  • 拓:设计异或门的目的主要是为三相无刷电机服务,无刷电机有3个霍尔传感器检测转子的位置,可以根据转子的位置进行换相,有了异或门就可在前三个通道接三个霍尔传感器,然后这个定时器就作为无刷电机的接口定时器去驱动换相电路的工作。

在这里插入图片描述

三、频率测量

(1)测频法和测周法的原理
测频率法:定义一个T,如1s,在1s的时间内,有多少个周期,就是多少HZ

测周法:周期的倒数就是频率,测出一个周期的时间,再取倒数,就是频率(测量时间的方法:定时器计次,使用一个已知频率fc的计次时钟,来驱动计数器,从一个上升沿开始计,计数器从0开始,一直计到下一个上升沿,停止,计一个数的时间是1/fc,计N个数,时间就是N/fc,N/fc就是周期,再取一个倒数,就得到公式fx=fc/N)

中界频率:测频率法的N=测周法的N,两者误差相等。

(2)测频法和测周法的选择
此时,当待测信号小于中界频率时,用测周法,当大于中界频率时,用测频法

(3)测频法和测周法的比较
测频法适合高频信号(因为若N很小,误差会很大),若闸门时间选为1s,那么每隔1s才能出结果,结果比较慢

测周法适合测量低频信号(周期比较长,计次就会比较多,有助于减少误差),测一个周期就能出现结果,而一般待测信号频率都比较大,故结果更新较快

(4)测频法和测周法的实现
a、测频法的思路:之前的对射式红外传感器计次计次,每来一个上升沿计次1,再用有一个定时器,每隔1s中断,再中断中,每隔1s取一次计次值,同时清0计次,为下一次做准备,这样每次读取的计次值就是频率

定时器外部时钟也同理,每隔1s取一次计次,就能实现

b、测周法:测量两个上升沿的时间(见本次代码)

四、主从触发模式

主从触发模式就是主模式、从模式、触发源选择三个的简称
主模式:可以将定时器内部的信号,映射到TRGO引脚,用于触发别的外设 
从模式:接受其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制
触发源选择:选择从模式的触发信号源,可以认为是从模式的一部分,选择指定的一个信号,得到TRGI,TRGI可以取触发从模式,从模式可以在上述右图列表中,选择一项操作来自动执行

若想让TI1FP1信号自动触发CNT清零,触发源一个选择TI1FP1,从模式选择执行Reset的操作,这样TI1FP1信号就可以自动触发从模式,从模式自动清零CNT,实现硬件全自动测量 

五、结构

(1)捕获输出基本结构

  • 只使用一个通道
  • 时基单元:CNT(测周法用来计数计时)会在预分频之后的时钟驱动下,不断自增 。经过预分频后时钟频率会驱动CNT的标准频率fc,标准频率=72M/预分频系数
  • 输入捕获通道1的GPIO口输入方波信号,经过滤波器和边沿检测,选择TI1FP1为上升沿触发,选择直连的通道,分频器选择不分频,当TI1FP1出现上升沿后,,CNT的当前计数值转运到CCR1中,同时触发源选择,选中TI1FP1为触发信号,从模式选择复位操作,这样TI1FP1的上升沿,也会通过触发源选择——从模式RESRT这条路去触发CNT清零
  • 顺序:先转运CNT的值到CCR中,再触发从模式给CNT清零,或者是非阻塞的同时转移,CNT的值转移到CCR,同时0转移到CNT中去(先捕获,在清零)
  • CCR1值为N,fc/N就可以得到频率
  • 频率过低,CNT(最大65535)可能会溢出 

 (2)PWMI基本结构

占空比:CCR2/CCR1  

六、输入捕获模式测频率

1、原理图

 2、改变PWM频率

• PWM 频率:   Freq = CK_PSC / (PSC + 1) / (ARR + 1)
• PWM 占空比:   Duty = CCR / (ARR + 1)
• PWM 分辨率:   Reso = 1 / (ARR + 1)
CK_PSC为72M,PSC为预分频器,ARR为自动重装器,CCR为捕获/比较器
改变PSC和ARR都可以调节频率,但改变ARR调节频率会影响到占空比,所以选择PSC调节频率

TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;        //ARR
TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;        //PSC
TIM_OCInitStructure.TIM_Pulse = 0;        //CCR

这代码中,因为ARR=100,所以CCR的值为占空比(该电平在周期的比例)
 

3、单独修改PSC的函数 

void PWM_SetPrescaler(uint16_t Prescaler)
{
	//第三个参数指定定时器预分屏器的重装模式
	//第一个 TIM_PSCReloadMode_Update,预分频器在更新事件重装//等待周期结束
	// 第二个TIM_PSCReloadMode_Immediate预分频器立即重装//可能一个周期没结束就切换
	TIM_PrescalerConfig(TIM2, Prescaler, TIM_PSCReloadMode_Immediate);
}

4、设置1000HZ,占空比为50%

	PWM_SetPrescaler(720 - 1);		//Freq = 72M / (PSC + 1) / 100  //1000hz
	PWM_SetCompare1(50);			//Duty = CCR / 100        //占空比为50%

5、工作步骤

  • 第一步:RCC开启时钟,打开GPIO和TMI的时钟
  • 第二步:GPIO初始化,配置成输入模式,一般选择上拉输入或者浮空输入模式
  • 第三步:配置时基单元,让CNT计数器在内部时钟的驱动下自增运行
  • 第四步:配置输入捕获单元,包括滤波器、级联、直联通道还是交叉通道、分频器等参数,用结构体统一进行配置
  • 第五步:选择重模式的触发源,触发源选择为TI1FP1(此处调用一个库函数,给个参数即可)
  • 第六步:选择触发之后执行的操作:执行RESET操作(调用库函数)

最后,调用TIM_CMD函数开启定时器

想要获取一个周期的频率时,直接读取CCR计算器,然后按照fc除N计算即可(fc,标准频率=72M/预分频系数) 

6、CCR 

输入捕获模式下:CCR是只读的,要用GetCapture读出

输出比较模式下:CCR是只写的,要用SetCompare1

7、 代码

(1)IC.c

 

#include "stm32f10x.h"                  // Device header
 
void IC_Init(void)
{
	//TIM3
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//PA6
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	
	TIM_InternalClockConfig(TIM3);//TIM3
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
	TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;		//ARR最好大一些,防止溢出
	TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;		//PSC这个值决定了测周法的标准频率fc=1M
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);//TIM3
	
	//第四步:配置输入捕获单元
	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;//选择通道1
	TIM_ICInitStructure.TIM_ICFilter = 0xF;//数越大,滤波效果越好,滤波器计次不会改变信号原有的频率,一般滤波器的采样频率会远高于信号频率
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿触发
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//分频器对信号本身进行计次,会改变频率。此处不分频
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//直连通道
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	
	//第五步:选择重模式的触发源
	TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);
	//选择触发之后执行的操作
	TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
	
	//使能
	TIM_Cmd(TIM3, ENABLE);
}
 
uint32_t IC_GetFreq(void)
{
	//fc除N(fc,标准频率=72M/预分频系数)
	return 1000000 / (TIM_GetCapture1(TIM3) + 1);
}

(2)mian.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"
#include "IC.h"
 
int main(void)
{
	OLED_Init();
	PWM_Init();
	IC_Init();
	
	OLED_ShowString(1, 1, "Freq:00000Hz");
	
	PWM_SetPrescaler(720 - 1);		//Freq = 72M / (PSC + 1) / 100  //1000hz
	PWM_SetCompare1(50);			//Duty = CCR / 100        //占空比为50%
	
	while (1)
	{
		OLED_ShowNum(1, 6, IC_GetFreq(), 5);
	}
}

七、PWMI模式频率占空比

1、IC.c中不一样的地方

//该函数会自动把剩下的一个通道初始化成相反的配置,第一个是通道1,直连、上升沿
//第二个是通道2,交叉、下降沿
TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
 
uint32_t IC_GetDuty(void)
{
	return (TIM_GetCapture2(TIM3) + 1) * 100 / (TIM_GetCapture1(TIM3) + 1);
}

2、IC.c

#include "stm32f10x.h"                  // Device header
 
void IC_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	TIM_InternalClockConfig(TIM3);
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;		//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;		//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
	
	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
	TIM_ICInitStructure.TIM_ICFilter = 0xF;
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
	//该函数会自动把剩下的一个通道初始化成相反的配置,第一个是通道1,直连、上升沿
	//第二个是通道2,交叉、下降沿
	TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
 
	TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);
	TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
	
	TIM_Cmd(TIM3, ENABLE);
}
 
uint32_t IC_GetFreq(void)
{
	return 1000000 / (TIM_GetCapture1(TIM3) + 1);
}
 
uint32_t IC_GetDuty(void)
{
	return (TIM_GetCapture2(TIM3) + 1) * 100 / (TIM_GetCapture1(TIM3) + 1);
}

3、main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"
#include "IC.h"
 
int main(void)
{
	OLED_Init();
	PWM_Init();
	IC_Init();
	
	OLED_ShowString(1, 1, "Freq:00000Hz");
	OLED_ShowString(2, 1, "Duty:00%");
	
	PWM_SetPrescaler(720 - 1);			//Freq = 72M / (PSC + 1) / 100
	PWM_SetCompare1(50);				//Duty = CCR / 100
	
	while (1)
	{
		OLED_ShowNum(1, 6, IC_GetFreq(), 5);
		OLED_ShowNum(2, 6, IC_GetDuty(), 2);
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 安装 Mysql

主要内容 本文主要是实现在虚拟机 Ubuntu 18.04 成功安装 MySQL 5.7,并实现远程访问功能,以 windows 下客户端访问虚拟机上的 mysql 数据库。 1. 切换至 root 用户 ,shell 终端指令均执行在 root 用户下 sudo su 2. 安装并设置 mysql 安…

DOM操作-获取元素的方式

DOM—文档对象模型 ●DOM(Document Object Model): 文档对象模型 ●其实就是操作 html 中的标签的一些能力 ●或者说是一整套操作文档流的属性和方法的集合 ●我们可以操作哪些内容 ○获取一个元素 ○移除一个元素 ○创建一个元素 ○向页面里…

Unity防破解方案解析

Unity作为游戏开发市场第一大游戏引擎占有者,已经全面覆盖到各个游戏平台,在全球范围内超过50% 的手机游戏、PC 游戏和主机游戏都使用 Unity 创作而成。 同时,Unity也是中国游戏公司的首选开发引擎,《原神》《王者荣耀》《英雄联盟…

【MySQL入门指南】4种插入数据的方法

文章目录 MySQL的增删查改① - 增1.发生冲突则失败1.1 基本语法1.2 单行数据全列插入1.3 多行数据 指定列插入 2.发生冲突则更新2.1 基本语法2.2 插入否则更新 3.发生冲突则替换3.1 基本语法3.2插入否则替换 4.插入查询结果 MySQL的增删查改① - 增 -- 创建一张学生表 CREATE…

狂神 springcloud学习

springcloud学习 笔记整理来源 B站UP主狂神说https://www.bilibili.com/video/BV1jJ411S7xr 参考:菜鸟小杰子 https://blog.csdn.net/lijie0213/article/details/107914619 参考:路飞 https://csp1999.blog.csdn.net/article/details/106255122?spm100…

stm32cubemx配置mpu6050——10分钟0基础到灵活使用

stm32cubemx配置mpu6050——10分钟0基础到灵活使用 10分钟速通!你没看错,就是10min,从0基础到灵活运用mpu6050。 不信?往下看看就会:嗷~原来如此 第一步 下载github开源代码。 https://github.com/leech001/MPU6050首…

从零开始学习Linux运维,成为IT领域翘楚(六)

文章目录 🔥Linux磁盘管理🔥Linux挂载硬盘🔥Linux系统状态检测命令🔥Linux下载软件安装的命令 🔥Linux磁盘管理 分区的方式 🐟 MBR分区表:每块硬盘最大支持2.1TB硬盘,每块硬盘最多支…

《编程思维与实践》1042.字串变换

《编程思维与实践》1042.字串变换 题目 思路 分两步解决: 1.判断是否可以通过两种变换使所有的字符串变得相同; 2.在能变换的前提下使变换的次数最少。 其中第一步可以将每个字符串的基底(将连续重复出现的字符视为一个字符)求出来, 如: aaabbb的基底就…

28《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限,如果错误欢迎批评指正。 第七章:Proteins Evolve (蛋白进化) 蛋白质分子可以通过生物进化而发生改变。随着生物体的进化,它们…

Haproxy集群

引言 Haproxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。 一、Haproxy简介 1、Haproxy应用分析 LVS在企业中康复在能力很强,但存在不足: LVS不支持正则处理&…

Java编程中的20种常见异常及其原因,你知道多少

本文介绍了在Java编程中可能遇到的20种常见异常,包括空指针异常、类未找到异常、数组下标越界异常等,并简要解释了每种异常发生的原因。这些异常可能由于编程错误、运行时资源不足或权限受限等多种原因触发,了解它们有助于更高效地进行程序调…

Crowdsoure的简单介绍

一、什么是Crowdsoure 在美国《连线》杂志2006年的6月刊上,记者Jeff Howe首次提出了Crowdsoure(众包)的概念。众包是一个框架,它将大量分散的人群聚集在一起,收集数据,解决问题,或应对挑战。它…

55、RK3588使用MPP编码yuv到h264、解码h264到yuv模块开发和测试

基本思想:需要使用独立模块代码去实现自己的逻辑功能,所以在基于官方源码基础上,和参考附录几个官方链接,搞出一版rk3588编码测试和解码测试demo 测试视频/生成h264/生成yuv 链接: https://pan.baidu.com/s/1HbpeqMJb8HcgFpzaKh…

JavaScript:字符串

文章目录 字符串344. 反转字符串reverse() 方法(打基础的时候,不要太迷恋库函数)代码及思路 541. 反转字符串 IIJavaScript String split() 方法JavaScript Array join() 方法代码分析见注释 剑指 Offer 05. 替换空格思路注意:上面…

计算机模式识别有哪些SCI期刊推荐? - 易智编译EaseEditing

计算机模式识别是指利用计算机技术,识别、分析和理解图像、声音、文本等各种模式的能力。以下是一些推荐的SCI期刊: IEEE Transactions on Pattern Analysis and Machine Intelligence IEEE Transactions on Pattern Analysis and Machine Intelligence …

OpenGL学习日志之模板测试

模板测试(Stencil Test)出现原因 深度测试更多是为了解决如何区分物体前后遮挡关系,从而选择丢弃片段的测试。而模板测试,是通过设置片元模板缓冲区模板值和引用模板值,再按照我们设定的运算函数来丢弃某些片段&#…

HTB-Brainfuck

HTB-Brainfuck 信息收集443端口https://sup3rs3cr3t.brainfuck.htb/https://brainfuck.htb/和www.brainfuck.htb 立足读取root.txt内容oresits -> root 信息收集 443端口 查看对应证书。 从证书中能获得 Email Address: orestisbrainfuck.htbCommon Name&#…

解决echarts 在缩放中模糊的问题

echarts 在缩放中模糊的问题 参考:缩放带来的echarts模糊 1、echarts.init(dom,null,{ renderer : svg }); 2、echarts.init(chart,null, { devicePixelRatio: 2 });问题:在使用dom-to-image插件截图的情况下: 1、使用方式一 { renderer : …

Jetson Nano emmc版本系统镜像备份和烧录

一、镜像备份 1.将待复制的jetson设备进入恢复模式,用数据线连接jetson设备和主机。 对于原厂开发板将FC_REC引脚与GND短接,通过micro-usb到usb数据线连接到电脑。 在电脑的ubuntu通过lsusb命令查看需要备份的设备是否已经接入&#xff0c…

vue3.x + vite4.3构建属于自己的组件库并发布npm包

在国内的项目研发过程中,使用vue框架的项目占比很大,同样延伸出了很多非常优秀的UI组件库,比如element-plus、ant-design等;优势:资源较少,快速开发,丰富的API,阅读性、性能优化更好…