当前位置: 首页 > news >正文

STM32的TIM1之PWM互补输出_死区时间和刹车配置

STM32的TIM1之PWM互补输出_死区时间和刹车配置

1、定时器1的PWM输出通道

STM32高级定时器TIM1在用作PWM互补输出时,共有4个输出通道,其中有3个是互补输出通道,如下:

通道1:TIM1_CH1对应PA8引脚,TIM1_CH1N对应PB13引脚;

通道2:TIM1_CH2对应PA9引脚,TIM1_CH2N对应PB14引脚;

通道3:TIM1_CH3对应PA10引脚,TIM1_CH3N对应PB15引脚;

通道4:TIM1_CH4对应PA11引脚;

STM32高级定时器TIM1的PWM刹车引脚TIM1_BKIN对应PB12引脚;

2、PWM互补输出的意义

在使用互补输出时,通常需要考虑死区时间,防止互补引脚控制的功率管同时而导通引起烧坏。见下图:

如果死区Deadtime>0,则在TIM1_CH1和TIM1_CH1N输出波形中插入“死区时间”,可防止TIM1_CH1和TIM1_CH1N控制的功率管同时导通。

3、互补输出

如果死区Deadtime=0,则TIM1_CH1N的输出波形是TIM1_CH1的反相;当死区时间为0,且没有收到刹车信号时,如果TIM1_CH1输出高电平,则TIM1_CH1N一定会输出低电平,我们称之为互补输出。

4、PWM刹车

PWM刹车,就是停止PWM输出波形。

5、PWM的“有效电平”和“无效电平”定义:

在PWM模式1中

1)、在向上计数时,一旦TIMx_CNT<TIMx_CCR1时,通道1引脚输出“有效电平”,否则输出“无效电平”;

2)、在向下计数时,一旦TIMx_CNT>TIMx_CCR1时,通道1引脚输出“无效电平”(OC1REF=0),否则输出“有效电平”(OC1REF=1)。

在PWM模式2中

1)、在向上计数时,一旦TIMx_CNT<TIMx_CCR1时,通道1引脚输出“无效电平”,否则输出“有效电平”;

2)、在向下计数时,一旦TIMx_CNT>TIMx_CCR1时,通道1引脚输出“有效电平”,否则输出“无效电平”。

6、PWM在死区期间输出的电平

1)、若配置了死区时间,则在死区期间,通道1引脚输出的电平和其“无效电平”保持一致。

2)、将“死区期间和无效电平期间”的TIM1_CH1和TIM1_CH1N配置输出为低电平:

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

//TIM1_CH1引脚输出有效电平为高电平,则在死区期间和无效电平期间均为低电平

TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;

// TIM1_CH1N引脚输出有效电平为高电平,则在死区期间和无效电平期间均为低电平

3)、死区时间

  TIM_BDTRInitStructure.TIM_DeadTime = 11;

  //输出比较信号死区时间配置,具体如何计算可参考 BDTR:DTG[7:0]的描述

  //DTG[7:5]=0xx => DT=DTG[7:0]*tdtg,这里的tdtg=tDTS.

  //DTG[7:5]=10x => DT=(64+DTG[5:0])*tdtg,这里的Tdtg=2*tDTS.

  //DTG[7:5]=110 => DT=(32+DTG[4:0])*tdtg,这里的Tdtg=8*tDTS.

  //DTG[7:5]=111 => DT=(32+DTG[4:0])*tdtg,这里的Tdtg=16*tDTS.

  //tDTS=tCKINT=1/72000000=13.8ns,11*13.8=152.7ns

  //这里配置的死区时间为152ns

7、PWM空闲电平极性配置和PWM刹车的关系

TIM1_CH1和TIM1_CH1N引脚的“空闲电平极性”指的是在“刹车”时TIM1_CH1和TIM1_CH1N引脚输出的极性。

刹车输出配置:

1)、TIM1_CH1和TIM1_CH1N输出配置为互异电平,可能会导致无法刹车;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

2)、TIM1_CH1和TIM1_CH1N输出同时配置为低电平,当刹车信号到来时,会执行有效刹车;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

3)、TIM1_CH1和TIM1_CH1N输出同时配置为高电平,当刹车信号到来时,会执行有效刹车;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;

