01-STM32(介绍、工具准备、新建工程)p1-4

news2025/4/6 9:29:01

文章目录

  • 工具准备和介绍
    • 硬件设备
    • stm32简介和arm简介
      • stm32简介
      • STM32命名规则
      • STM32选型
      • STM32F103C8T6最小系统板
      • 引脚定义
      • STM32启动配置
      • STM32最小系统电路
      • ARM简介
    • 软件安装
      • 注册
      • 器件支持包安装
      • ST-LINK驱动安装
      • USB转串口驱动
    • 新建工程
      • 创建stm32工程
      • STM32工程编译和下载
      • 型号分类及缩写,工程架构

工具准备和介绍

硬件设备

• STM32最小系统+面包板
• Windows10操作系统
• 万用表、示波器、镊子、剪刀等
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

stm32简介和arm简介

stm32简介

  • STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
  • STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等
  • STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器

STM32是一系列由ST Microelectronics(意法半导体公司)推出的微控制器(MCU)。这些微控制器基于ARM Cortex-M架构,并且提供各种不同的封装和引脚配置。STM32系列中一些受欢迎的微控制器包括STM32F103,STM32F407和STM32F429。 STM32微控制器以其低功耗,高性能和广泛的功能而闻名。它们通常用于物联网设备,可穿戴技术和其他需要低功耗和高性能的应用。 总体而言,STM32微控制器是许多开发人员的首选,因为它们的多功能性,可靠性和广泛的功能。

ST:指意法半导体
M:指定微处理器MCU
32:表示计算机处理器位数

