以TIMER7为例,对定时器函数进行封装

注意事项:GD32中TIMER7是高级定时器,相关详细请参考上一篇文章。

 main.c

//main.c#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "Usart0.h"
#include "Timer.h"float duty0 = 0;
float duty1 = 0;
float duty2 = 0;void Usart0_on_recv(uint8_t* data, uint32_t len) {printf("recv: %s\r\n", data);if(data[0] == 0x00) {// T2 ch0 +Timer7_ch0_update(duty0++);} else if(data[0] == 0x01) {// T2 ch0 -Timer7_ch0_update(duty0--);} else if(data[0] == 0x02) {// T2 ch1 +Timer7_ch1_update(duty1++);} else if(data[0] == 0x03) {// T2 ch1 -Timer7_ch1_update(duty1--);} else if(data[0] == 0x04) {// T2 ch2 +Timer7_ch2_update(duty2++);} else if(data[0] == 0x05) {// T2 ch2 -Timer7_ch2_update(duty2--);}
}int main(void)
{systick_config();Usart0_init();Timer_init();while(1) {}
}

关心的内容

该代码中,data[0] == 0x00 等等是用来检查通过 USART0 (串口0) 接收到的数据的第一个字节是否为 0x00。这个 data 数组是通过 Usart0_on_recv 函数的参数传入的,而这个函数看起来是一个串口接收回调函数。 

Timer7.c 

//Timer7.c#include "Timer7.h"
#if USE_TIMER_7void Timer7_init() {// T7 ch0 ch1 ch2 ch3// PC6 PC7 PC8//哪个定时器uint32_t timer_rcu = RCU_TIMER7;uint32_t timer = TIMER7;//		uint32_t timer_rcu_psc = RCU_TIMER_PSC_MUL4;// 倍频//定时器周期和分频uint32_t timer_param_psc = TIMER7_PSC;uint32_t timer_param_period = TIMER7_PERIOD;/******************** GPIO *********************************/// // PC6 PC7 PC8
//////////// ch0
#if TIMER7_CH0_ENABLE// P和N
#if TIMER7_CH0_P_ENABLE// gpio初始化 ch0rcu_periph_clock_enable(TIMER7_CH0_P_PORT_RCU);gpio_mode_set(TIMER7_CH0_P_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, TIMER7_CH0_P_PIN);gpio_output_options_set(TIMER7_CH0_P_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, TIMER7_CH0_P_PIN);gpio_af_set(TIMER7_CH0_P_PORT, TIMER7_CH0_P_AF, TIMER7_CH0_P_PIN);
#endif
#if TIMER7_CH0_N_ENABLE// gpio初始化 ch0rcu_periph_clock_enable(TIMER7_CH0_N_PORT_RCU);gpio_mode_set(TIMER7_CH0_N_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, TIMER7_CH0_N_PIN);gpio_output_options_set(TIMER7_CH0_N_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, TIMER7_CH0_N_PIN);gpio_af_set(TIMER7_CH0_N_PORT, TIMER7_CH0_N_AF, TIMER7_CH0_N_PIN);
#endif
#endif//////////// ch1
#if TIMER7_CH1_ENABLE// P和N
#if TIMER7_CH1_P_ENABLE// gpio初始化 ch0rcu_periph_clock_enable(TIMER7_CH1_P_PORT_RCU);gpio_mode_set(TIMER7_CH1_P_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, TIMER7_CH1_P_PIN);gpio_output_options_set(TIMER7_CH1_P_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, TIMER7_CH1_P_PIN);gpio_af_set(TIMER7_CH1_P_PORT, TIMER7_CH1_P_AF, TIMER7_CH1_P_PIN);
#endif
#if TIMER7_CH1_N_ENABLE// gpio初始化 ch0rcu_periph_clock_enable(TIMER7_CH1_N_PORT_RCU);gpio_mode_set(TIMER7_CH1_N_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, TIMER7_CH1_N_PIN);gpio_output_options_set(TIMER7_CH1_N_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, TIMER7_CH1_N_PIN);gpio_af_set(TIMER7_CH1_N_PORT, TIMER7_CH1_N_AF, TIMER7_CH1_N_PIN);
#endif
#endif
//////////// ch2
#if TIMER7_CH2_ENABLE// P和N
#if TIMER7_CH2_P_ENABLE// gpio初始化 ch0rcu_periph_clock_enable(TIMER7_CH2_P_PORT_RCU);gpio_mode_set(TIMER7_CH2_P_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, TIMER7_CH2_P_PIN);gpio_output_options_set(TIMER7_CH2_P_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, TIMER7_CH2_P_PIN);gpio_af_set(TIMER7_CH2_P_PORT, TIMER7_CH2_P_AF, TIMER7_CH2_P_PIN);
#endif
#if TIMER7_CH2_N_ENABLE// gpio初始化 ch0rcu_periph_clock_enable(TIMER7_CH2_N_PORT_RCU);gpio_mode_set(TIMER7_CH2_N_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, TIMER7_CH2_N_PIN);gpio_output_options_set(TIMER7_CH2_N_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, TIMER7_CH2_N_PIN);gpio_af_set(TIMER7_CH2_N_PORT, TIMER7_CH2_N_AF, TIMER7_CH2_N_PIN);
#endif
#endif
//////////// ch3
#if TIMER7_CH3_ENABLE// P和N
#if TIMER7_CH3_P_ENABLE// gpio初始化 ch0rcu_periph_clock_enable(TIMER7_CH3_P_PORT_RCU);gpio_mode_set(TIMER7_CH3_P_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, TIMER7_CH3_P_PIN);gpio_output_options_set(TIMER7_CH3_P_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, TIMER7_CH3_P_PIN);gpio_af_set(TIMER7_CH3_P_PORT, TIMER7_CH3_P_AF, TIMER7_CH3_P_PIN);
#endif
#if TIMER7_CH3_N_ENABLE// gpio初始化 ch0rcu_periph_clock_enable(TIMER7_CH3_N_PORT_RCU);gpio_mode_set(TIMER7_CH3_N_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, TIMER7_CH3_N_PIN);gpio_output_options_set(TIMER7_CH3_N_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, TIMER7_CH3_N_PIN);gpio_af_set(TIMER7_CH3_N_PORT, TIMER7_CH3_N_AF, TIMER7_CH3_N_PIN);
#endif
#endif/************************ timer ************************/// 初始化定时器相关配置rcu_periph_clock_enable(timer_rcu);timer_deinit(timer);timer_parameter_struct tps;timer_struct_para_init(&tps);//配置默认值// 根据实际需求去修改值tps.prescaler         = timer_param_psc;tps.period            = timer_param_period; // 周期计数(从0开始计数)timer_init(timer, &tps);/*************** timer CH 配置 **********************/timer_oc_parameter_struct tops;// 定时器通道配置  CH0
//////////////// ch0
#if TIMER7_CH0_ENABLEtimer_channel_output_struct_para_init(&tops);// N和P
#if TIMER7_CH0_P_ENABLEtops.outputstate  = TIMER_CCX_ENABLE;tops.ocpolarity   = TIMER_OC_POLARITY_HIGH;
#endif
#if TIMER7_CH0_N_ENABLEtops.outputnstate = TIMER_CCXN_ENABLE;tops.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
#endiftimer_channel_output_config(timer, TIMER_CH_0 , &tops);timer_channel_output_mode_config(timer, TIMER_CH_0, TIMER_OC_MODE_PWM0);timer_channel_output_pulse_value_config(timer, TIMER_CH_0, 0);//pwm值
#endif
//////////////////////////////////////////
#if TIMER7_CH1_ENABLE// 定时器通道配置  CH1timer_channel_output_struct_para_init(&tops);// N和P
#if TIMER7_CH1_P_ENABLEtops.outputstate  = TIMER_CCX_ENABLE;
#endif
#if TIMER7_CH1_N_ENABLEtops.outputnstate = TIMER_CCXN_ENABLE;
#endiftimer_channel_output_config(timer, TIMER_CH_1 , &tops);timer_channel_output_mode_config(timer, TIMER_CH_1, TIMER_OC_MODE_PWM0);timer_channel_output_pulse_value_config(timer, TIMER_CH_1, 0);//pwm值
#endif
#if TIMER7_CH2_ENABLE// 定时器通道配置  CH2timer_channel_output_struct_para_init(&tops);// N和P
#if TIMER7_CH2_P_ENABLEtops.outputstate  = TIMER_CCX_ENABLE;
#endif
#if TIMER7_CH2_N_ENABLEtops.outputnstate = TIMER_CCXN_ENABLE;
#endiftimer_channel_output_config(timer, TIMER_CH_2 , &tops);timer_channel_output_mode_config(timer, TIMER_CH_2, TIMER_OC_MODE_PWM0);timer_channel_output_pulse_value_config(timer, TIMER_CH_2, 0);//pwm值
#endif
#if TIMER7_CH3_ENABLEtimer_channel_output_struct_para_init(&tops);
#if TIMER7_CH3_P_ENABLEtops.outputstate  = TIMER_CCX_ENABLE;
#endif
#if TIMER7_CH3_N_ENABLEtops.outputnstate = TIMER_CCXN_ENABLE;
#endiftimer_channel_output_config(timer, TIMER_CH_3 , &tops);timer_channel_output_mode_config(timer, TIMER_CH_3, TIMER_OC_MODE_PWM0);timer_channel_output_pulse_value_config(timer, TIMER_CH_3, 0);//pwm值
#endif//只针对高级定时器,break,保护电路,打开break电路timer_break_parameter_struct tbps;timer_break_struct_para_init(&tbps);tbps.breakpolarity   = TIMER_BREAK_POLARITY_HIGH;tbps.outputautostate = TIMER_OUTAUTO_ENABLE;tbps.breakstate      = TIMER_BREAK_ENABLE;timer_break_config(timer, &tbps);timer_break_enable(timer);timer_enable(timer);
}#if TIMER7_CH0_ENABLE
void Timer7_ch0_update(float duty){uint32_t timer = TIMER7;if(duty > 100) duty = 100;if(duty < 0) duty = 0;uint32_t  count = TIMER7_PERIOD + 1;uint32_t pulse = count * duty / 100 - 1;//计数值timer_channel_output_pulse_value_config(timer, TIMER_CH_0, pulse);//pwm值
}
#endif#if TIMER7_CH1_ENABLE
void Timer7_ch1_update(float duty){uint32_t timer = TIMER7;if(duty > 100) duty = 100;if(duty < 0) duty = 0;uint32_t  count = TIMER7_PERIOD + 1;uint32_t pulse = count * duty / 100 - 1;//计数值timer_channel_output_pulse_value_config(timer, TIMER_CH_1, pulse);//pwm值
}
#endif#if TIMER7_CH2_ENABLE
void Timer7_ch2_update(float duty){uint32_t timer = TIMER7;if(duty > 100) duty = 100;if(duty < 0) duty = 0;uint32_t  count = TIMER7_PERIOD + 1;uint32_t pulse = count * duty / 100 - 1;//计数值timer_channel_output_pulse_value_config(timer, TIMER_CH_2, pulse);//pwm值
}
#endif#if TIMER7_CH3_ENABLE
void Timer7_ch3_update(float duty){uint32_t timer = TIMER7;if(duty > 100) duty = 100;if(duty < 0) duty = 0;uint32_t  count = TIMER7_PERIOD + 1;uint32_t pulse = count * duty / 100 - 1;//计数值timer_channel_output_pulse_value_config(timer, TIMER_CH_3, pulse);//pwm值
}
#endif#endif