8、TIM1之PWM程序举例:

void TIM1_GPIO_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

/// TIM1_CH1引脚初始化///

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    //使能PA口时钟

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;

  //PA8为TIM1_CH1通道,TIM1输出比较通道

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  //设置引脚为复用推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  //设置引脚的最高输出速率为50MHz

  GPIO_Init(GPIOA, &GPIO_InitStructure);

 /// TIM1_CH1N引脚初始化///

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13;

  //PB13为TIM1_CH1N通道,TIM1输出比较通道的互补通道

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  //设置引脚为复用推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  //设置引脚的最高输出速率为50MHz

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  //TIM1_BKIN刹车引脚初始化/

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12;

   //PB12对应TIM1_BKIN,为PWM刹车引脚

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

   //设置引脚为浮空输入 

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  //设置引脚的最高输出速率为50MHz

  GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void TIM1_Mode_Config(void)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; //时基结构体

    TIM_OCInitTypeDef  TIM_OCInitStructure;         //输出比较结构体

    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;      //刹车结构体

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

    //使能TIM1时钟,即内部时钟CK_INT=72M

/*--------------------时基结构体初始化-------------------------*/

    TIM_TimeBaseStructure.TIM_Period=(8-1);//周期ARR

//自动重装载寄存器的值,累计(TIM_Period+1)个"分频时钟"后产生一个更新或者中断

    TIM_TimeBaseStructure.TIM_Prescaler= (9-1);

    //TIM1时钟分频因子PSC

    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

    //时钟分频因子 = 1,tDTS=tCKINT

    //PWM 信号的频率 F = TIM_CLK/{(ARR+1)*(PSC+1)}

    //72000000/(8*9)=1000000Hz=1MHz

    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

    //计数器计数模式,设置为向上计数

    TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

    //重复计数器的值,没用到不用管

    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);//初始化定时器

    /*--------------------输出比较结构体初始化-------------------*/

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

    //配置为PWM模式1

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

    //PWM输出使能

    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;

    //互补输出使能

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  //TIM1_CH1引脚输出有效电平为高电平,则在死区期间和无效期间均为低电平

  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;

  //TIM1_CH1N引脚输出有效电平为高电平,则在死区期间和无效空闲期间均为低电平

//TIM1_CH1和TIM1_CH1N输出配置为互异电平,导致会无法刹车,死区期间的输出电平这个设置无关/

//  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

//刹车时,TIM1_CH1引脚为高电平

//  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

//刹车时,互补输出TIM1_CH1N引脚为低电平

//TIM1_CH1和TIM1_CH1N输出同时配置为低电平,当刹车信号到来时,会执行有效刹车/

    TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;

    //刹车时,TIM1_CH1引脚为低电平

    TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

    //刹车时,互补输出TIM1_CH1N引脚为低电平

//TIM1_CH1和TIM1_CH1N输出同时配置为高电平,当刹车信号到来时,会执行有效刹车/

//  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

//刹车时,TIM1_CH1引脚为高电平

//  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;

//刹车时,TIM1_CH1N引脚为高电平

    TIM_OCInitStructure.TIM_Pulse = (5-1); //占空比 = 4 / 8 = 50%

    TIM_OC1Init(TIM1, &TIM_OCInitStructure);//初始化PWM输出通道1

    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

    //开启通道1预装载,在更新时间后才会重新装载数值

    /*-------------------刹车和死区结构体初始化-------------------*/

    // 有关刹车和死区结构体的成员具体可参考BDTR寄存器的描述

  TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;

  //运行模式下“关闭模式”选择 = 1

  TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;

  //空闲模式下“关闭模式”选择 = 1

  TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;

  //锁定级别1,见参考手册

  TIM_BDTRInitStructure.TIM_DeadTime = 11;

    //输出比较信号死区时间配置,具体如何计算可参考 BDTR:DTG[7:0]的描述

  //DTG[7:5]=0xx => DT=DTG[7:0]*tdtg,这里的tdtg=tDTS.

  //DTG[7:5]=10x => DT=(64+DTG[5:0])*tdtg,这里的Tdtg=2*tDTS.

  //DTG[7:5]=110 => DT=(32+DTG[4:0])*tdtg,这里的Tdtg=8*tDTS.

  //DTG[7:5]=111 => DT=(32+DTG[4:0])*tdtg,这里的Tdtg=16*tDTS.

    //tDTS=tCKINT=1/72000000=13.8ns,11*13.8=152.7ns

    //这里配置的死区时间为152ns

  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;//开启刹车功能

  TIM_BDTRInitStructure.TIM_BreakPolarity =TIM_BreakPolarity_Low;

  //PWM刹车时,输入低电平有效,则不会产生任何PWM输出波形

  TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;

  //开启自动输出

  TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);

    TIM_Cmd(TIM1, ENABLE);//使能定时器,计数器开始计数  

    TIM_CtrlPWMOutputs(TIM1, ENABLE);

    //主输出使能,当使用的是通用定时器时,这句不需要

}

