STM32学习笔记------编程驱动蜂鸣器实现音乐播放
1. 硬件准备
- STM32开发板:STM32F407系列
- 蜂鸣器:常见的蜂鸣器分为两类:有源蜂鸣器和无源蜂鸣器。若使用有源蜂鸣器,只需提供电源和控制信号即可;若使用无源蜂鸣器,则需要控制频率。
- 外接电源(可选):确保为蜂鸣器提供足够的电源。
以下是蜂鸣器的原理图
2. 选择控制方式
对于音乐播放,主要使用PWM(脉宽调制)信号来控制蜂鸣器的发声频率。通过改变PWM的占空比和频率,可以模拟不同的音调和音量。
3. GPIO配置
- 将蜂鸣器连接到STM32的某一个GPIO口,比如PA8或PB5。
- 该GPIO口配置为输出模式。
4. 定时器配置
要通过PWM信号控制蜂鸣器的频率,我们通常使用STM32的定时器模块来产生PWM信号。
- 选择定时器:选择一个适合的定时器,比如TIM2或TIM3。
- 配置定时器:设置定时器的计数频率,计算所需的PWM频率(比如440Hz对应音乐中的A4音符)。
5. 计算音符频率
6. PWM输出控制
通过定时器配置的PWM输出控制蜂鸣器的发声。需要设置:
- PWM周期:对应音符的频率。
- PWM占空比:设置蜂鸣器的响度,通常为50%(即高电平和低电平的时间相等)。
7. 编写代码
(1)编写一个延时函数
/* 延时函数 */
void delay_ms(uint32_t n)
{while(n--){SysTick->CTRL = 0; /* 关闭系统定时器,才能对系统定时器进行配置 */SysTick->LOAD = 168000-1; /* 设置定时器重载值(168MHz 时钟频率下,每毫秒的计数值)168000 - 1 表示定时器计数到 167999 之后产生中断,这相当于 1 毫秒(168 MHz 时钟)*/SysTick->VAL = 0; /* 清空当前计数值,还有清空COUNTFLAG标志位 */SysTick->CTRL = 5; /* 启动定时器,使用处理器时钟频率(168 MHz),并使能定时器5 是控制寄存器的值,低 2 位分别设置时钟源和使能定时器*//* 等待计时器计数完毕。通过检查 COUNTFLAG 标志位(CTRL寄存器的 16 位)*/while ((SysTick->CTRL & 0x10000)==0);//,等待COUNTFLAG标志位置1,就是计数完毕}SysTick->CTRL = 0; /* 关闭系统定时器 释放资源 */}
(2)初始化GPIO和定时器
void led_init(void)
{/* 打开端口E F的硬件时钟(就是对硬件供电),默认状态下,所有时钟都是关闭 */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//指定9引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//引脚工作在复用功能模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度越高,响应时间越短,但是功耗就越高,电磁干扰也越高GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//如果外部没有上拉电阻,就配置推挽输出模式GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//不需要使能上下拉电阻GPIO_Init(GPIOF,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;//指定13 14号引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//引脚工作在输出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度越高,响应时间越短,但是功耗就越高,电磁干扰也越高GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//如果外部没有上拉电阻,就配置推挽输出模式GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//不需要使能上下拉电阻GPIO_Init(GPIOE,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;//指定13 14号引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//引脚工作在输出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度越高,响应时间越短,但是功耗就越高,电磁干扰也越高GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//如果外部没有上拉电阻,就配置推挽输出模式GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//不需要使能上下拉电阻GPIO_Init(GPIOE,&GPIO_InitStructure);
}
void tim13_init(void)
{/* 打开TIM13的硬件时钟,对TIM13供电 */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13,ENABLE); /* 配置TIM13:分频值、计数值、时间更新中断 */TIM_TimeBaseStructure.TIM_Period = 10000/100-1; //输出频率为100Hz (计数值:0~99 当完成100个计数,就输出一个脉冲)TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;//进行8400的分频,84MHz/(8400-1+1)//TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;//不会生效TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStructure);/* 配置TIM13的通道1 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能脉冲输出TIM_OCInitStructure.TIM_Pulse = 0;//比较值0,蜂鸣器为关闭状态TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//有效状态为高电平TIM_OC1Init(TIM13, &TIM_OCInitStructure);/* 使能TIM13工作 */TIM_Cmd(TIM13, ENABLE);
}
(3)播放音符
接下来,可以通过控制定时器的TIM_Period
值来控制音符的频率。
void tim13_set_freq(uint32_t freq)
{/* 关闭TIM13 */TIM_Cmd(TIM13, DISABLE);/*定时器的基本配置,用于配置定时器的输出脉冲的频率为 freq Hz */TIM_TimeBaseStructure.TIM_Period = (400000/freq)-1; //设置定时脉冲的频率TIM_TimeBaseStructure.TIM_Prescaler = 210-1; //第一次分频,简称为预分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;tim13_cnt= TIM_TimeBaseStructure.TIM_Period;TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStructure);/* 使能TIM13 */TIM_Cmd(TIM13, ENABLE);
}void tim13_set_duty(uint32_t duty)
{uint32_t cmp=0;cmp = (tim13_cnt+1) * duty/100;TIM_SetCompare1(TIM13,cmp);
}
8. 实现音乐播放
通过将每个音符的频率和时长传入,依次播放不同的音符。可以使用延时函数来控制每个音符的播放时长。
源代码:
#include "stm32f4xx.h"#define PEout(n) (*(uint32_t *)(0x42000000+(GPIOE_BASE+0x14-0x40000000)*32+n*4))
#define PFout(n) (*(uint32_t *)(0x42000000+(GPIOF_BASE+0x14-0x40000000)*32+n*4))GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;static uint32_t tim13_cnt=0;/* 毫秒延时函数 */
void delay_ms(uint32_t n)
{while(n--){SysTick->CTRL = 0; /* 关闭系统定时器,才能对系统定时器进行配置 */SysTick->LOAD = 168000-1; /* 设置定时器重载值(168MHz 时钟频率下,每毫秒的计数值)168000 - 1 表示定时器计数到 167999 之后产生中断,这相当于 1 毫秒(168 MHz 时钟)*/SysTick->VAL = 0; /* 清空当前计数值,还有清空COUNTFLAG标志位 */SysTick->CTRL = 5; /* 启动定时器,使用处理器时钟频率(168 MHz),并使能定时器5 是控制寄存器的值,低 2 位分别设置时钟源和使能定时器*//* 等待计时器计数完毕。通过检查 COUNTFLAG 标志位(CTRL寄存器的 16 位)*/while ((SysTick->CTRL & 0x10000)==0);//,等待COUNTFLAG标志位置1,就是计数完毕}SysTick->CTRL = 0; /* 关闭系统定时器 释放资源 */}void delay_us(uint32_t n)
{SysTick->CTRL = 0; // 关闭系统定时器,才能对系统定时器进行配置SysTick->LOAD = 168*n-1; // Count from 167 to 0 (168 cycles)SysTick->VAL = 0; // Clear current value as well as count flag,清空当前计数值,还有清空COUNTFLAG标志位SysTick->CTRL = 5; // Enable SysTick timer with processor clock,使用处理器时钟频率168MHz,并使能系统定时器while ((SysTick->CTRL & 0x10000)==0);// Wait until count flag is set,等待COUNTFLAG标志位置1,就是计数完毕SysTick->CTRL = 0; // Disable SysTick,关闭系统定时器 }void led_init(void)
{/* 打开端口E F的硬件时钟(就是对硬件供电),默认状态下,所有时钟都是关闭 */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//指定9引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//引脚工作在复用功能模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度越高,响应时间越短,但是功耗就越高,电磁干扰也越高GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//如果外部没有上拉电阻,就配置推挽输出模式GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//不需要使能上下拉电阻GPIO_Init(GPIOF,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;//指定13 14号引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//引脚工作在输出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度越高,响应时间越短,但是功耗就越高,电磁干扰也越高GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//如果外部没有上拉电阻,就配置推挽输出模式GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//不需要使能上下拉电阻GPIO_Init(GPIOE,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;//指定13 14号引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//引脚工作在输出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度越高,响应时间越短,但是功耗就越高,电磁干扰也越高GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//如果外部没有上拉电阻,就配置推挽输出模式GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//不需要使能上下拉电阻GPIO_Init(GPIOE,&GPIO_InitStructure);
}void tim13_init(void)
{/* 打开TIM13的硬件时钟,对TIM13供电 */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13,ENABLE); /* 配置TIM13:分频值、计数值、时间更新中断 */TIM_TimeBaseStructure.TIM_Period = 10000/100-1; //输出频率为100Hz (计数值:0~99 当完成100个计数,就输出一个脉冲)TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;//进行8400的分频,84MHz/(8400-1+1)//TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;//不会生效TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStructure);/* 配置TIM13的通道1 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能脉冲输出TIM_OCInitStructure.TIM_Pulse = 0;//比较值0,蜂鸣器为关闭状态TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//有效状态为高电平TIM_OC1Init(TIM13, &TIM_OCInitStructure);/* 使能TIM13工作 */TIM_Cmd(TIM13, ENABLE);
}void tim13_set_freq(uint32_t freq)
{/* 关闭TIM13 */TIM_Cmd(TIM13, DISABLE);/*定时器的基本配置,用于配置定时器的输出脉冲的频率为 freq Hz */TIM_TimeBaseStructure.TIM_Period = (400000/freq)-1; //设置定时脉冲的频率TIM_TimeBaseStructure.TIM_Prescaler = 210-1; //第一次分频,简称为预分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;tim13_cnt= TIM_TimeBaseStructure.TIM_Period;TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStructure);/* 使能TIM13 */TIM_Cmd(TIM13, ENABLE);
}void tim13_set_duty(uint32_t duty)
{uint32_t cmp=0;cmp = (tim13_cnt+1) * duty/100;TIM_SetCompare1(TIM13,cmp);
}/* 主函数 */
int main(void)
{ led_init();/* PF8连接到TIM13 */GPIO_PinAFConfig(GPIOF, GPIO_PinSource8, GPIO_AF_TIM13);tim13_init();while(1){/* 设置频率为523Hz,占空比15% */tim13_set_freq(523);tim13_set_duty(15);delay_ms(500); // 延时500ms,确保每个音符的持续时间/* 设置频率为587Hz,占空比15% */tim13_set_freq(587);tim13_set_duty(15);delay_ms(500);/* 设置频率为659Hz,占空比15% */tim13_set_freq(659);tim13_set_duty(15);delay_ms(500);/* 设置频率为698Hz,占空比15% */tim13_set_freq(698);tim13_set_duty(15);delay_ms(500);/* 设置频率为784Hz,占空比15% */tim13_set_freq(784);tim13_set_duty(15);delay_ms(500);/* 设置频率为880Hz,占空比15% */tim13_set_freq(880);tim13_set_duty(15);delay_ms(500);/* 设置频率为988Hz,占空比15% */tim13_set_freq(988);tim13_set_duty(15);delay_ms(500);}
}
可以在STM32上使用定时器和PWM信号控制蜂鸣器,实现简单的音乐播放。可以根据需要添加更多音符,生成完整的曲谱,甚至实现更复杂的音效和音量控制。
相关文章:
STM32学习笔记------编程驱动蜂鸣器实现音乐播放
1. 硬件准备 STM32开发板:STM32F407系列蜂鸣器:常见的蜂鸣器分为两类:有源蜂鸣器和无源蜂鸣器。若使用有源蜂鸣器,只需提供电源和控制信号即可;若使用无源蜂鸣器,则需要控制频率。外接电源(可选…...
ubuntu18.04 安装与卸载NCCL conda环境安装PaddlePaddle
cuda版本11.2 说明PaddlePaddle需要安装NCCL 1、Log in | NVIDIA Developer 登录官网 找到对应版本 官方提供了多种安装方式,本文使用Local installers (x86)本地安装 点击对应的版本下载如: nccl-local-repo-ubuntu1804-2.8.4-cuda11.2_1.0-1_amd6…...
AI有鼻子了,还能远程传输气味,图像生成香水
众所周知,图像、音乐能用AI生成,但出乎意料的是,气味也行。最近,一个名叫Osmo的初创公司宣布,他们成功地将气味数字化了。第一个成功的案例是“新鲜的夏季李子”,而且复现出的味道“闻起来”很不错。整个过…...
学习配置dify过程记录
最近在学习安装 Dify 并集成 Ollama 和 Xinference,学习过程中遇到很多问题,所以我都记录下来。 本人电脑环境:MacBook Pro 15.1系统 基本是基于B站教程一步步搭建: 【Dify快速入门 | 本地部署Dify基于Llama 3.1和OpenAI创建聊天机器人与知…...
简易抽奖器源码以及打包操作
import wx import random import time# 定义Myframe类,继承Frame class Myframe(wx.Frame):# 奖品rewards [桥本香奈, 二代CC, NaNa, 情深叉]# 构造方法def __init__(self):# 父类初始化super().__init__(None, title主界面, size(500, 400), pos(500, 200))# 创建面板&#x…...
一文了解什么是腾讯云开发
一文了解什么是腾讯云开发 关于云开发的猜想腾讯云开发腾讯云开发的优势无服务跨平台轻松托管节约成本 快速上手云开发环境快速搭建管理后台 云开发体验 关于云开发的猜想 说到云开发,作为开发者的大家是否大概就有了想法。比如说过去的开发工作都是在自己本地电脑…...
[CKS] K8S NetworkPolicy Set Up
最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于不安全项目修复的题目。 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] K8S Ne…...
【JAVA】Java基础—面向对象编程:构造方法-实现一个Car类,包含多个构造方法,创建不同的汽车对象
在Java中,构造方法则是用于创建对象的特殊方法。通过构造方法,可以在创建对象时初始化其属性。构造方法的重载允许我们根据不同的需求定义多个构造方法,从而灵活地创建对象。 我们可以将汽车的构造方法比作汽车的配置选项。比如,…...
初识网络编程TCP/IP
目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程,会出现一堆协议、概念、这层次那技术的,头都大了,还是得总结总结…… 相关名词解释 ✨✨网络…...
快速入门Zookeeper
Zookeeper ZooKeeper作为一个强大的开源分布式协调服务,扮演着分布式系统中至关重要的角色。它提供了一个中心化的服务,用于维护配置信息、命名、提供分布式同步以及提供组服务等。通过其高性能和可靠的特性,ZooKeeper能够确保在复杂的分布式…...
Filter and Search 筛选和搜索
Goto Data Grid 数据网格 Filter and Search 筛选和搜索 Filter Drop-down Menus (Excel-style) 筛选器下拉菜单(Excel 样式) 要调用列的筛选器下拉菜单,请单击列标题中的筛选器图标。在 “Values” 选项卡中,用户可以从 Data …...
spark的学习-06
SparkSQL读写数据的方式 1)输入Source 方式一:给定读取数据源的类型和地址 spark.read.format("json").load(path) spark.read.format("csv").load(path) spark.read.format("parquet").load(path) 方式二:…...
Linux C/C++ Socket 编程
本文目录 Linux C语言 socket 编程 client 端头文件 unistd.h & arpa/inet.h1. **unistd.h**2. **arpa/inet.h** socket() 创建套接字sockaddr_in 结构体inet_pton()connect()send()recv()send() 和 recv() 中的 flags 参数**默认行为(flags 0)的特…...
Flutter错误: uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared
前言 今天要做蓝牙通信的功能,我使用了flutter_reactive_ble这个库,但是在运行的时候发现一下错误 Launching lib/main.dart on AQM AL10 in debug mode... /Users/macbook/Desktop/test/flutter/my_app/android/app/src/debug/AndroidManifest.xml Err…...
Spark 的容错机制:保障数据处理的稳定性与高效性
Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…...
TCP可靠连接的建立和释放,TCP报文段的格式,UDP简单介绍
TCP连接的建立(三次握手) 建立连接使用的三报文 SYN 报文仅用于 TCP 三次握手中的第一个和第二个报文(SYN 和 SYN-ACK),用于初始化连接的序列号。数据传输阶段不再使用 SYN 标志。 SYN 报文通常只携带连接请求信息&a…...
LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略 目录 zeroX的简介 1、支持的文件类型 zeroX的安装和使用方法 T1、Node.js 版本: 安装 使用方法 使用文件 URL: 使用本地路径&…...
开源数据库 - mysql - mysql-server-8.4(gtid主主同步+ keepalived热切换)部署方案
前置条件 假设主从信息 mysqlhostport主192.168.1.13306从192.168.1.23306vip192.168.1.3 部署流程 导出测试环境表结构与数据 使用mysqldump ./mysqldump -ulzzc -p -S /tmp/mysql3306.sock --single-transaction --database lzzc > databaseLZZCxxxx.sql查看gtid号 …...
Java全栈体系路线
Java全栈体系路线 摘要 Java 是一门广泛应用于企业级开发的语言,具有强大的生态系统和丰富的工具支持。成为一名 Java 全栈开发工程师不仅需要掌握后端开发技能,还需要具备前端开发和数据库管理的能力。本文将详细介绍 Java 全栈开发的学习路线&#x…...
【Unity基础】Unity中如何导入字体?
在Unity中,不能像其他软件一样直接使用字体文件,需要通过FontAssetCreator将其转换成Texture的Asset文件,然后才能使用。 本文介绍了使用FontAssetCreator导入字体的过程,并对其参数设置进行了说明。 Font Asset Creator 是 Uni…...
使用NVIDIA GPU加速FFmpeg视频压制:完全指南
引言 在视频处理领域,FFmpeg是一个强大的工具。结合NVIDIA的硬件编码器NVENC,我们可以实现快速高效的视频压制。本文将详细解析一个实用的视频压制命令,帮助你理解每个参数的作用。 核心命令 ffmpeg -i input.mp4 -vf scale640:360 -c:v h…...
Python学习:scipy是什么?
文章目录 一、Scipy简介二、Scipy的组成部分1. 基础功能:2. 特殊函数:3. 优化:4. 积分:5. 插值:6. 信号处理:7. 图像处理:8. 统计分布:9. 空间数据结构和算法:10. 稀疏矩…...
spark的学习-05
SparkSql 结构化数据与非结构化数据 结构化数据就类似于excel表中的数据(统计的都是结构化的数据)一般都使用sparkSql处理结构化的数据 结构化的文件:JSON、CSV【以逗号分隔】、TSV【以制表符分隔】、parquet、orc 结构化的表:…...
SQL注入(SQL Injection)详解
SQL注入(SQL Injection)是一种代码注入技术,它通过在应用程序的输入字段中插入或“注入”恶意的SQL语句,从而操控后端数据库服务器执行非预期的命令。这种攻击方式常用于绕过应用程序的安全措施,未经授权地访问、修改或…...
深入解析 OpenHarmony 构建系统-2-目录结构与核心组件
引言 OpenHarmony作为一款面向全场景的分布式操作系统,其构建系统在开发过程中扮演着至关重要的角色。本文将详细介绍OpenHarmony构建系统的目录结构和核心组件,帮助开发者更好地理解和使用这一强大的工具。 目录结构概览 以下是OpenHarmony构建系统的目录结构,每个目录和…...
网络安全应急响应(归纳)
目录 一、概述二、理论 系统排查 系统基本信息 windowsLinux用户信息 WindowsLinux启动项:开机系统在前台或者后台运行的程序,是病毒等实现持久化驻留的常用方法。 WindowsLinux任务计划:由于很多计算机都会自动加载“任务计划”,…...
【网络协议栈】网络层(上)网络层的基本理解、IP协议格式、网络层分组(内附手画分析图 简单易懂)
绪论 “It does not matter how slowly you go as long as you do not stop.”。本章是自上而下的进入网络协议栈的第三个篇幅–网络层–,本章我将带你了解网络层,以及网络层中非常重要的IP协议格式和网络层的分片组装问题,后面将持续更新网…...
数据库类型介绍
1. 关系型数据库(RDBMS) 关系型数据库是最常见的一类数据库,它们通过表(Table)来存储数据,表之间通过关系(如主键和外键)来关联。 • MySQL:开源的关系型数据库管理系统&…...
一步一步从asp.net core mvc中访问asp.net core WebApi
"从asp.net core mvc中访问asp.net core WebApi"看到这个标题是不是觉得很绕口啊,但的确就是要讲一讲这样的访问。前面我们介绍了微信小程序访问asp.net core webapi(感兴趣的童鞋可以看看前面的博文有关WEBAPI的搭建),这里我们重点不关心如何…...
linux中kubectl命令使用
一.命令介绍 kubectl 是 Kubernetes 集群管理的命令行工具,用于与 Kubernetes API 交互。你可以通过它来管理和操作 Kubernetes 集群中的资源,如 Pod、Deployment、Service 等。下面是如何在不同操作系统上下载和使用 kubectl 的方法。 二.下载 kubect…...
做网站生成二维码/外贸谷歌推广怎么样
假设我们有一个硬币和10个机会。在这里,我们将首先初始化头,尾和机会的值-int heads 0;int tails 0;int chances 10;现在,我们将使用Random对象获得head和tail值-for (int i 1; i< chances; i) {if (t.chanceFunc().equals("tail…...
攀枝花建设银行网站/竞价推广套户渠道商
传送:随机变量概率分布函数汇总-离散型分布连续型分布 KS(Kolmogorov-Smirnow)是一种非参数的统计检验方法(是针对连续分布的检验)。这种检测常被用来应用于比较单样本是否符合某个已知分布(将样本数据的累计频数分布与特定理论分布相比较,如果两者间差…...
怎么看网站后台什么语言做的/今天今日头条新闻
夜光序言: 倔强是最难改的脾气。 假如要改,也要倔强地去改。 不用改,只有倔强的人才温柔。 怎见得呢? 譬如说,穿着讲究,就是对自己的温柔。 正文: 1. 理解文本和二进制打开方式的区别…...
网站建设费用会计科目/知乎seo排名帝搜软件
全卷积网络是语义分割的开创性工作,然而,FCN的感受野有限,不能有效捕捉语义分割所需要的全局上下文信息,因此FCN被后来的方法打败,比如增加不同size的滤波器来获得多尺度感受野,然而这势必增加参数数量。不…...
简网app工场在线制作/seo sem论坛
能量模型(Energy-based model)是一种以自监督方式执行的生成式模型,近年来受到了很多关注。本文将介绍ScoreGrad:基于连续能量生成模型的多变量概率时间序列预测。如果你对时间序列预测感兴趣,推荐继续阅读本文。 为什…...
网站建设的概念/网站建设技术托管
展开全部回答不能插入代码格式,比较乱。e68a843231313335323631343130323136353331333433633433我截图给你看吧。package com.test;import javax.swing.*;import java.awt.*;public class DrawTest extends JFrame {public static void main(String[] args) {DrawTe…...