关心的内容

 TIMER7高级定时器,四通道

这里的引脚分为P和N类型,不同引脚要配置不同的输出状态

所以封装过程中需要分类

P、N配置

 Timer7.h

//Timer7.h#ifndef __TIMER_7_H__
#define __TIMER_7_H__#include "Timer_config.h"#if USE_TIMER_7// 1. 基本timer,有中断函数
// 2. timer, 控制多个通道的duty变化
// 3. timer, 控制周期频率动态变化
// 4. ARM中有很多timervoid Timer7_init();#if TIMER7_CH0_ENABLE
void Timer7_ch0_update(float duty);
#endif#if TIMER7_CH1_ENABLE
void Timer7_ch1_update(float duty);
#endif#if TIMER7_CH2_ENABLE
void Timer7_ch2_update(float duty);
#endif#if TIMER7_CH3_ENABLE
void Timer7_ch3_update(float duty);
#endif#endif
#endif

 Timer_config.h

//Timer_config.h#ifndef __TIMER_CONFIG_H__
#define __TIMER_CONFIG_H__#include "gd32f4xx.h"
#include "systick.h"#define USE_TIMER_0  	0
#define USE_TIMER_1  	0
#define USE_TIMER_2  	0
#define USE_TIMER_3  	0
#define USE_TIMER_4  	0
#define USE_TIMER_5  	0
#define USE_TIMER_6  	0
#define USE_TIMER_7  	1
#define USE_TIMER_8  	0
#define USE_TIMER_9  	0
#define USE_TIMER_10  0
#define USE_TIMER_11  0
#define USE_TIMER_12  0
#define USE_TIMER_13  0/*************** Timer 0 *************/
/*************** Timer 1 *************/
/*************** Timer 2 *************/
#if USE_TIMER_2
// 0: output	1: base timer		2: input
#define TIMER2_FUNC	0#if TIMER2_FUNC == 0
#define TIMER2_CH0_ENABLE 1
#define TIMER2_CH1_ENABLE 1
#define TIMER2_CH2_ENABLE 1
#define TIMER2_CH3_ENABLE 0
#endif/**
* TIMER2_PSC			(10 - 1)
* TIMER2_PERIOD		(SystemCoreClock / 10000 - 1)
* 表示10秒执行10000次
*/
#define TIMER2_PSC			(1 - 1)
#define TIMER2_PERIOD		(SystemCoreClock / 10000 - 1)#if TIMER2_CH0_ENABLE
// PA6(AF2),PB4(AF2),PC6(AF2)
#define TIMER2_CH0_PORT_RCU		RCU_GPIOC
#define TIMER2_CH0_PORT				GPIOC
#define TIMER2_CH0_PIN				GPIO_PIN_6
#define TIMER2_CH0_AF					GPIO_AF_2
#endif#if TIMER2_CH1_ENABLE
//PA7,PB5,PC7
#define TIMER2_CH1_PORT_RCU		RCU_GPIOC
#define TIMER2_CH1_PORT				GPIOC
#define TIMER2_CH1_PIN				GPIO_PIN_7
#define TIMER2_CH1_AF					GPIO_AF_2
#endif#if TIMER2_CH2_ENABLE
//PB0,PC8
#define TIMER2_CH2_PORT_RCU		RCU_GPIOC
#define TIMER2_CH2_PORT				GPIOC
#define TIMER2_CH2_PIN				GPIO_PIN_8
#define TIMER2_CH2_AF					GPIO_AF_2
#endif#if TIMER2_CH3_ENABLE
//PB1,PC9
#define TIMER2_CH3_PORT_RCU		RCU_GPIOC
#define TIMER2_CH3_PORT				GPIOC
#define TIMER2_CH3_PIN				GPIO_PIN_6
#define TIMER2_CH3_AF					GPIO_AF_2
#endif
#endif/***************************************/
/*************** Timer 7 **************/
/**************************************/
#if USE_TIMER_7
// 0: output	1: base timer		2: input
#define TIMER7_FUNC	0#if TIMER7_FUNC == 0
#define TIMER7_CH0_ENABLE 1
#define TIMER7_CH1_ENABLE 1
#define TIMER7_CH2_ENABLE 1
#define TIMER7_CH3_ENABLE 0
#endif#if TIMER7_CH0_ENABLE
#define TIMER7_CH0_P_ENABLE	 1
#define TIMER7_CH0_N_ENABLE	 1
#endif#if TIMER7_CH1_ENABLE
#define TIMER7_CH1_P_ENABLE	 0
#define TIMER7_CH1_N_ENABLE	 1
#endif#if TIMER7_CH2_ENABLE
#define TIMER7_CH2_P_ENABLE	 0
#define TIMER7_CH2_N_ENABLE	 1
#endif#if TIMER7_CH3_ENABLE
#define TIMER7_CH3_P_ENABLE	 0
#define TIMER7_CH3_N_ENABLE	 1
#endif/**
* TIMER2_PSC			(10 - 1)
* TIMER2_PERIOD		(SystemCoreClock / 10000 - 1)
* 表示10秒执行10000次
*/
#define TIMER7_PSC			(1 - 1)
#define TIMER7_PERIOD		(SystemCoreClock / 10000 - 1)//////////////// ch0
#if TIMER7_CH0_P_ENABLE
// PA7(AF3),PB4(AF2),PC6(AF2)
#define TIMER7_CH0_P_PORT_RCU		RCU_GPIOC
#define TIMER7_CH0_P_PORT				GPIOC
#define TIMER7_CH0_P_PIN				GPIO_PIN_6
#define TIMER7_CH0_P_AF					GPIO_AF_3
#endif#if TIMER7_CH0_N_ENABLE
// PA7(AF3),PB4(AF2),PC6(AF2)
#define TIMER7_CH0_N_PORT_RCU		RCU_GPIOA
#define TIMER7_CH0_N_PORT				GPIOA
#define TIMER7_CH0_N_PIN				GPIO_PIN_5
#define TIMER7_CH0_N_AF					GPIO_AF_3
#endif
////////////////////////////////////////////////////////// ch1
#if TIMER7_CH1_P_ENABLE
// PA7(AF3),PB4(AF2),PC6(AF2)
#define TIMER7_CH1_P_PORT_RCU		RCU_GPIOC
#define TIMER7_CH1_P_PORT				GPIOC
#define TIMER7_CH1_P_PIN				GPIO_PIN_6
#define TIMER7_CH1_P_AF					GPIO_AF_3
#endif#if TIMER7_CH1_N_ENABLE
// PA7(AF3),PB4(AF2),PC6(AF2)
#define TIMER7_CH1_N_PORT_RCU		RCU_GPIOA
#define TIMER7_CH1_N_PORT				GPIOA
#define TIMER7_CH1_N_PIN				GPIO_PIN_7
#define TIMER7_CH1_N_AF					GPIO_AF_3
#endif
////////////////////////////////////////////////////////// ch2
#if TIMER7_CH2_P_ENABLE
// PA7(AF3),PB4(AF2),PC6(AF2)
#define TIMER7_CH2_P_PORT_RCU		RCU_GPIOC
#define TIMER7_CH2_P_PORT				GPIOC
#define TIMER7_CH2_P_PIN				GPIO_PIN_6
#define TIMER7_CH2_P_AF					GPIO_AF_3
#endif#if TIMER7_CH2_N_ENABLE
// PA7(AF3),PB4(AF2),PC6(AF2)
#define TIMER7_CH2_N_PORT_RCU		RCU_GPIOA
#define TIMER7_CH2_N_PORT				GPIOA
#define TIMER7_CH2_N_PIN				GPIO_PIN_7
#define TIMER7_CH2_N_AF					GPIO_AF_3
#endif
////////////////////////////////////////////////////////// ch3
#if TIMER7_CH3_P_ENABLE
// PA7(AF3),PB4(AF2),PC6(AF2)
#define TIMER7_CH3_P_PORT_RCU		RCU_GPIOC
#define TIMER7_CH3_P_PORT				GPIOC
#define TIMER7_CH3_P_PIN				GPIO_PIN_6
#define TIMER7_CH3_P_AF					GPIO_AF_3
#endif#if TIMER7_CH3_N_ENABLE
// PA7(AF3),PB4(AF2),PC6(AF2)
#define TIMER7_CH3_N_PORT_RCU		RCU_GPIOA
#define TIMER7_CH3_N_PORT				GPIOA
#define TIMER7_CH3_N_PIN				GPIO_PIN_7
#define TIMER7_CH3_N_AF					GPIO_AF_3
#endif
//////////////////////////////////////////#endif
/*********************************************************/#endif

