【STM32】F103(64K/128K Flash)外设概述

news2024/9/23 7:27:23

本文介绍的是STM32F103 中等容量产品(STM32F103x8xx和STM32F103xBxx)的硬件数据,即64KB或128KB Flash,20KB SRAM。

ST官网资料:https://www.st.com/zh/microcontrollers-microprocessors/stm32f103.html

ST官方的中等容量产品Datasheet:https://www.st.com/resource/en/datasheet/stm32f103c8.pdf

之前的文章:https://blog.csdn.net/weixin_43764974/category_11021363.html

  • 一、概览
    • 1.1 STM32F103 系列芯片容量的区分
    • 1.2、外设概览
  • 二、具体
    • 2.1 内核、存储、CRC计算单元
    • 2.2 嵌套向量中断控制器(NVIC)
    • 2.3 外部中断/事件控制器(EXTI)
    • 2.4 时钟和启动
    • 2.5 自举模式与程序下载
    • 2.6 供电与低功耗模式
    • 2.7 DMA
    • 2.8 RTC(实时时钟)和后备寄存器
    • 2.9 定时器和看门狗
    • 2.10 I2C总线
    • 2.11 通用同步/异步收发器(USART)
    • 2.12 串行外设接口(SPI)
    • 2.13 控制器区域网络(CAN)
    • 2.14 通用串行总线(USB)
    • 2.15 通用输入输出接口(GPIO)
    • 2.16 ADC(模拟/数字转换器)
    • 2.17 温度传感器
    • 2.18 串行单线JTAG调试口(SWJ-DP)
  • 三、引脚定义

一、概览

1.1 STM32F103 系列芯片容量的区分

STM32的小容量、中等容量和大容量指的是芯片的闪存(Flash)容量的大小,一般有以下的划分1:

  • 小容量:闪存小于等于32K
  • 中等容量:64K小于等于闪存小于等于128K
  • 大容量:闪存大于等于256K

STM32F103xx是一个完整的系列,其成员之间是完全地脚对脚兼容,软件和功能上也兼容。在参考手册中,STM32F103x4和STM32F103x6被归为小容量产品,STM32F103x8和STM32F103xB被归为中等容量产品,STM32F103xC、STM32F103xD和STM32F103xE被归为大容量产品。

STM32F103x4、STM32F103x6、 STM32F103xC、STM32F103xD和STM32F103xE可直接替换中等容量的STM32F103x8/B产品,为用户在产品开发中尝试使用不同的存储容量提供了更大的自由度。

同时,STM32F103xx增强型产品与现有的STM32F101xx基本型和STM32F102xx USB基本型产品全兼容。

Flash相当于你电脑的SSD,SRAM相当于你电脑的内存。

在这里插入图片描述

之前的文章也讲过,根据芯片的具体名称来确定内核、引脚数、Flash容量、封装等信息:

在这里插入图片描述

1.2、外设概览

STM32F103系列不同容量产品的外设概览:
在这里插入图片描述

STM32F103中等容量产品外设对比:

在这里插入图片描述

二、具体

STM32F103模块框图(128KB Flash+20KB SRAM):
在这里插入图片描述

2.1 内核、存储、CRC计算单元

  • STM32 F1系列都是ARM的Cortex™-M3内核。
    ARM的Cortex™-M3是32位的RISC处理器,提供额外的代码效率,在通常8和16位系统的存储空间上发挥了ARM内核的高性能。
    STM32F103xx增强型系列拥有内置的ARM核心,因此它与所有的ARM工具和软件兼容。

  • 中等容量产品的Flash是64KB或128KB,用于存放程序和数据。

  • 20K字节的内置SRAM,CPU能以0等待周期访问(读/写)。

  • CRC(循环冗余校验)计算单元使用一个固定的多项式发生器,从一个32位的数据字产生一个CRC码。
    在众多的应用中,基于CRC的技术被用于验证数据传输或存储的一致性。在EN/IEC 60335-1标准的范围内,它提供了一种检测闪存存储器错误的手段,CRC计算单元可以用于实时地计算软件的签名,并与在链接和生成该软件时产生的签名对比。