MCU:微控制器单元(MicroController Unit):是把中央处理器、存储器、定时/计数器(timer/counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。

STM32的应用领域包括但不限于:

  1. 嵌入式领域:如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品、医疗设备、智能家居等。
  2. 高速数据采集系统:使用STM32连接高速ADC和FPGA芯片,实现对高速信号的采集和处理,例如高速摄像头、高速激光测距仪等。
  3. 自动驾驶控制系统:使用STM32连接多个传感器和执行器,例如摄像头、雷达、电机、电子罗盘等,并通过算法设计和优化,实现自动驾驶控制功能。
  4. 机器人视觉系统:使用STM32连接多个摄像头和处理模块,例如OpenCV、CUDA等,并通过算法设计和优化,实现机器人的视觉导航、物体识别等功能。
  5. 网络安全嵌入式设备:使用STM32连接加密模块和网络模块,实现网络安全通信和数据加密等功能,例如VPN、防火墙、数据加密存储等。
  6. 人工智能嵌入式设备:使用STM32连接AI模块,例如人脸识别、语音识别、自然语言处理等,并通过编程和训练,实现智能化的应用,例如智能门禁、智能家居等。

总的来说,STM32在各个领域都有广泛的应用。

STM32命名规则

在这里插入图片描述

STM32选型

CoreMark:跑分
在这里插入图片描述
在这里插入图片描述

STM32F103C8T6最小系统板

在这里插入图片描述
STM32硬件:STM32F103C8T6最小系统板

在这里插入图片描述
在这里插入图片描述
STM32系统架构
在小容量、中容量和 大容量产品中,主系统由以下部分构成:
● 四个驱动单元:
─ Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
─ 通用DMA1和通用DMA2
● 四个被动单元
─ 内部SRAM
─ 内部闪存存储器
─ FSMC
─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备

这些都是通过一个多级的AHB总线构架相互连接的,如下图所示:
在这里插入图片描述
AHB:先进高性能总线
APB2一般和AHB同频率,都是72MHz,APB1一般36MHz
DMA相当于CPU(Cortex-M3)的秘书,可以搬运数据,而不需要cpu,节省cpu时间

引脚定义

在这里插入图片描述
红色:电源相关引脚
蓝色:最小系统相关引脚
绿色:IO口,功能口引脚
在这里插入图片描述

  1. I = 输入,O = 输出,S = 电源, HiZ = 高阻
  2. FT:容忍5V
  3. 可以使用的功能依选定的型号而定。对于具有较少外设模块的型号,始终是包含较小编号的功能模块。例如,某个型号只有1个SPI和2个USART时,它们即是SPI1和USART1及USART2。
  4. PC13,PC14和PC15引脚通过电源开关进行供电,而这个电源开关只能够吸收有限的电流(3mA)。因此这三个引脚作为输出引脚时有以下限制:在同一时间只有一个引脚能作为输出,作为输出脚时只能工作在2MHz模式下,最大驱动负载为30pF,并且不能作为电流源(如驱动LED)。
  5. 这些引脚在备份区域第一次上电时处于主功能状态下,之后即使复位,这些引脚的状态由备份区域寄存器控制(这些寄存器不会被主复位系统所复位)。 关于如何控制这些IO口的具体信息,请参考STM32F10xxx参考手册的电池备份区域和BKP寄存器的相关章节。
  6. 与LQFP64的封装不同,在TFBGA64封装上没有PC3,但提供了V REF+ 引脚。
  7. 此类复用功能能够由软件配置到其他引脚上(如果相应的封装型号有此引脚),详细信息请参考STM32F10xxx参考手册的复用功能I/O章节和调试设置章节。
  8. VFQFPN36封装的引脚2和引脚3、LQFP48和LQFP64封装的引脚5和引脚6、和TFBGA64封装的C1和C2,在芯片复位后默认配置为OSC_IN和OSC_OUT功能脚。软件可以重新设置这两个引脚为PD0和PD1功能。但对于LQFP100/BGA100封装,由于PD0和PD1为固有的功能引脚,因此没有必要再由软件进行重映像设置。更多详细信息请参考STM32F10xxx参考手册的复用功能I/O章节和调试设置章节。在输出模式下,PD0和PD1只能配置为50MHz输出模式。

STM32启动配置

在这里插入图片描述

STM32最小系统电路

在这里插入图片描述

ARM简介

  • ARM既指ARM公司,也指ARM处理器内核
  • ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构
  • ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片

ARM是什么
ARM既可以认为是一个公司的名字 ,也可以认为是对一类处理器的统称 ,还可以认为是一种技术的名字 。
ARM公司是专门从事基于RISC技术芯片设计开发 的公司,作为知识产权供应商,本身不直接从事芯片生产,而是转让设计许可 ,由合作公司生产各具特色的芯片。
ARM处理器的内核是统一的 ,由ARM公司提供,而片内部件则是多样的 ,由各大半导体公司设计,这使得ARM设计嵌入式系统的时候,可以基于同样的核心,使用不同的片内外设 ,从而具有很大的优势。
** ARM系列 **
在这里插入图片描述
A系列非常多,性能最高
R系列主要面向实时性高
M系列主要用于单片机

软件安装

MDK 源自德国的 KEIL 公司,是 RealView MDK 的简称。在全球 MDK 被超过 10 万的嵌入式开发工程师使用。目前最新版本为:
MDK6,该版本使用 uVision5 IDE 集成开发环境,是目前针对 ARM 处理器,尤其是 Cortex M 内核处理器的最佳开发工具。
MDK5 向后兼容 MDK4 和 MDK3 等,以前的项目同样可以在 MDK5 上进行开发(但是头文件方面得全部自己添加), MDK5 同时加强了针
对 Cortex-M 微控制器开发的支持,并且对传统的开发模式和界面进行升级,MDK5 由两个部分组成:MDK Core 和 Software Packs。其中,Software Packs 可以独立于工具链进行新芯片支持和中间库的升级。

安装MDK差不多就是一路Next(如果之前用过Keil5开发51单片机,可以直接选安装目录到原来的Keil5安装目录,例如Keil_v5文件夹,并且直接在keil5软件可以自由切换),要求填写信息就随便填一下,如下图所示,如果MDK和C51同安装目录,可以选Legacy Device切换为C51开发
在这里插入图片描述

下面直接看注册

注册

  1. 以管理员的方式运行keil软件
  2. 选择否即可
    在这里插入图片描述
  3. 打开注册管理窗口(File -> License Management),并复制CID
    在这里插入图片描述
  4. 打开注册机,执行如下几步。
    在这里插入图片描述
  5. 将注册码添加到注册窗口中
    在这里插入图片描述

器件支持包安装

双击Keil.STM32F1xx_DFP.2.2.0.pack,选择合适的安装位置,一路Next
在线安装器件支持包方式
在这里插入图片描述
网络较慢,漫长等待
在这里插入图片描述
然后点是

ST-LINK驱动安装

首先要把ST-LINK插到电脑上
默认STM32 STLink是没有驱动的(有个黄色感叹号),需要安装驱动
在这里插入图片描述
找到Keil安装目录下,安装64位驱动
在这里插入图片描述
一路安装即可
驱动安装好之后,上述黄色感叹号消失,表示安装成功

USB转串口驱动

首先要把 USB转串口插到电脑上
双击CH341SER.EXE(自己下载),点击安装
在这里插入图片描述
在这里插入图片描述

新建工程

目前STM32主要有基于寄存器,基于标准库(本课程),基于Hal库(图像化,快速上手)的三种开发方式

创建stm32工程

在这里插入图片描述
创建工程步骤
在建立工程之前,我们在电脑的某个目录下面建立一个文件夹,名字为
00_Template。
在这里插入图片描述

笔者目录为E:\Program Data\Keil\00_Template

在上述00_Template目录下创建一下四个目录
在这里插入图片描述

CORE 用来存放核心文件和启动文件,OBJ 是用来存放编译过程文件以及hex 文件,STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。

点击 MDK 的菜单:Project –>New Uvision Project
在这里插入图片描述
将目录定位到刚才建立的文件夹00_Template 之下,然后定位到 USER 目录下面,我们的工程文件就都保存到 USER 文件夹下面。工程命名为Template,点击保存。
在这里插入图片描述
选择 CPU 的界面,就是选择我们的芯片型号。

STMicroelectronics→STM32F1 Series→STM32F103→STM32F103C8T6(如果使用的是其他系列的芯片,选择相应的型号就可以了)
在这里插入图片描述

一定要安装对应的器件 pack 才会显示这些内容哦!

MDK 会弹出 Manage Run-Time Environment 对话框, 点击取消即可。
在这里插入图片描述
在这里插入图片描述
将固件库目录下面的 src,inc 文件夹拷贝到我们刚才建立的 STM32F10x_FWLib 文件夹下面。
在这里插入图片描述

将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件 core_cm3.c和文 件core_cm3.h 复 制到CORE 目录里面。

将里面 startup_stm32f10x_md.s 文件复制到 CORE 下面

定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\a
rm 下面,将里面 startup_stm32f10x_md.s 文件复制到 CORE 下面。

在这里插入图片描述
将三个文件 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的USER目录之下。

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面将里面的三个文件 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的 USER目录之下。

将4个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 复制到 USER 目录下面。

然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 复制到 USER 目录下面。

在这里插入图片描述
将上述文件添加到我们的工程中去。右键点击 Target1,选择 Manage Project Items。
在这里插入图片描述
Project Targets一栏,我们将Target名字修改为Template,然后在Groups一栏删掉一个SourceGroup1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK。
在这里插入图片描述
右键点击点击Tempate,选择选择 Manage Project Itmes,然后选择需要添加文件的 Group,添加对应的文件。

我们选择 FWLIB, 然 后 点 击 右 边 的 Add Files, 定 位 到 我 们 刚 才 建 立 的 目 录,STM32F10x_FWLib/src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close。
CORE 下面需要添加的文件为 core_cm3.c,startup_stm32f10x_md.s ( 注意,默认添加的时候文件类型为.c, 也就是添加 startup_stm32f10x_md.s 启动文件的时候,你需要选择文件类型为 All files 才能看得到这个文件),USER 目录下面需要添加的文件为 main.c,stm32f10x_it.c,system_stm32f10x.c.这样我们需要添加的文件已经添加到我们的工程中了,最后点击 OK

在这里插入图片描述
选择编译中间文件编译后存放目录
在编译之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录。这里大家注意,如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录。
在这里插入图片描述
设置头文件目录
对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进来 。回到工程主菜单,点击魔术棒 ,出来一个菜单,然后点击 c/c++选项.然后点击Include Paths 右边的按钮。弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添加进去。记住,keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path一定要定位到最后一级子目录。然后点击 OK.
在这里插入图片描述
添加好目录之后的情形
在这里插入图片描述
添加宏定义

STM32F10X_MD,USE_STDPERIPH_DRIVER

在这里插入图片描述
将main.c复制改为以下代码

#include "stm32f10x.h"
 void Delay(u32 count)
 {
   u32 i=0;
   for(;i<count;i++);
 }
 int main(void)
 {	
  GPIO_InitTypeDef  GPIO_InitStructure;
	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
  RCC_APB2Periph_GPIOE, ENABLE);	    //使能PB,PE端口时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;			    //LED0-->PB.5 端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);			     //初始化GPIOB.5
  GPIO_SetBits(GPIOB,GPIO_Pin_5);					//PB.5 输出高
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	            //LED1-->PE.5推挽输出
  GPIO_Init(GPIOE, &GPIO_InitStructure);	  	       //初始化GPIO
  GPIO_SetBits(GPIOE,GPIO_Pin_5); 			 //PE.5 输出高 	  
  while(1)
	{
	    GPIO_ResetBits(GPIOB,GPIO_Pin_5);
	    GPIO_SetBits(GPIOE,GPIO_Pin_5);
		Delay(3000000);
		GPIO_SetBits(GPIOB,GPIO_Pin_5);
		GPIO_ResetBits(GPIOE,GPIO_Pin_5);
		Delay(3000000);
	}
 }