以上是以高级定时器TIMER7和通用定时器TIMER2为例封装配置,可参考此流程封装配置GD32F4其余剩下的12个定时器。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【日志】unity俄罗斯方块——边界限制检测

Bug修复记录 项目场景 尝试使用Unity独自制作俄罗斯方块&#xff08;也许很没有必要&#xff0c;网上随便一搜就有教程&#xff09; 问题描述 俄罗斯方块的边缘检测出错了&#xff0c;对方块进行旋转后&#xff0c;无法到达最左侧或者最下侧的位置&#xff0c;以及其他问题。演…

C++ string:准 STL Container

历史STL 最初是一套独立的泛型库&#xff08;Alexander Stepanov 等人贡献&#xff09;&#xff0c;后来被吸纳进 C 标准库&#xff1b;std::basic_string 则是早期 C 标准&#xff08;Cfront / ARM 时代&#xff09;就存在的“字符串类”&#xff0c;并非 STL 原生物。std::st…

Golang学习笔记--语言入门【Go-暑假学习笔记】

目录 基础语法部分相关概念 基础语法部分概念详解 可见性 导包 内部包 运算符 转义字符 函数 风格 函数花括号换行 代码缩进 代码间隔 花括号省略 三元表达式 数据类型部分相关概念 数据类型部分概念详解 布尔类型 整型 浮点型 复数类型 字符类型 派生类型…