STM32的CRC单元是一个硬件外设,用于计算循环冗余校验码,以检测数据的完整性和正确性。它使用一个固定的多项式0x4C11DB7,与以太网协议相同。它可以对输入和输出数据进行位反转操作,以适应不同的CRC标准。它有一个32位的数据寄存器,一个8位的通用寄存器,和一个32位的CRC寄存器。

STM32的CRC单元可以用于通信协议、数据存储、远程升级等应用场景,提供硬件支持,节省代码空间和CPU时间。它也可以用于验证Flash的完整性,通过在IAR中配置CRC计算参数,自动对整个Flash空间进行CRC计算,并将结果放在Flash末尾。

https://blog.csdn.net/ybhuangfugui/article/details/109831213

2.2 嵌套向量中断控制器(NVIC)

STM32F103xx增强型产品内置嵌套的向量式中断控制器,能够处理多达43个可屏蔽中断通道(不包括16个Cortex™-M3的中断线)和16个优先级。

  • 紧耦合的NVIC能够达到低延迟的中断响应处理
  • 中断向量入口地址直接进入内核
  • 紧耦合的NVIC接口
  • 允许中断的早期处理
  • 处理晚到的较高优先级中断
  • 支持中断尾部链接功能
  • 自动保存处理器状态
  • 中断返回时自动恢复,无需额外指令开销
    该模块以最小的中断延迟提供灵活的中断管理功能。

NVIC是Nested Vectored Interrupt Controller的缩写,意思是嵌套向量中断控制器。它是一种硬件外设,用于管理和分配处理器中的中断请求。它为CPU的中断请求提供了一个优先级和屏蔽方案,以便CPU可以更好地处理中断请求。NVIC还支持不同的优先级和预先定义的中断源,其中一些可以由外部和内部事件触发。

NVIC有以下主要特性:

  • 支持1到240个可屏蔽的中断源
  • 支持16个优先级,每个优先级可以进一步分为子优先级
  • 支持嵌套中断,即在处理一个低优先级的中断时,可以暂停并响应一个高优先级的中断
  • 支持向量表重定位,即可以将向量表放在不同的存储区域
  • 支持尾链技术,即在返回一个中断前,可以检查是否有新的中断发生,并直接跳转到新的中断处理程序,而不用恢复原来的状态

2.3 外部中断/事件控制器(EXTI)

外部中断/事件控制器包含19个边沿检测器,用于产生中断/事件请求。

每个中断线都可以独立地配置它的触发事件(上升沿或下降沿或双边沿),并能够单独地被屏蔽;有一个挂起寄存器维持所有中断请求的状态。EXTI可以检测到脉冲宽度小于内部APB2的时钟周期。多达80个通用I/O口连接到16个外部中断线。

2.4 时钟和启动

系统时钟的选择是在启动时进行,复位时内部8MHz的RC振荡器被选为默认的CPU时钟,随后可以选择外部的、具失效监控的4~16MHz时钟;当检测到外部时钟失效时,它将被隔离,系统将自动地切换到内部的RC振荡器,如果使能了中断,软件可以接收到相应的中断。同样,在需要时可以采取对PLL时钟完全的中断管理(如当一个间接使用的外部振荡器失效时)。

多个预分频器用于配置AHB的频率、高速APB(APB2)和低速APB(APB1)区域。AHB和高速APB的最高频率是72MHz,低速APB的最高频率为36MHz。

时钟树:

在这里插入图片描述

2.5 自举模式与程序下载

