STM32(六):STM32指南者-定时器实验

目录

  • 一、基本概念
      • 1、常规定时器
      • 2、内核定时器
  • 二、基本定时器实验
      • 1、实验说明
      • 2、编程过程
            • (1)配置LED
            • (2)配置定时器
            • (3)设定中断事件
            • (4)主函数计数
      • 3、工程代码
  • 三、通用定时器实验
    • 实验一:常规计时
      • 1、实验说明
      • 2、编程过程
            • (1)配置LED
            • (2)配置定时器
            • (3)设定中断事件
            • (4)主函数计数
      • 3、工程代码
  • 四、高级定时器实验
    • 实验一:常规计时
      • 1、实验说明
      • 2、编程过程
            • (1)配置LED
            • (2)配置定时器
            • (3)设定中断事件
            • (4)主函数计数
      • 3、工程代码
  • 五、内核定时器实验

一、基本概念

何为定时器?
主要功能就是接收输入信号,以一定频率计数,再输出信号(触发中断)。在stm32当中,以此为基础,集成了多种功能,如:内、外时钟源选择,输入捕获,输出比较,编码器,PWM波输出等。

STM32中定时器分类:
参考:
1、https://zhuanlan.zhihu.com/p/648584916
2、https://blog.csdn.net/zs3194068129/article/details/137357092
在这里插入图片描述

1、常规定时器

其中,STM32F1 系列中,除了互联型的产品,共有 8个常规定时器,分为基本定时器,通用定时器和高级定时器。

  • 基本定时器: TIM6 和 TIM7 是一个 16位的只能向上计数的定时器,只能定时,没有外部 IO。

  • 通用定时器 :TIM2/3/4/5是一个 16位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,
    每个定时器有四个外部IO。

  • 高级定时器: TIM1/8是一个 16位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有8 个外部 IO。
    在这里插入图片描述基本原理:
    在这里插入图片描述

  • 自动重装载寄存器 ARR:是一个比较影子寄存器,用来存储程序中某个变量或寄存器的值,然后将其与其他变量或寄存器的值进行比较的寄存器。

  • 溢出条件:CNT==ARR(影子寄存器中的值)、或0、或ARR-1、1;
    在这里插入图片描述

2、内核定时器

XXX

二、基本定时器实验

1、实验说明

本实验利用基本定时器 TIM6/7 定时 1s,1s 时间到 LED 翻转一次。基本定时器是单片机内部的资源, 没有外部 IO,不需要接外部电路,现只需要一个 LED 即可。

基本原理
利用一个基本定时器(如TIM6),通过中断事件设置一个单位定时器(如1ms),主函数利用单位计时器实现LED灯定时翻转。

编程思路
1、配置LED灯;
2、配置定时器;
3、设定中断事件配置1ms的单位计时器;
4、主函数中利用1ms的单位计时器开始计数,当计数到1000时LED翻转一次。

2、编程过程

(1)配置LED

STM32(四):STM32指南者-跑马灯实验

(2)配置定时器

定时器配置参数(以TIM6为例):

//1、TIM6时钟配置
#define BASIC_TIM                TIM6//使用时钟
#define BASIC_TIM_APBxClock_FUN  RCC_APB1PeriphClockCmd//APB1时钟启动函数
#define BASIC_TIM_CLK            RCC_APB1Periph_TIM6//APB1_TIM6内部时钟CK_INT=72M
#define BASIC_TIM_IRQ            TIM6_IRQn//定时器TIM6
#define BASIC_TIM_IRQHandler     TIM6_IRQHandler
//2、基本定时器参数配置
#define BASIC_TIM_Prescaler      71//时钟预分频数,则驱动计数器的时钟CK_CNT = CK_INT / (71+1)=1M;可设置范围为0至65535,实现1至65536分频   
#define BASIC_TIM_Period         1000-1//自动重装载寄存器周的值(计数值),则1s/1MHz*1000=1ms,可设置范围为0至65535;累计TIM_Period个频率后产生一个更新或者中断

定时器配置函数:

//3、基本定时器模式配置
static void BASIC_TIM_Mode_Config(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//时钟结构体BASIC_TIM_APBxClock_FUN(BASIC_TIM_CLK, ENABLE);// 开启内部定时器时钟TIM_TimeBaseStructure.TIM_Period = BASIC_TIM_Period;// 自动重装载寄存器的值:1000-1TIM_TimeBaseStructure.TIM_Prescaler= BASIC_TIM_Prescaler;// 时钟预分频数:72-1//TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 时钟分频因子 ,基本定时器没有,不用管//TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 计数器计数模式,基本定时器只能向上计数,没有计数模式的设置//TIM_TimeBaseStructure.TIM_RepetitionCounter=0;// 重复计数器的值,基本定时器没有,不用管  TIM_TimeBaseInit(BASIC_TIM, &TIM_TimeBaseStructure);// 初始化定时器TIM_ClearFlag(BASIC_TIM, TIM_FLAG_Update);// 清除计数器中断标志位TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE);// 开启计数器中断TIM_Cmd(BASIC_TIM, ENABLE);	// 使能计数器
}
(3)设定中断事件