linux中kill 命令使用详解

在Linux系统里&#xff0c;kill命令的主要功能是向进程发送信号&#xff0c;以此来控制进程的运行状态。下面为你详细介绍它的使用方法&#xff1a; 基础语法 kill [选项] [进程ID]进程ID也就是PID&#xff0c;可通过ps、pgrep或者top等命令来获取。 常用信号及其含义 信号可以…

Nginx 安装与 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服务器

Nginx 安装与 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服务器 一、Nginx安装 1. 安装依赖项 sudo yum groupinstall "Development Tools" -y # 非必须 sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y2.下载Nginx wget http://n…

写个 flask todo app,简洁,实用

- 此项目虽然看起来简单&#xff0c;实际上&#xff0c;修改成自己喜欢的样子&#xff0c;也是费时间的。 - 别人都搞AI 相关的项目&#xff0c;而我还是搞这种基础的东西。不要灰心。 - 积累。不论项目大小&#xff0c;不论难易&#xff0c;只看是否有用。项目地址&#xff1a…

4麦 360度定位

要在 ESP32 上用 4 个麦克风实现 360 声源定位&#xff0c;通常思路是通过 时延估计&#xff08;TDOA&#xff09; 几何计算&#xff0c;核心流程&#xff1a;阵列布置将 4 个麦克风等间距布置成正方形&#xff08;或圆形&#xff09;。记阵列中心为原点&#xff0c;麦克风编号…