STM32的自举模式是指STM32在复位后,根据BOOT[1:0]引脚的状态,选择不同的存储器作为启动源的模式。STM32有三种自举模式,分别是:

  • Main Flash memory(BOOT1=x BOOT0=0):从STM32内置的Flash中启动,这是正常的工作模式。
  • System memory(BOOT1=0 BOOT0=1):从STM32自带的BootLoader中启动,这种模式可以通过串口或USB等接口重新编程Flash。
  • Embedded Memory(BOOT1=1 BOOT0=1):从STM32内置的SRAM中启动,这种模式可以用于调试。

STM32的自举模式可以用于不同的应用场景,比如远程升级、调试接口恢复、向量表重定位等。


下载程序的时候,选择哪种模式,取决于使用的下载工具和接口。一般来说,有以下几种情况:

  • 如果使用JTAG或SWD接口,可以选择Main Flash memory模式,这种情况下,可以直接通过调试器将程序下载到STM32内置的Flash中,并进行调试。
  • 如果使用串口或USB接口,可以选择System memory模式,这种情况下,需要使用STM32自带的BootLoader或者第三方的BootLoader软件,通过串口或USB将程序下载到STM32内置的Flash中。下载完成后,需要将BOOT0引脚接地,重新上电或复位,才能运行程序。
  • 如果使用其他的存储器,比如外部的Flash或者SD卡等,可以选择Embedded Memory模式,这种情况下,需要在STM32内置的SRAM中运行一个自定义的BootLoader程序,通过某种方式(比如串口、USB、SPI等)将程序从外部存储器读取到STM32内置的Flash中,并跳转到程序入口执行。

Main Flash memory和System memory的区别主要有以下几点:

  • Main Flash memory是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。System memory是STM32自带的BootLoader,这种模式启动的程序功能是由厂家设置的,一般用于通过串口或USB等接口重新编程Flash。
  • Main Flash memory的容量一般比System memory大,可以存放更多的代码和数据。System memory的容量一般比较小,只能存放一个固定的BootLoader程序。
  • Main Flash memory可以支持XIP(执行就地),也就是可以直接从Flash中运行代码,无需拷贝到内存中。System memory不支持XIP,需要将代码拷贝到内存中才能运行。
  • Main Flash memory可以通过不同的方式进行编程和擦除,比如JTAG、SWD、IAP等。System memory只能通过厂家提供的BootLoader进行编程和擦除,而且只能按整个Block进行擦除。

2.6 供电与低功耗模式

供电:

  • VDD = 2.0~3.6V:VDD引脚为I/O引脚和内部调压器供电。
  • VSSA,VDDA = 2.0~3.6V:为ADC、复位模块、RC振荡器和PLL的模拟部分提供供电。使用ADC时,VDDA不得小于2.4V。VDDA和VSSA必须分别连接到VDD和VSS。
  • VBAT = 1.8~3.6V:当关闭VDD时,(通过内部电源切换器)为RTC、外部32kHz振荡器和后备寄存器供电。

VDD 、VSS、VSSA、VDDA 、 VBAT 是STM32芯片的电源引脚,它们的含义如下:

  • VDD 是芯片的工作正电压,一般为2.0~3.6V,通过内置的电压调节器提供所需的1.8V电源。
  • VSS 是芯片的工作负电压,一般接地。
  • VDDA 是芯片的工作模拟正电压,为所有的模拟电路部分供电,包括ADC模块,复位电路,PVD(可编程电压监测器),PLL,上电复位(POR)和掉电复位(PDR)模块,控制VBAT切换的开关等。即使不使用ADC功能,也需要连接VDDA,强烈建议VDD和VDDA使用同一个电源供电。
  • VSSA 是芯片的工作模拟负电压,一般接地。如果有VREF- 引脚 (根据封装而定),它必须连接到VSSA,确保共地。
  • VBAT 是电池或其他电源供电引脚,当VDD 掉电后,通过VBAT 脚为实时时钟 (RTC)和备份寄存器提供电源。

在这里插入图片描述

供电监视器:

内部集成了上电复位(POR)/掉电复位(PDR)电路,该电路始终处于工作状态,保证系统在供电超过2V时工作;当VDD低于设定的阀值(VPOR/PDR)时,置器件于复位状态,而不必使用外部复位电路。

器件中还有一个可编程电压监测器(PVD),它监视VDD/VDDA供电并与阀值VPVD比较,当VDD低于或高于阀值VPVD时产生中断,中断处理程序可以发出警告信息或将微控制器转入安全模式。PVD功能需要通过程序开启。

电压调压器:

调压器有三个操作模式:主模式(MR)、低功耗模式(LPR)和关断模式

  • 主模式(MR)用于正常的运行操作
  • 低功耗模式(LPR)用于CPU的停机模式
  • 关断模式用于CPU的待机模式:调压器的输出为高阻状态,内核电路的供电切断,调压器处于零消耗状态(但寄存器和SRAM的内容将丢失)

该调压器在复位后始终处于工作状态,在待机模式下关闭处于高阻输出。

低功耗模式:

STM32F103xC、STM32F103xD和STM32F103xE增强型产品支持三种低功耗模式,可以在要求低功耗、短启动时间和多种唤醒事件之间达到最佳的平衡。

  • 睡眠模式
    在睡眠模式,只有CPU停止,所有外设处于工作状态并可在发生中断/事件时唤醒CPU。
  • 停机模式
    在保持SRAM和寄存器内容不丢失的情况下,停机模式可以达到最低的电能消耗。在停机模式下,停止所有内部1.8V部分的供电,PLL、HSI的RC振荡器和HSE晶体振荡器被关闭,调压器可以被置于普通模式或低功耗模式。
    可以通过任一配置成EXTI的信号把微控制器从停机模式中唤醒,EXTI信号可以是16个外部I/O口之一、PVD的输出、RTC闹钟或USB的唤醒信号。
  • 待机模式
    在待机模式下可以达到最低的电能消耗。内部的电压调压器被关闭,因此所有内部1.8V部分的供电被切断;PLL、HSI的RC振荡器和HSE晶体振荡器也被关闭;进入待机模式后,SRAM和寄存器的内容将消失,但后备寄存器的内容仍然保留,待机电路仍工作。
    从待机模式退出的条件是:NRST上的外部复位信号、IWDG复位、WKUP引脚上的一个上升边沿或RTC的闹钟到时。
    注: 在进入停机或待机模式时,RTC、IWDG和对应的时钟不会被停止。

2.7 DMA

灵活的7路通用DMA可以管理存储器到存储器、设备到存储器和存储器到设备的数据传输;DMA控制器支持环形缓冲区的管理,避免了控制器传输到达缓冲区结尾时所产生的中断。每个通道都有专门的硬件DMA请求逻辑,同时可以由软件触发每个通道;传输的长度、传输的源地址和目标地址都可以通过软件单独设置。

DMA可以用于主要的外设:SPI、I2C、USART,通用、基本和高级控制定时器TIMx和ADC。

2.8 RTC(实时时钟)和后备寄存器

RTC和后备寄存器通过一个开关供电,在VDD有效时该开关选择VDD供电,否则由VBAT引脚供电。后备寄存器(10个16位的寄存器)可以用于在关闭VDD时,保存20个字节的用户应用数据。RTC和后备寄存器不会被系统或电源复位源复位;当从待机模式唤醒时,也不会被复位。

实时时钟具有一组连续运行的计数器,可以通过适当的软件提供日历时钟功能,还具有闹钟中断和阶段性中断功能。RTC的驱动时钟可以是一个使用外部晶体的32.768kHz的振荡器、内部低功耗RC振荡器或高速的外部时钟经128分频。内部低功耗RC振荡器的典型频率为40kHz。为补偿天然晶体的偏差,可以通过输出一个512Hz的信号对RTC的时钟进行校准。RTC具有一个32位的可编程计数器,使用比较寄存器可以进行长时间的测量。有一个20位的预分频器用于时基时钟,默认情况下时钟为32.768kHz时,它将产生一个1秒长的时间基准。