当TIM6累计TIM_Period个频率后就会产生一个中断执行中断程序

中断配置函数:

// dym4:中断优先级配置
static void BASIC_TIM_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 设置中断组为0NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM_IRQ ;// 设置中断来源:TIM6_IRQnNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// 设置主优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	//配置子优先级为:3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断通道NVIC_Init(&NVIC_InitStructure);
}

中断执行函数:

//dym5:中断执行函数
void  BASIC_TIM_IRQHandler (void)
{if ( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET ) //按本文的设置1ms触发一次{	time++;//main函数的全局变量TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update); //把相应的中断标志位清除掉,切记 		 }		 	
}
(4)主函数计数

设置全局变量time,定时器1ms,若实现1s转换一次LED灯,则time计数到1000

volatile uint32_t time = 0; // ms 计时变量 int main(void)
{/* led 端口配置 */ LED_GPIO_Config();/* Time 端口配置 */ BASIC_TIM_Init();while(1){if ( time == 1000 ) /* 1000 * 1 ms = 1s 时间到 */{time = 0;/* LED1 取反 */      LED1_TOGGLE; }        }
}

3、工程代码

31_test_TimBase.zip

三、通用定时器实验

实验一:常规计时

1、实验说明

本实验利用基本定时器 TIM2/3/4/5 定时 1s,1s 时间到 LED 翻转一次。基本定时器是单片机内部的资源, 没有外部 IO,不需要接外部电路,现只需要一个 LED 即可。

2、编程过程

(1)配置LED

STM32(四):STM32指南者-跑马灯实验

(2)配置定时器

定时器配置参数:

/**************通用定时器TIM参数定义,只限TIM2、3、4、5************/
// 当需要哪个定时器的时候,只需要把下面的宏定义改成1即可
#define GENERAL_TIM2    1
#define GENERAL_TIM3    0
#define GENERAL_TIM4    0
#define GENERAL_TIM5    0#if  GENERAL_TIM2
//1、TIM6时钟配置
#define            GENERAL_TIM                   TIM2//使用时钟
#define            GENERAL_TIM_APBxClock_FUN     RCC_APB1PeriphClockCmd//APB1时钟启动函数
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM2//APB1_TIM2内部时钟CK_INT=72M
#define            GENERAL_TIM_IRQ               TIM2_IRQn//定时器TIM6
#define            GENERAL_TIM_IRQHandler        TIM2_IRQHandler
//2、基本定时器参数配置
#define            GENERAL_TIM_Prescaler         71//时钟预分频数,则驱动计数器的时钟CK_CNT = CK_INT / (71+1)=1M;可设置范围为0至65535,实现1至65536分频  
#define            GENERAL_TIM_Period            (1000-1)//自动重装载寄存器周的值(计数值),则1s/1MHz*1000=1ms,可设置范围为0至65535;累计TIM_Period个频率后产生一个更新或者中断#elif  GENERAL_TIM3
#define            GENERAL_TIM                   TIM3
#define            GENERAL_TIM_APBxClock_FUN     RCC_APB1PeriphClockCmd
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM3
#define            GENERAL_TIM_Period            (1000-1)
#define            GENERAL_TIM_Prescaler         71
#define            GENERAL_TIM_IRQ               TIM3_IRQn
#define            GENERAL_TIM_IRQHandler        TIM3_IRQHandler#elif   GENERAL_TIM4
#define            GENERAL_TIM                   TIM4
#define            GENERAL_TIM_APBxClock_FUN     RCC_APB1PeriphClockCmd
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM4
#define            GENERAL_TIM_Period            (1000-1)
#define            GENERAL_TIM_Prescaler         71
#define            GENERAL_TIM_IRQ               TIM4_IRQn
#define            GENERAL_TIM_IRQHandler        TIM4_IRQHandler#elif   GENERAL_TIM5
#define            GENERAL_TIM                   TIM5
#define            GENERAL_TIM_APBxClock_FUN     RCC_APB1PeriphClockCmd
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM5
#define            GENERAL_TIM_Period            (1000-1)
#define            GENERAL_TIM_Prescaler         71
#define            GENERAL_TIM_IRQ               TIM5_IRQn
#define            GENERAL_TIM_IRQHandler        TIM5_IRQHandler#endif