使用yolov10模型检测视频中出现的行人,并保存为图片

一、使用yolov10模型检测视频中出现的行人&#xff0c;并保存为图片&#xff0c;detect_person.py代码如下&#xff1a;from ultralytics import YOLOv10 import glob import os import cv2 import argparsedef detect_person(videoPath, savePath):if not os.path.exists(save…

现在希望用git将本地文件crawler目录下的文件更新到远程仓库指定crawler目录下,命名相同的文件本地文件将其覆盖

git checkout main git pull origin main $source “D:\黑马大数据学习\crawler” $dest Join-Path (Get-Location) “crawler” if (-not (Test-Path $dest)) { New-Item -ItemType Directory -Path $dest | Out-Null } Copy-Item -Path $source* -Destination $dest -Recur…

网络调制技术对比表

&#x1f4ca; 网络调制技术全维度对比表​调制技术​​简称​​频谱效率​​抗噪性​​功率效率​​复杂度​​关键特性​​典型应用场景​​幅度键控​ASK低差高低/低电路简单&#xff0c;易受干扰遥控器、光通信(OOK)​频移键控​FSK低-中中中中/中抗噪较好&#xff0c;频谱…

优化 Elasticsearch JVM 参数配置指南

一、概述 Elasticsearch 是基于 JVM 的搜索和分析引擎。JVM 参数的合理配置直接影响着 Elasticsearch 的性能和稳定性。尽管 Elasticsearch 已经提供了默认的 JVM 设置&#xff0c;但在某些特定场景下&#xff0c;我们可能需要进行适当的调整和优化。 本文将详细讲述如何安全、…