2.9 定时器和看门狗

中等容量的STM32F103xx增强型系列产品包含1个高级控制定时器、3个普通定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。

下表比较了高级控制定时器、普通定时器和基本定时器的功能:
在这里插入图片描述
高级控制定时器(TIM1):

高级控制定时器(TIM1)可以被看成是分配到6个通道的三相PWM发生器,它具有带死区插入的互补PWM输出,还可以被当成完整的通用定时器。四个独立的通道可以用于:

  • 输入捕获
  • 输出比较
  • 产生PWM(边缘或中心对齐模式)
  • 单脉冲输出
    配置为16位标准定时器时,它与TIMx定时器具有相同的功能。配置为16位PWM发生器时,它具有全调制能力(0~100%)。
    在调试模式下,计数器可以被冻结,同时PWM输出被禁止,从而切断由这些输出所控制的开关。很多功能都与标准的TIM定时器相同,内部结构也相同,

通用定时器(TIMx):

STM32F103xx增强型产品中,内置了多达3个可同步运行的标准定时器(TIM2、TIM3和TIM4)。每个定时器都有一个16位的自动加载递加/递减计数器、一个16位的预分频器和4个独立的通道,每个通道都可用于输入捕获、输出比较、PWM和单脉冲模式输出,在最大的封装配置中可提供最多12个输入捕获、输出比较或PWM通道。

它们还能通过定时器链接功能与高级控制定时器共同工作,提供同步或事件链接功能。在调试模式下,计数器可以被冻结。任一标准定时器都能用于产生PWM输出。每个定时器都有独立的DMA请求机制。

这些定时器还能够处理增量编码器的信号,也能处理1至3个霍尔传感器的数字输出。

独立看门狗:

独立的看门狗是基于一个12位的递减计数器和一个8位的预分频器,它由一个内部独立的40kHz的RC振荡器提供时钟;因为这个RC振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过选项字节可以配置成是软件或硬件启动看门狗。在调试模式下,计数器可以被冻结。

窗口看门狗:

窗口看门狗内有一个7位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式下,计数器可以被冻结。

系统时基定时器:

这个定时器是专用于实时操作系统,也可当成一个标准的递减计数器。它具有下述特性:

  • 24位的递减计数器
  • 自动重加载功能
  • 当计数器为0时能产生一个可屏蔽系统中断
  • 可编程时钟源

2.10 I2C总线

多达2个I2C总线接口,能够工作于多主模式或从模式,支持标准和快速模式。I2C接口支持7位或10位寻址,7位从模式时支持双从地址寻址。内置了硬件CRC发生器/校验器。它们可以使用DMA操作并支持SMBus总线2.0版/PMBus总线。

2.11 通用同步/异步收发器(USART)

USART1接口通信速率可达4.5兆位/秒,其他接口的通信速率可达2.25兆位/秒。USART接口具有硬件的CTS和RTS信号管理、支持IrDA SIR ENDEC传输编解码、兼容ISO7816的智能卡并提供LIN主/从功能。

所有USART接口都可以使用DMA操作。

同步/异步的区别如下:

  • 同步收发器 (Synchronous Receiver and Transmitter)是指在通信时需要对外提供时钟信号,以保证发送方和接收方的数据同步。同步收发器的优点是传输速率高,缺点是需要额外的线路传输时钟信号,增加了硬件成本和复杂度。
  • 异步收发器 (Asynchronous Receiver and Transmitter)是指在通信时不需要对外提供时钟信号,而是通过起始位和停止位来标识每个数据帧的开始和结束。异步收发器的优点是简化了硬件设计,缺点是传输速率低,且需要额外的位来表示数据帧的边界,增加了数据冗余。

2.12 串行外设接口(SPI)

多达2个SPI接口,在从或主模式下,全双工和半双工的通信速率可达18兆位/秒。3位的预分频器可产生8种主模式频率,可配置成每帧8位或16位。硬件的CRC产生/校验支持基本的SD卡和MMC模式。