配置让编译之后能够生成 hex 文件。

同样点击魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编译生成 hex 文件,Browser Information 是可以查看变量和函数定义。

在这里插入图片描述
编译整个工程,如果没有任何报错,则整个工程已经创建好了。

STM32工程编译和下载

选择下载器位ST-Link Debugger
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
LED测试
main.c

#include "stm32f10x.h"
void led_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	//1. 使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	//2. 初始化GPIO
	GPIO_Init(GPIOC, &GPIO_InitStruct);
	//3. 设置灯灭
	GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
//低电平
void led_on(void)
{
	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
//高电平
void led_off(void)
{
	GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
void mydelay(int msec)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < msec; i++)
	{
		for (j = 0; j < 1000; j++)
		{
			/*do nothing*/;
		}
	}
}
 int main(void)
 {	
	 //初始化
	 led_init();
	 while(1)
	 {
		 led_off();
		 mydelay(1500);
		 
		 led_on();
		 mydelay(1500);
	 }
	 return 0;
 }

下载之后,LED一闪一闪表示OK。

型号分类及缩写,工程架构

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Win10定时任务计划无法显示要执行的EXE任务程序界面,问题解决办法

用C#开发的一款WINFORM程序&#xff0c;在电脑测试一切顺利&#xff0c;运行结果正确。但用电脑的定时任务执行时&#xff0c;程序界面不显示&#xff0c;重启电脑、各种试都不行&#xff0c;最终问题解决。 解决办法&#xff1a; 要选“只在用户登陆时运行”&#xff0c;才能执…