Python, Go 开发如何进入心流状态APP

要开发一款基于Python和Go语言、帮助用户进入“心流”状态&#xff08;高度专注、高效愉悦的心理状态&#xff09;的应用&#xff0c;需结合两种语言的技术优势&#xff08;Go的高并发与性能、Python的灵活性与AI生态&#xff09;及心流触发机制&#xff08;清晰目标、即时反馈…

一文详解手机WiFi模块与连接

目录 1 硬件模块 1.1 Wifi射频模 1.2 电源管理模块 2 软件与协议栈 2.1 系统服务层 2.2 认证与协议处理 3 连接流程 3.1 开启WiFi与扫描 3.2 选择网络与认证 3.3 连接与IP分配 4 特殊连接方式 4.1 WPS快速连接 4.2 热点模式&#xff08;AP模式&#xff09; 4.3 U…

Java 网络编程详解:从基础到实战,彻底掌握 TCP/UDP、Socket、HTTP 网络通信

作为一名 Java 开发工程师&#xff0c;你一定在实际开发中遇到过需要与远程服务器通信、实现客户端/服务端架构、处理 HTTP 请求、构建分布式系统等场景。这时&#xff0c;Java 网络编程&#xff08;Java Networking&#xff09; 就成为你必须掌握的核心技能之一。Java 提供了丰…