所有的SPI接口都可以使用DMA操作。

串行通信是指在计算机总线或其他数据通道上,每次传输一个位元数据,并连续进行以上单次过程的通信方式。与之对应的是并行通信,它在串行端口上通过一次同时传输若干位元数据的方式进行通信。

串行通信的特点是传输线少、成本低、适用于远距离通信,但是传输速率低、易受干扰。串行通信可以分为同步通信和异步通信,它们的区别在于是否需要对外提供时钟信号来保证数据同步。

2.13 控制器区域网络(CAN)

CAN接口兼容规范2.0A和2.0B(主动),位速率高达1兆位/秒。它可以接收和发送11位标识符的标准帧,也可以接收和发送29位标识符的扩展帧。具有3个发送邮箱和2个接收FIFO,3级14个可调节的滤波器。

2.14 通用串行总线(USB)

STM32F103xx增强型系列产品,内嵌一个兼容全速USB的设备控制器,遵循全速USB设备(12兆位/秒)标准,端点可由软件配置,具有待机/唤醒功能。USB专用的48MHz时钟由内部主PLL直接产生(时钟源必须是一个HSE晶体振荡器)。

2.15 通用输入输出接口(GPIO)

每个GPIO引脚都可以由软件配置成输出(推挽或开漏)、输入(带或不带上拉或下拉)或复用的外设功能端口。多数GPIO引脚都与数字或模拟的复用外设共用。除了具有模拟输入功能的端口,所有的GPIO引脚都有大电流通过能力。

在需要的情况下,I/O引脚的外设功能可以通过一个特定的操作锁定,以避免意外的写入I/O寄存器。在APB2上的I/O脚可达18MHz的翻转速度。

STM32的GPIO有8种工作模式,分别是:

  • 模拟输入:GPIO引脚用于ADC采集电压的输入通道,信号不经过施密特触发器,直接进入ADC模块,CPU不能读取引脚状态。
  • 浮空输入:GPIO引脚的电平信号直接进入输入数据寄存器,MCU直接读取引脚电平,引脚的电平状态是不确定的,完全由外部输入决定。
  • 上拉输入:GPIO引脚内部接上拉电阻,引脚默认为高电平,如果外部输入低电平,则引脚为低电平。
  • 下拉输入:GPIO引脚内部接下拉电阻,引脚默认为低电平,如果外部输入高电平,则引脚为高电平。
  • 推挽输出:GPIO引脚可以输出强高低电平,连接数字器件,输出端由P-MOS管和N-MOS管组成的反相器驱动。
  • 开漏输出:GPIO引脚只能输出强低电平,高电平需要借助外部上拉电阻完成对外驱动,输出端只有N-MOS管工作。
  • 复用推挽输出:GPIO引脚复用为其他外设的功能引脚,输出数据由其他外设提供,可以输出强高低电平。
  • 复用开漏输出:GPIO引脚复用为其他外设的功能引脚,输出数据由其他外设提供,只能输出强低电平。

2.16 ADC(模拟/数字转换器)

STM32F103xx增强型产品内嵌2个12位的模拟/数字转换器(ADC),每个ADC共用多达16个外部通道,可以实现单次或扫描转换。在扫描模式下,自动进行在选定的一组模拟输入上的转换。

ADC接口上的其它逻辑功能包括:

  • 同步的采样和保持
  • 交叉的采样和保持
  • 单次采样
    ADC可以使用DMA操作。

模拟看门狗功能允许非常精准地监视一路、多路或所有选中的通道,当被监视的信号超出预置的阀值时,将产生中断。

由标准定时器(TIMx)和高级控制定时器(TIM1)产生的事件,可以分别内部级联到ADC的开始触发和注入触发,应用程序能使AD转换与时钟同步。

2.17 温度传感器