定时器配置函数:

//3、通用定时器模式配置
static void GENERAL_TIM_Mode_Config(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;	//时钟结构体GENERAL_TIM_APBxClock_FUN(GENERAL_TIM_CLK, ENABLE);// 开启内部定时器时钟TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period;// 自动重装载寄存器的值:1000-1TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler;// 时钟预分频数:72-1TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 时钟分频因子 ,没用到不用管TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 计数器计数模式,设置为向上计数TIM_TimeBaseStructure.TIM_RepetitionCounter=0;// 重复计数器的值,没用到不用管  TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);// 初始化定时器TIM_ClearFlag(GENERAL_TIM, TIM_FLAG_Update);// 清除计数器中断标志位TIM_ITConfig(GENERAL_TIM,TIM_IT_Update,ENABLE);// 开启计数器中断TIM_Cmd(GENERAL_TIM, ENABLE);	// 使能计数器
}
(3)设定中断事件

当TIM2/3/4/5累计TIM_Period个频率后就会产生一个中断执行中断程序

中断配置函数:

// dym4:中断优先级配置
static void GENERAL_TIM_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 设置中断组为0NVIC_InitStructure.NVIC_IRQChannel = GENERAL_TIM_IRQ;// 设置中断来源:TIM2/3/4/5_IRQnNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// 设置主优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	//配置子优先级为:3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断通道NVIC_Init(&NVIC_InitStructure);
}

中断执行函数:

//dym5:中断执行函数
void  GENERAL_TIM_IRQHandler(void)
{if ( TIM_GetITStatus( GENERAL_TIM, TIM_IT_Update) != RESET ) //按本文的设置1ms触发一次{	time++;//main函数的全局变量TIM_ClearITPendingBit(GENERAL_TIM, TIM_FLAG_Update); //把相应的中断标志位清除掉,切记 		 }		 	
}
(4)主函数计数

设置全局变量time,定时器1ms,若实现1s转换一次LED灯,则time计数到1000

volatile uint32_t time = 0; // ms 计时变量 int main(void)
{/* led 端口配置 */ LED_GPIO_Config();/* Time 端口配置 */ GENERAL_TIM_Init();while(1){if ( time == 1000 ) /* 1000 * 1 ms = 1s 时间到 */{time = 0;/* LED1 取反 */      LED1_TOGGLE; }        }
}

3、工程代码

32_test_TimGeneral1.zip

四、高级定时器实验

实验一:常规计时

1、实验说明

本实验利用基本定时器 TIM1/8 定时 1s,1s 时间到 LED 翻转一次。基本定时器是单片机内部的资源, 没有外部 IO,不需要接外部电路,现只需要一个 LED 即可。

2、编程过程

(1)配置LED

STM32(四):STM32指南者-跑马灯实验

(2)配置定时器

定时器配置参数:

/********************高级定时器TIM参数定义,只限TIM1、8************/
#define ADVANCE_TIM1 // 如果使用TIM8,注释掉这个宏即可#ifdef  ADVANCE_TIM1 // 使用高级定时器TIM1
//1、TIM1时钟配置
#define            ADVANCE_TIM                   TIM1//使用时钟
#define            ADVANCE_TIM_APBxClock_FUN     RCC_APB2PeriphClockCmd//APB1时钟启动函数
#define            ADVANCE_TIM_CLK               RCC_APB2Periph_TIM1//APB1_TIM2内部时钟CK_INT=72M
#define            ADVANCE_TIM_IRQ               TIM1_UP_IRQn//定时器TIM1
#define            ADVANCE_TIM_IRQHandler        TIM1_UP_IRQHandler
//2、基本定时器参数配置
#define            ADVANCE_TIM_Prescaler         71//时钟预分频数,则驱动计数器的时钟CK_CNT = CK_INT / (71+1)=1M;可设置范围为0至65535,实现1至65536分频  
#define            ADVANCE_TIM_Period            (1000-1)//自动重装载寄存器周的值(计数值),则1s/1MHz*1000=1ms,可设置范围为0至65535;累计TIM_Period个频率后产生一个更新或者中断#else  // 使用高级定时器TIM8
#define            ADVANCE_TIM                   TIM8
#define            ADVANCE_TIM_APBxClock_FUN     RCC_APB2PeriphClockCmd
#define            ADVANCE_TIM_CLK               RCC_APB2Periph_TIM8
#define            ADVANCE_TIM_Period            (1000-1)
#define            ADVANCE_TIM_Prescaler         71
#define            ADVANCE_TIM_IRQ               TIM8_UP_IRQn
#define            ADVANCE_TIM_IRQHandler        TIM8_UP_IRQHandler#endif