Java面试题(中等)

1. 计算机网络传输层有哪些协议&#xff1f;分别适用于什么场景&#xff1f;TCP协议(传输控制协议)​&#xff1a;面向连接、可靠传输&#xff0c;流量控制、拥塞控制。适用于要求数据完整性的场景&#xff0c;如文件传输、网页浏览、电子邮件等。UDP协议 (用户数据报协议)​&a…

Apache 消息队列分布式架构与原理

消息队列 基本概念 定义 消息队列&#xff08;Message Queue, MQ&#xff09;是一种分布式中间件&#xff0c;通过异步通信、消息暂存和解耦生产消费双方的机制&#xff0c;提供消息的顺序性保证、可靠投递和流量控制能力&#xff0c;广泛应用于微服务解耦、大数据流处理等场景…

ModernBERT如何突破BERT局限?情感分析全流程解析

自2018年推出以来&#xff0c;BERT 彻底改变了自然语言处理领域。它在情感分析、问答、语言推理等任务中表现优异。借助双向训练和基于Transformer的自注意力机制&#xff0c;BERT 开创了理解文本中单词关系的新范式。然而&#xff0c;尽管成绩斐然&#xff0c;BERT 仍存在局限…

股票Level2逐笔成交及十档订单簿分钟级Tick历史行情数据详细解析

本地股票数据处理与分析实战指南 在量化投资与金融数据分析领域&#xff0c;高效处理本地存储的股票数据是核心能力之一。本文将从数据类型定义、解析流程及实际应用角度&#xff0c;系统介绍如何基于CSV文件管理股票分钟数据、高频Tick数据、逐笔数据、Level2历史行情等多样化…

面向互联网2C业务的分布式类Manus Java框架

本文介绍了阿里巴巴推出的分布式类ManusAgent框架——ali-langengine-dflow&#xff0c;旨在解决现有Agent架构在互联网2C业务场景中的局限性。文章从背景出发&#xff0c;分析了当前主流Agent架构&#xff08;如Manus、字节TARS、AutoGLM&#xff09;存在的问题&#xff0c;如…

Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-30-新发布【1T 万亿】参数量大模型&#xff01;Kim…