温度传感器产生一个随温度线性变化的电压,转换范围在2V < VDDA < 3.6V之间。温度传感器在内部被连接到ADC12_IN16的输入通道上,用于将传感器的输出转换到数字数值。

2.18 串行单线JTAG调试口(SWJ-DP)

内嵌ARM的SWJ-DP接口,这是一个结合了JTAG和串行单线调试的接口,可以实现串行单线调试接口或JTAG接口的连接。

JTAG的TMS和TCK信号分别与SWDIO和SWCLK共用引脚,TMS脚上的一个特殊的信号序列用于在JTAG-DP和SW-DP间切换。

三、引脚定义

以stm32f103c8t6为例:

在这里插入图片描述

在这里插入图片描述


~

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

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

相关文章

Scala中的隐式参数、隐式函数和隐式类

使用 implicit 修饰的内容是隐式内容, 隐式的特点就是遇到适应的类型会自动的应用。隐式可以使得静态类型动态化&#xff0c;为现有类库添加功能&#xff0c;隐式的代理增强一个类或者一个方法。 隐式转化的时机 当方法中的参数的类型与目标类型不一致时当对象调用所在类中不…

HOT18-矩阵置零

leetcode原题链接: 矩阵置零 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,…

【Flutter】Flutter Redux 入门:解决状态管理的问题

文章目录 一、 前言二、 Flutter Redux 简介1. 什么是 Redux2. 为什么需要 Redux3. Flutter Redux 的作用 三、 Flutter Redux 的基本使用1. 安装和配置2. 创建 Store3. 使用 StoreProvider 四、 Flutter Redux 的基础示例1. 创建一个简单的计数器应用2. 解析代码和说明 五、 版…

解决npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher

一、问题 环境 系统&#xff1a;centos 7 node &#xff1a;v18.16.1 npm&#xff1a;9.5.1 安装pm2 npm install -g pm2提示报错&#xff1a; npm WARN deprecated uuid3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certai…

记录react 视频和 预览拖动

一、react 视频 ##1、循环播放 import React, { useEffect, useState, useRef } from "react"; const videoRef useRef(null); const showVideoClass { display: "block", width: "100%", height: "100%" } const hindVideoClass …

Zookeeper的应用场景

一、Zookeeper的应用场景包括&#xff1a; 配置中心&#xff1a;Zookeeper可以用来存储和管理配置信息&#xff0c;例如集群中的机器配置、服务地址配置等。通过Zookeeper&#xff0c;可以将配置信息统一管理&#xff0c;同时实现动态加载和更新。统一命名服务&#xff1a;Zoo…

Ubuntu 20.04.02 LTS安装virtualbox7.0

ubuntu22.04的软件仓库也有virtualbox&#xff0c;不过版本较老。 使用安装命令&#xff1a;sudo apt install virtualbox 如果想要安装最新版&#xff0c;那么需要去官网下载deb包或者使用官方的仓库。 这里采用安装Oracle官方仓库的方法。 执行如下命令&#xff1a; wge…

fastadmin 点击获取当前行数据

fastadmin 点击获取当前行数据 // 先获取当前id // 使用方法的语法&#xff1a;$(#table).bootstrapTable(method, parameter);$(document).on("click",".detailtips",function(){var ids$(this).attr("id");var rows$("#table").boo…

pytorch快速入门中文——04(训练图片分类器)

训练分类器 原文&#xff1a;https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-blitz-cifar10-tutorial-py 就是这个。 您已经了解了如何定义神经网络&#xff0c;计算损失并更新网络的权重。 现在您可能在想&#xff0c; 数据呢&…

java小技能:分布式任务调度平台

文章目录 引言I 报表数据生成II 注意事项2.1 任务创建2.2 pom.xml 添加到maven项目 see also 引言 任务调度的应用场景&#xff1a; 生成日报、月报、定时处理任务&#xff08;定期清理文件、处理数据&#xff09; I 报表数据生成 https://kunnan.blog.csdn.net/article/deta…