定时器配置函数:

//3、通用定时器模式配置
static void ADVANCE_TIM_Mode_Config(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;	//时钟结构体GENERAL_TIM_APBxClock_FUN(ADVANCE_TIM_CLK, ENABLE);// 开启内部定时器时钟TIM_TimeBaseStructure.TIM_Period=ADVANCE_TIM_Period;// 自动重装载寄存器的值:1000-1TIM_TimeBaseStructure.TIM_Prescaler= ADVANCE_TIM_Prescaler;// 时钟预分频数:72-1TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 时钟分频因子 ,没用到不用管TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 计数器计数模式,设置为向上计数TIM_TimeBaseStructure.TIM_RepetitionCounter=0;// 重复计数器的值,没用到不用管  TIM_TimeBaseInit(ADVANCE_TIM, &TIM_TimeBaseStructure);// 初始化定时器TIM_ClearFlag(ADVANCE_TIM, TIM_FLAG_Update);// 清除计数器中断标志位TIM_ITConfig(ADVANCE_TIM,TIM_IT_Update,ENABLE);// 开启计数器中断TIM_Cmd(ADVANCE_TIM, ENABLE);	// 使能计数器
}
(3)设定中断事件

当TIM1/8累计TIM_Period个频率后就会产生一个中断执行中断程序

中断配置函数:

// dym4:中断优先级配置
static void GENERAL_TIM_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 设置中断组为0NVIC_InitStructure.NVIC_IRQChannel = ADVANCE_TIM_IRQ;// 设置中断来源:TIM1/8_IRQnNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// 设置主优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	//配置子优先级为:3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断通道NVIC_Init(&NVIC_InitStructure);
}

中断执行函数:

//dym5:中断执行函数
void  ADVANCE_TIM_IRQHandler(void)
{if ( TIM_GetITStatus( ADVANCE_TIM, TIM_IT_Update) != RESET ) //按本文的设置1ms触发一次{	time++;//main函数的全局变量TIM_ClearITPendingBit(ADVANCE_TIM, TIM_FLAG_Update); //把相应的中断标志位清除掉,切记 		 }		 	
}
(4)主函数计数

设置全局变量time,定时器1ms,若实现1s转换一次LED灯,则time计数到1000

volatile uint32_t time = 0; // ms 计时变量 int main(void)
{/* led 端口配置 */ LED_GPIO_Config();/* Time 端口配置 */ ADVANCE_TIM_Init();while(1){if ( time == 1000 ) /* 1000 * 1 ms = 1s 时间到 */{time = 0;/* LED1 取反 */      LED1_TOGGLE; }        }
}

3、工程代码

33_test_TimAdvance1.zip

五、内核定时器实验

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

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

相关文章

开放式蓝牙耳机哪个牌子实惠又好用?五款黑马产品任你选

近几年兴起的开放式蓝牙耳机,具有佩戴舒适稳固、不影响使用者判断外界环境等优点,十分适合在户外环境下使用,因此受到了众多健身人士的喜爱。那么该如何挑选到一款适合自己的开放式耳机呢?开放式蓝牙耳机哪个牌子实惠又好用&#…

2024计算机毕设选题技巧|论文写作指南|更多成品项目

💻 芋圆带你做毕设:你的毕设好帮手 👋 博主介绍: 我是芋圆,全网粉丝20W,CSDN计算机领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。大学期间,我不仅协助指导老师进行毕…

对LinkedList ,单链表和双链表的理解

一.ArrayList的缺陷 二.链表 三.链表部分相关oj面试题 四.LinkedList的模拟实现 五.LinkedList的使用 六.ArrayList和LinkedList的区别 一.ArrayList的缺陷: 1. ArrayList底层使用 数组 来存储元素,如果不熟悉可以来再看看: ArrayList与顺序表-CSDN…

12.C++模板进阶 | 代码膨胀

目录 0.引入 函数模板 类模板 1. 非类型模板参数 运用 array 2. 函数模板的特化 2.1 概念 2.2 类模板的特化 全特化 偏特化 3. 模板不可以分离编译 回顾类和对象 3.1 什么是分离编译 3.2 模板的分离编译 4. 模板总结 代码膨胀 代码膨胀的影响: 代…

STM32 BootLoader 刷新项目 (五) 获取软件版本号-命令0x51