STM32CubeMX-H7-12-IIC读写MPU6050模块(中)-MPU6050模块详解以及软件IIC驱动

前言 上一篇我们已经完成对IIC代码基本框架的编写&#xff0c;以及获取MPU6050的ID&#xff0c;接下来我们逐一分析这个模块的功能&#xff0c;并用IIC驱动 建议看完上一篇再来看这篇 MPU6050寄存器介绍 1.电源管理寄存器&#xff08;PWR_MGMT_1&#xff0c;地址&#xff1a;0…

springboot2.7.x整合nacos+seata

1、nacos及seata下载地址 Nacos Server 下载 | Nacos 官网 Seata Java Download | Apache Seata 这里的seata版本用2.1.0版本。 2、启动nacos D:\本地-seata-nacos\nacos-server\bin>startup.cmd -m standalone 3、修改seata的conf下的application的内容 这里的数据库…

为 IDEA 设置管理员权限

IDEA 安装目录 兼容性选择管理员身份运行程序 之后 IDEA 中的操作&#xff08;包括终端中的操作&#xff09;都是管理员权限的了

单片机学习笔记8.定时器

IAP15W4K58S4定时/计数器结构工作原理 定时器工作方式控制寄存器TMOD 不能进行位寻址&#xff0c;只能对整个寄存器进行赋值 寄存器地址D7D6D5D4D3D2D1D0复位值TMOD89HGATEC/(T低电平有效)M1M0GATEC/(T低电平有效)M1M000000000B D0-D3为T0控制&#xff0c;D4-D7为T1控制 GAT…

vue3实现markdown预览和编辑

Markdown作为一种轻量级标记语言&#xff0c;已经成为开发者编写文档的首选工具之一。在Vue3项目中集成Markdown编辑和预览功能可以极大地提升内容管理体验。本文将介绍如何使用Vditor这一强大的开源Markdown编辑器在Vue3项目中实现这一功能。 一、Vditor简介 Vditor是一款浏…

高并发秒杀系统接入层如何设计

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

C++异常处理 throw try catch

C 异常处理概述 C 异常处理机制提供了一种在程序运行时捕获错误或异常情况的方式。异常处理的目的是使得程序在遇到错误时能够优雅地终止或恢复&#xff0c;并防止程序出现崩溃。C 使用 try, throw, 和 catch 关键字来实现异常处理。 异常处理的基本结构&#xff1a; throw: …