你知道GPT-3带的即时学习能力是什么吗

你知道GPT-3带的即时学习能力是什么吗 在人工智能领域&#xff0c;GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;是当前比较先进的自然语言处理模型之一。它采用了自监督学习的方式进行训练&#xff0c;并且拥有强大的“in-context learning”&#xff…

nginx-rewrite

目录 1.rewrite 2.应用场景 3.跳转实现及特点 4.格式 5.location分类 6.具体应用场景 1.基于域名跳转 2.基于客户端ip访问跳转 3.基于旧域名跳转新域名后加的目录 4.基于匹配的跳转 5.基于目录下所有php结尾文件跳转 6.基于最普通一条url请求的跳转 7.总结 1.rewrite 重…

星辰秘典:揭开Python项目的神秘密码——2048游戏

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;html css js&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;你好&#x…

Docker 部署 jar 项目

文章目录 1、上传jar包2、新建 Dockerfile 文件3、新建 deploy.sh 脚本&#xff08;创建并运行&#xff09;4、新建 upgrade.sh 脚本&#xff08;更新&#xff09; 1、上传jar包 2、新建 Dockerfile 文件 添加jar包及修改端口 # 基础镜像 FROM java:8 # 添加jar包 ADD servic…

百度智能车竞赛丝绸之路智能车设计与编程实现控制

一、项目简介 本项目现已基于鲸鱼机器人开发套件对其整体外形进行设计&#xff0c;并且对应于实习内容——以“丝绸之路”为题&#xff0c;对机器人各个功能与机器人结构部分进行相关设计与调整。主要可以实现“车道线巡检”“音乐交际”、“城堡检测”、“翻山越岭”。 本项…

Java使用策略模式和工厂模式来消除冗余的if-else语句(UML类图+案例+提供Gitee源码)

前言&#xff1a;在最近的后端开发中&#xff0c;多多少少会发现有很多if-else语句&#xff0c;如果条件过多则会造成整体代码看起来非常臃肿&#xff0c;这边我就举一个我在实际开发中的例子&#xff0c;来进行阐述这两种模式在实际开发中我是如何运用的。 目录 一、工厂模式…

把Jar打包为Maven 把jar打包为maven 将java项目打包为maven 将Java项目打包为Maven

把Jar打包为Maven 把jar打包为maven 将java项目打包为maven 将Java项目打包为Maven 自己写了一个通用SDK Jar包&#xff0c;但是现在的项目都是Maven项目&#xff0c;需要把Jar打包为Maven格式&#xff0c;输出到本地Maven仓库&#xff0c;在项目中可以引用查看Maven是否安装打…

nginx进行反向代理

Nginx是一个开源的高性能Web服务器和反向代理服务器。它最初是由Igor Sysoev在2004年开发的&#xff0c;现在由一个全球性的社区维护和支持。 Nginx的主要特点包括&#xff1a; 高性能&#xff1a;Nginx使用事件驱动模型&#xff0c;可以处理高并发请求&#xff0c;具有出色的…

A* 算法研究(附 Python / C++ 实现)

A* 算法研究 参考 A*寻路算法详解 #A星 #启发式搜索 路径规划之 A* 算法 最短路搜索-从Dijkstra到Best-First再到A-Star 路径规划算法学习笔记&#xff08;一&#xff09;&#xff1a;A*算法 A*算法寻路&#xff08;C代码实现&#xff09; 《基于A*算法的自动泊车全局路径规划…

恒生电子联合恒生聚源发布数智金融新品,聚焦大模型技术金融业务应用

6月28日&#xff0c;恒生电子和旗下子公司恒生聚源正式发布基于大语言模型技术打造的数智金融新品&#xff0c;金融智能助手光子和全新升级的智能投研平台WarrenQ。此外&#xff0c;恒生电子金融行业大模型LightGPT也首次对外亮相&#xff0c;并公布最新研发进展。 恒生电子董…