STM32 BootLoader 刷新项目 (五) 获取软件版本号-命令0x51 下面我们来讲解第一个指令,获取软件版本号命令-0x51. 在BootLoader中获取软件版本号的操作有多个重要的作用,具体如下: 版本管理: 识别当前版本:通过获取软…

AI+折叠屏,荣耀的创新周期论

文|刘俊宏 编|王一粟 2024年,AI和折叠屏的演进路线,已经成为了手机行业的共识。 首先,手机市场的新增量已经被折叠屏所接管。据Counterpoint Research数据显示,中国2024年第一季度折叠屏手机销量同比增长…

BUUCTF逆向wp [HDCTF2019]Maze

第一步 查壳,本题是32位,有壳,进行脱壳。 第二步 这里的 jnz 指令会实现一个跳转,并且下面的0EC85D78Bh被标红了,应该是一个不存在的地址,这些东西就会导致IDA无法正常反汇编出原始代码,也称…

【系统架构设计】数据库系统(一)

数据库系统(一) 数据库模式与范式数据库的结构与模式数据模型关系代数数据的规范化反规范化 数据库设计事务管理备份与恢复分布式数据库系统数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库的结构与模式 数据库技术中采用分级的方法将数据库的结…

萝卜快跑无人出租车是有人远程代驾? 客服:没有人操控

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 近期“萝卜快跑”无人驾驶网约车相关话题引发网友热议。 有网传图片显示,萝卜快跑机器人智控中心,有真人坐在带有方向盘的屏幕前; 有网友认为所谓的无人网约车&am…

【设计模式】【创建型模式】【02工厂模式】

系列文章 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 系…

C++链接FTP服务器并下载数据(在qt中编写)

.pro文件 #------------------------------------------------- # # Project created by QtCreator 2024-07-16T13:19:03 # #-------------------------------------------------QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET untitled TE…

通过SchedulingConfigurer 接口完成动态定时任务

通过SchedulingConfigurer 接口完成动态定时任务 一.背景 在Spring中,除了使用Scheduled注解外,还可以通过实现SchedulingConfigurer接口来创建定时任务。它们之间的主要区别在于灵活性和动态性。Scheduled注解适用于固定周期的任务,一旦任…

【C++数据结构】二叉搜索树(超详细图解操作过程,超详细讲解代码实现)

目录 01.二叉搜索树的概念 02.二叉搜索树的操作过程 03.二叉搜索树的代码实现 (1)基本框架 (2)树的创建与销毁 (3)元素的查找 (4)元素的插入 (5)元素的…

Day71 代码随想录打卡|回溯算法篇---全排列

题目(leecode T46): 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 方法:全排列是数学中的基础问题,也是回溯算法能解决的经典问题。全排列因为每个元素都会…

卷积神经网络学习问题总结

问题一: 深度学习中的损失函数和应用场景 回归任务: 均方误差函数(MSE)适用于回归任务,如预测房价、预测股票价格等。 import torch.nn as nn loss_fn nn.MSELoss() 分类任务: 交叉熵损失函数&…

AI算法19-偏最小二乘法回归算法Partial Least Squares Regression | PLS

偏最小二乘法回归算法简介 算法概述 偏最小二乘法模型可分为偏最小二乘回归模型和偏最小二乘路径模型。其中偏最小二乘回归模型是一种新型的多元统计方法,它集中了主成分分析、典型相关分析和线性回归的特点,特别在解决回归中的共线性问题具有无可比拟…

PX4 运行 make px4_sitl_default gazebo 报错

报错原因:最开始我把依赖一直都是在base环境下安装的,没有conda deactivate,而pip install的东西应该装在系统环境,不能装在base环境下,sudo apt 是装在系统环境的 1.检查ros 用鱼香ros安装 wget http://fishros.…

日活2.5亿的Twitter 使用了哪些数据库?

Twitter 使用什么数据库存储用户每天发送的数亿条推文?是 SQL、NoSQL 还是其它持久化存储系统? Twitter 使用什么数据库? 任何一个稍微有点规模的系统其存储层绝不会只使用一种数据库,服务于数以亿计用户的Twitter更是如此。Twit…

《YOLOv10改进实战专栏》专栏介绍 专栏目录

《YOLOv10改进实战专栏》介绍及目录 YOLOv10官方仓库地址 专栏地址:点击跳转 专栏导航如下: 🎀基础入门篇🎀 万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指…

Vue学习---vue cli 项目创建

使用的编辑工具webStorm 创建例子: hello vue create hello 选择 vue3 进行创建 运行 npm run serve 测试访问:http://localhost:8080 改动内容重新编译: npm run build dist 目录就是编译后的可运行内容