纯css实现环形进度条

需要在中实现一个定制化的环形进度条&#xff0c;最终效果如图&#xff1a; 使用代码 <divclass"circular-progress":style"{--progress: nextProgress,--color: endSliderColor,--size: isFull ? 60rpx : 90rpx,}"><div class"inner-conte…

0基础 | 硬件 | 电源系统 一

降压电路LDO 几乎所有LDO都是基于此拓扑结构 图 拓扑结构 LDO属于线性电源&#xff0c;通过控制开关管的导通程度实现稳压&#xff0c;输出纹波小&#xff0c;无开关噪声 线性电源&#xff0c;IoutIin&#xff0c;发热功率P电压差△U*电流I&#xff0c;转换效率Vo/Vi LDO不适…

获取KUKA机器人诊断文件KRCdiag的方法

有时候在进行售后问题时需要获取KUKA机器人的诊断文件KRCdiag&#xff0c;通过以下方法可以获取KUKA机器人的诊断文件KRCdiag&#xff1a; 1、将U盘插到控制柜内的任意一个USB接口&#xff1b; 2、依次点【主菜单】—【文件】—【存档】—【USB&#xff08;控制柜&#xff09…

一周学会Pandas2 Python数据处理与分析-NumPy数据类型

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili NumPy 提供了丰富的数据类型&#xff08;dtypes&#xff09;&#xff0c;主要用于高效数值计算。以下是 NumPy 的主要…

Redis核心机制-缓存、分布式锁

目录 缓存 缓存更新策略 定期生成 实时生成 缓存问题 缓存预热&#xff08;Cache preheating&#xff09; 缓存穿透&#xff08;Cache penetration&#xff09; 缓存雪崩&#xff08;Cache avalanche&#xff09; 缓存击穿&#xff08;Cache breakdown&#xff09; 分…

如何在Ubuntu上安装Dify

如何在Ubuntu上安装Dify 如何在Ubuntu上安装docker 使用apt安装 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg…

Python FastApi(13):APIRouter

如果你正在开发一个应用程序或 Web API&#xff0c;很少会将所有的内容都放在一个文件中。FastAPI 提供了一个方便的工具&#xff0c;可以在保持所有灵活性的同时构建你的应用程序。假设你的文件结构如下&#xff1a; . ├── app # 「app」是一个 Python 包…

【算法竞赛】状态压缩型背包问题经典应用(蓝桥杯2019A4分糖果)

在蓝桥杯中遇到的这道题&#xff0c;看上去比较普通&#xff0c;但其实蕴含了很巧妙的“状态压缩 背包”的思想&#xff0c;本文将从零到一&#xff0c;详细解析这个问题。 目录 一、题目 二、思路分析&#xff1a;状态压缩 最小覆盖 1. 本质&#xff1a;最小集合覆盖问题…

常微分方程 1

slow down and take your time 定积分应用回顾常微分方程的概述一阶微分方程可分离变量齐次方程三阶线性微分方程 一阶线性微分方程不定积分的被积分函数出现了绝对值梳理微分方程的基本概念题型 1 分离变量题型 2 齐次方程5.4 题型 3 一阶线性微分方程知识点5.55.6 尾声 定积分…

Web前端页面搭建

1.在D盘中创建www文件 cmd进入窗口命令windowsR 切换盘符d: 进入创建的文件夹 在文件夹里安装tp框架 在PS中打开tp文件 创建网站&#xff0c;根目录到public 在浏览器中打开网页 修改文件目录名称 在public目录中的。htaccess中填写下面代码 <IfModule mod_rewrite.c >…

开源 LLM 应用开发平台 Dify 全栈部署指南(Docker Compose 方案)

开源 LLM 应用开发平台 Dify 全栈部署指南&#xff08;Docker Compose 方案&#xff09; 一、部署环境要求与前置检查 1.1 硬件最低配置 组件要求CPU双核及以上内存4GB 及以上磁盘空间20GB 可用空间 1.2 系统兼容性验证 ✅ 官方支持系统&#xff1a; Ubuntu 20.04/22.04 L…

BN 层的作用, 为什么有这个作用?

BN 层&#xff08;Batch Normalization&#xff09;——这是深度神经网络中非常重要的一环&#xff0c;它大大改善了网络的训练速度、稳定性和收敛效果。 &#x1f9e0; 一句话理解 BN 层的作用&#xff1a; Batch Normalization&#xff08;批归一化&#xff09;通过标准化每一…