void TIM1_PWM_Init(void)

{

    TIM1_GPIO_Config();

    TIM1_Mode_Config();

}

9、测试结果

PWM刹车实验

相关文章:

STM32的TIM1之PWM互补输出_死区时间和刹车配置

STM32的TIM1之PWM互补输出_死区时间和刹车配置 1、定时器1的PWM输出通道 STM32高级定时器TIM1在用作PWM互补输出时&#xff0c;共有4个输出通道&#xff0c;其中有3个是互补输出通道&#xff0c;如下&#xff1a; 通道1&#xff1a;TIM1_CH1对应PA8引脚,TIM1_CH1N对应PB13引…...

C++复习的长文指南

C复习的长文指南 一、入门语法知识1.预备1.1 main函数1.2 注释1.3 变量1.3 常量1.4 关键字1.5 标识符明明规则 2. 数据类型2.1 整型2.1.1 sizeof关键字 2.2 实型&#xff08;浮点型&#xff09;2.3 字符型2.4 转义字符2.5 字符串型2.6 布尔类型bool2.7 数据的输入 3. 运算符3.1…...

深入了解MySQL文件排序

数据准备 CREATE TABLE user_info (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ID,name varchar(20) NOT NULL COMMENT 用户名,age tinyint(4) NOT NULL DEFAULT 0 COMMENT 年龄,sex tinyint(2) NOT NULL DEFAULT 0 COMMENT 状态 0&#xff1a;男 1&#xff1a; 女,creat…...

【JAVA基础】反射

编译期和运行期 首先大家应该先了解两个概念&#xff0c;编译期和运行期&#xff0c;编译期就是编译器帮你把源代码翻译成机器能识别的代码&#xff0c;比如编译器把java代码编译成jvm识别的字节码文件&#xff0c;而运行期指的是将可执行文件交给操作系统去执行&#xff0c; …...

贪心算法(2024/7/16)

1合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;inter…...

Python 在Word表格中插入、删除行或列

Word文档中的表格可以用于组织和展示数据。在实际应用过程中&#xff0c;有时为了调整表格的结构或适应不同的数据展示需求&#xff0c;我们可能会需要插入、删除行或列。以下提供了几种使用Python在Word表格中插入或删除行、列的方法供参考&#xff1a; 文章目录 Python 在Wo…...

Java二十三种设计模式-单例模式(1/23)

引言 在软件开发中&#xff0c;设计模式是一套被反复使用的、大家公认的、经过分类编目的代码设计经验的总结。单例模式作为其中一种创建型模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。本文将深入探讨单例模式的概念、实现方式、使用场景以及潜…...

Unity动画系统(3)---融合树

6.1 动画系统基础2-6_哔哩哔哩_bilibili Animator类 using System.Collections; using System.Collections.Generic; using UnityEngine; public class EthanController : MonoBehaviour { private Animator ani; private void Awake() { ani GetComponen…...

sqlalchemy.orm中validates对两个字段进行联合校验

版本 sqlalchemy1.4.37 需求说明 有个场景&#xff0c;需要在orm中对两个字段进行联合校验&#xff0c;当 col1 xxx’时&#xff0c;对 col2的长度进行检查&#xff0c;超过限制&#xff08;500&#xff09;时&#xff0c;进行截断。 网上找了很久&#xff0c;没找到类似的…...

【ROS2】高级:解锁 Fast DDS 中间件的潜力 [社区贡献]

目标&#xff1a;本教程将展示如何在 ROS 2 中使用 Fast DDS 的扩展配置功能。 教程级别&#xff1a;高级 时间&#xff1a;20 分钟 目录 背景 先决条件在同一个节点中混合同步和异步发布 创建具有发布者的节点创建包含配置文件的 XML 文件执行发布者节点创建一个包含订阅者的节…...

VirtualBox虚拟机与主机互传文件的方法

建立共享文件夹 1.点击设置&#xff0c;点击共享文件夹&#xff0c;添加共享文件夹路径&#xff0c;保存 2.启动虚拟机&#xff0c;点击设备&#xff0c;点击安装增强功能&#xff0c;界面会出现一个光碟图标&#xff0c;点击光碟图标 3.打开光碟图标&#xff0c;出现一个目…...

访问控制系列

目录 一、基本概念 1.客体与主体 2.引用监控器与引用验证机制 3.安全策略与安全模型 4.安全内核 5.可信计算基 二、访问矩阵 三、访问控制策略 1.主体属性 2.客体属性 3.授权者组成 4.访问控制粒度 5.主体、客体状态 6.历史记录和上下文环境 7.数据内容 8.决策…...

【BUG】已解决:ModuleNotFoundError: No module named ‘cv2’

已解决&#xff1a;ModuleNotFoundError: No module named ‘cv2’ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开…...

成都亚恒丰创教育科技有限公司 【插画猴子:笔尖下的灵动世界】

在浩瀚的艺术海洋中&#xff0c;每一种创作形式都是人类情感与想象力的独特表达。而插画&#xff0c;作为这一广阔领域中的璀璨明珠&#xff0c;以其独特的视觉语言和丰富的叙事能力&#xff0c;构建了一个又一个令人遐想连篇的梦幻空间。成都亚恒丰创教育科技有限公司 在众多插…...

gite+picgo+typora打造个人免费笔记软件

文章目录 1️⃣个人笔记软件2️⃣ 配置教程2.1 使用软件2.2 node 环境配置2.3 软件安装2.4 gite仓库设置2.5 配置picgo2.6 测试检验2.7 github教程 &#x1f3a1; 完结撒花 1️⃣个人笔记软件 最近换了环境&#xff0c;没有之前的生产环境舒适&#xff0c;写笔记也没有劲头&…...

只用 CSS 能玩出什么花样?

在前端开发领域&#xff0c;CSS 不仅仅是一种样式语言&#xff0c;它更像是一位多才多艺的艺术家&#xff0c;能够创造出令人惊叹的视觉效果。本文将带你探索 CSS 的无限可能&#xff0c;从基本形状到动态动画&#xff0c;从几何艺术到仿生设计&#xff0c;只用 CSS 就能玩出令…...

Linux C++ 056-设计模式之迭代器模式

Linux C 056-设计模式之迭代器模式 本节关键字&#xff1a;Linux、C、设计模式、迭代器模式 相关库函数&#xff1a; 概念 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种常用的设计模式。迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而…...

【Elasticsearch7.11】reindex问题

参考博文链接 问题&#xff1a;reindex 时出现如下问题 原因&#xff1a;数据量大&#xff0c;kibana的问题 解决方法&#xff1a; 将DSL命令转化成CURL命令在服务上执行 CURL命令 自动转化 curl -XPOST "http://IP:PORT/_reindex" -H Content-Type: application…...

nginx代理缓存

在服务器架构中&#xff0c;反向代理服务器除了能够起到反向代理的作用之外&#xff0c;还可以缓存一些资源&#xff0c;加速客户端访问&#xff0c;nginx的ngx_http_proxy_module模块不仅包含了反向代理的功能还包含了缓存功能。 1、定义代理缓存规则 参数详解&#xff1a; p…...

[React 进阶系列] useSyncExternalStore hook

[React 进阶系列] useSyncExternalStore hook 前情提要&#xff0c;包括 yup 的实现在这里&#xff1a;yup 基础使用以及 jest 测试 简单的提一下&#xff0c;需要实现的功能是&#xff1a; yup schema 需要访问外部的 storage外部的 storage 是可变的React 内部也需要访问同…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...