【GD32307E-START】06 ST7735 SPI-LCD显示模块移植

news2025/1/9 18:54:00

软硬件平台

  1. GD32F307E-START Board开发板
  2. GCC Makefile
  3. 1.8寸TFTLCD 分辨率128*160 驱动IC ST7735S
    在这里插入图片描述
    在这里插入图片描述

接口定义

序号引脚标号说明
1GND接地
2VCC5V/3.3V电源输入
3SCKSPI总线时钟信号
4SDASPI总线写数据信号
5RESET液晶屏复位信号,低电平复位
6DC液晶屏寄存器/数据选择信号,低电平:寄存器,高电平:数据
7CS液晶屏片选信号,低电平使能
8BLK背光控制,高电平点亮,如无需控制则接3.3V常亮

ST7735的LCD模块有128x128, 128x160等不同分辨率, 对外的接线除了VCC和GND外有6根, 接线方式都是一样的

  • SCL SPI时钟, 对应上位机SPI的SCK
  • SDA SPI数据输入, 对应上位机SPI的MOSI
  • RES 重启, 低电平有效, 工作时处于高电平
  • DC 命令模式和数据模式切换位, 低电平为命令模式, 高电平为数据模式
  • CS 片选信号, 对应上位机SPI的CS
  • BL 背光, 高电平亮, 低电平灭

如果使用软件SPI, IO口可以随便选择, 如果是硬件SPI, 其中的CS, SCK, MOSI 和 MISO(ST7735未使用)只能使用特定的IO口。

SPI通信协议简介

在这里插入图片描述

CSX为从机片选,仅当CSX为低电平时,芯片才会被使能。D/CX为芯片的数据/命令控制引脚,当DCX为低电平时写命令,为高电平时写数据。SCL为SPI总线时钟,每个上升沿传输1bit数据;SDA为SPI传输的数据,一次传输8bit数据,数据格式如下图所示:

在这里插入图片描述

高位在前,先传输
对于SPI通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:
CPOL的高低决定串行同步时钟的空闲状态电平,CPOL=0,为低电平。CPOL对传输协议没有很多的影响;
CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHL=0,在第一个跳变沿进行数据采集;

模拟SPI移植LCD屏幕

  1. 工程模板建立

    在之前的gcc makefile的工程模板上进行添加文件,同时lcd部分代码参考梁山派GD32F4开发板资料进行。

    lcd_drive.c lcd_drive.h // lcd底层驱动文件,包括软件spi实现,lcd引脚配置,lcd初始化

    lcd_draw.c lcd_draw.h // lcd应用层文件,主要是绘图api实现(可以移植到其他开发板,不需要改,仅配置好驱动文件即可)

    在这里插入图片描述

  2. 配置引脚

    选择引脚,进入工程开始编写屏幕引脚初始化代码。

    为了方便后续移植,我在oled_driver.h处宏定义了每一个引脚,后续根据需要进行修改即可。

    //-----------------LCD屏幕接口宏定义---------------- 
    #define RCU_LCD_SCLK     RCU_GPIOB
    #define PORT_LCD_SCLK    GPIOB
    #define GPIO_LCD_SCLK    GPIO_PIN_10
    
    #define RCU_LCD_MOSI     RCU_GPIOB
    #define PORT_LCD_MOSI    GPIOB
    #define GPIO_LCD_MOSI    GPIO_PIN_11
    
    #define RCU_LCD_RES      RCU_GPIOB
    #define PORT_LCD_RES     GPIOB
    #define GPIO_LCD_RES     GPIO_PIN_12
    
    #define RCU_LCD_DC       RCU_GPIOB
    #define PORT_LCD_DC      GPIOB
    #define GPIO_LCD_DC      GPIO_PIN_13
    
    #define RCU_LCD_CS       RCU_GPIOB
    #define PORT_LCD_CS      GPIOB
    #define GPIO_LCD_CS      GPIO_PIN_14
    
    #define RCU_LCD_BLK      RCU_GPIOB
    #define PORT_LCD_BLK     GPIOB
    #define GPIO_LCD_BLK     GPIO_PIN_15
    
  3. 引脚gpio初始化 (重点1)

    //==================================================================================================
    //  实现功能: LCD_GPIO_Init
    //  函数说明: 液晶IO初始化配置
    //  函数备注: 
    //--------------------------------------------------------------------------------------------------
    //  |   -   |   -   |   0   |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9   
    //==================================================================================================
    void lcd_gpio_init(void)
    {
      
      rcu_periph_clock_enable(RCU_LCD_SCLK);
      rcu_periph_clock_enable(RCU_LCD_MOSI);
      rcu_periph_clock_enable(RCU_LCD_RES);
      rcu_periph_clock_enable(RCU_LCD_DC);
      rcu_periph_clock_enable(RCU_LCD_CS);
      rcu_periph_clock_enable(RCU_LCD_BLK); 
    
      /* 配置SCLK SCL*/
      gpio_init(PORT_LCD_SCLK,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_SCLK);
      gpio_bit_write(PORT_LCD_SCLK, GPIO_LCD_SCLK, SET);
      /* 配置MOSI SDA */
      gpio_init(PORT_LCD_MOSI,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_MOSI);
      gpio_bit_write(PORT_LCD_MOSI, GPIO_LCD_MOSI, SET);
    
       /* 配置RES*/
      gpio_init(RCU_LCD_RES,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_RES);
      gpio_bit_write(RCU_LCD_RES, GPIO_LCD_RES, SET);
      /* 配置DC */
      gpio_init(PORT_LCD_DC,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_DC);
      gpio_bit_write(PORT_LCD_DC, GPIO_LCD_DC, SET);
    
    
     /* 配置CS*/
      gpio_init(PORT_LCD_CS,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_CS);
      gpio_bit_write(PORT_LCD_CS, GPIO_LCD_CS, SET);
      /* 配置BLK */
      gpio_init(PORT_LCD_BLK,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_BLK);
      gpio_bit_write(PORT_LCD_BLK, GPIO_LCD_BLK, SET);
    
    }
    
  4. 端口宏定义设置

    #define SOFTWARE_SPI_ENABLE    1
    
    #if SOFTWARE_SPI_ENABLE  
    
    #define LCD_SCLK_Clr()  gpio_bit_reset(PORT_LCD_SCLK,GPIO_LCD_SCLK)//SCL=SCLK
    #define LCD_SCLK_Set()  gpio_bit_set(PORT_LCD_SCLK,GPIO_LCD_SCLK)
    
    #define LCD_MOSI_Clr()  gpio_bit_reset(PORT_LCD_MOSI,GPIO_LCD_MOSI)//SDA=MOSI
    #define LCD_MOSI_Set()  gpio_bit_set(PORT_LCD_MOSI,GPIO_LCD_MOSI)
    
        
    #define LCD_RES_Clr()   gpio_bit_reset(PORT_LCD_RES,GPIO_LCD_RES)//RES  rst
    #define LCD_RES_Set()   gpio_bit_set(PORT_LCD_RES,GPIO_LCD_RES)
    
    #define LCD_DC_Clr()    gpio_bit_reset(PORT_LCD_DC,GPIO_LCD_DC)//DC  data command select
    #define LCD_DC_Set()    gpio_bit_set(PORT_LCD_DC,GPIO_LCD_DC)
                 
    
    #define LCD_CS_Clr()    gpio_bit_reset(PORT_LCD_CS,GPIO_LCD_CS)//CS
    #define LCD_CS_Set()    gpio_bit_set(PORT_LCD_CS,GPIO_LCD_CS)
    
    #define LCD_BLK_LOW()   gpio_bit_reset(PORT_LCD_BLK,GPIO_LCD_BLK)//BLK
    #define LCD_BLK_Set()   gpio_bit_set(PORT_LCD_BLK,GPIO_LCD_BLK)
    
    #endif
    
  5. 软件SPI代码实现

    //==============================================
    //  实现功能: lcd_write_bus
    //  函数说明: 向SPI总线传输一个8位数据
    //==============================================
    void lcd_write_bus(unsigned char data)
    {
    	uint8_t i;
    	LCD_CS_Clr();
    	for(i=0;i<8;i++)
    	{			  
    		LCD_SCLK_Clr();
    		if(data&0x80)
    		{
    		   LCD_MOSI_Set();
    		}
    		else
    		{
    		   LCD_MOSI_Clr();
    		}
    		LCD_SCLK_Set();
    		data<<=1;
    	}	
      LCD_CS_Set();	
    }
    

    如果传输的数据位为1,则将SPI数据引脚拉高;传输的数据位为0,则将SPI数据引脚拉低。每次传输一个字节数据,高位在前,每个时钟上升沿传输1位数据。

  6. LCD初始化函数

 //==================================================================================================
 //  实现功能: Lcd_Init
 //  函数说明: LCD硬件初始化
 //  函数备注: LCD Init For 1.70Inch LCD Panel with ST7735R.
 //--------------------------------------------------------------------------------------------------
 //  |   -   |   -   |   0   |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9   
 //==================================================================================================
 void lcd_init(void)
 {	
 	
 	
 	lcd_gpio_init();
     LCD_RES_Clr();//复位
 	delay_1ms(100);
 	LCD_RES_Set();
 	delay_1ms(50);
      //    LCD_BLK_Set();//打开背光
      //    delay_1ms(100);
 
 	lcd_writeindex(0x11);//Sleep exit 退出睡眠模式
 	delay_1ms(120);
 
 	lcd_writeindex(0xB1); 
 	lcd_writedata(0x05); 
 	lcd_writedata(0x3C); 
 	lcd_writedata(0x3C); 
 	lcd_writeindex(0xB2); 
 	lcd_writedata(0x05);
 	lcd_writedata(0x3C); 
 	lcd_writedata(0x3C); 
 	lcd_writeindex(0xB3); 
 	lcd_writedata(0x05); 
 	lcd_writedata(0x3C); 
 	lcd_writedata(0x3C); 
 	lcd_writedata(0x05); 
 	lcd_writedata(0x3C); 
 	lcd_writedata(0x3C); 
 	//------------------------------------End ST7735S Frame Rate---------------------------------// 
 	lcd_writeindex(0xB4); //Dot inversion 
 	lcd_writedata(0x03); 
 	//------------------------------------ST7735S Power Sequence---------------------------------// 
 	lcd_writeindex(0xC0); 
 	lcd_writedata(0x28); 
 	lcd_writedata(0x08); 
 	lcd_writedata(0x04); 
 	lcd_writeindex(0xC1); 
 	lcd_writedata(0XC0); 
 	lcd_writeindex(0xC2); 
 	lcd_writedata(0x0D); 
 	lcd_writedata(0x00); 
 	lcd_writeindex(0xC3); 
 	lcd_writedata(0x8D); 
 	lcd_writedata(0x2A); 
 	lcd_writeindex(0xC4); 
 	lcd_writedata(0x8D); 
 	lcd_writedata(0xEE); 
 	//---------------------------------End ST7735S Power Sequence-------------------------------------// 
 	lcd_writeindex(0xC5); //VCOM 
 	lcd_writedata(0x1A); 
 	lcd_writeindex(0x36); //MX, MY, RGB mode 
 	
 	if(USE_HORIZONTAL==0)
 		lcd_writedata(0x00);
 	else if(USE_HORIZONTAL==1)
 		lcd_writedata(0xC0);
 	else if(USE_HORIZONTAL==2)
 		lcd_writedata(0x70);
 	else 
 		lcd_writedata(0xA0); 
 	//------------------------------------ST7735S Gamma Sequence---------------------------------// 
 	lcd_writeindex(0xE0); 
 	lcd_writedata(0x04); 
 	lcd_writedata(0x22); 
 	lcd_writedata(0x07); 
 	lcd_writedata(0x0A); 
 	lcd_writedata(0x2E); 
 	lcd_writedata(0x30); 
 	lcd_writedata(0x25); 
 	lcd_writedata(0x2A); 
 	lcd_writedata(0x28); 
 	lcd_writedata(0x26); 
 	lcd_writedata(0x2E); 
 	lcd_writedata(0x3A); 
 	lcd_writedata(0x00); 
 	lcd_writedata(0x01); 
 	lcd_writedata(0x03); 
 	lcd_writedata(0x13); 
 	
 	lcd_writeindex(0xE1); 
 	lcd_writedata(0x04); 
 	lcd_writedata(0x16); 
 	lcd_writedata(0x06); 
 	lcd_writedata(0x0D); 
 	lcd_writedata(0x2D); 
 	lcd_writedata(0x26); 
 	lcd_writedata(0x23); 
 	lcd_writedata(0x27); 
 	lcd_writedata(0x27); 
 	lcd_writedata(0x25); 
 	lcd_writedata(0x2D); 
 	lcd_writedata(0x3B); 
 	lcd_writedata(0x00); 
 	lcd_writedata(0x01); 
 	lcd_writedata(0x04); 
 	lcd_writedata(0x13); 
 	//------------------------------------End ST7735S Gamma Sequence-----------------------------// 
 	lcd_writeindex(0x3A); //65k mode 
 	lcd_writedata(0x05); 
 	lcd_writeindex(0x29); //Display on
 }
  1. 驱动完整代码见仓库代码

测试

  1. 主函数

    #include "main.h"
    
    
    void Hardware_Init(void)
    {
    
        SystemInit (); 
        systick_config();
        bsp_uart_init();
        printf("SystemInit [ok] \r\n");
        printf("systick_config[ok] \r\n");
        printf("bsp_uart_init [ok] \r\n");
        HW_LED_Init();  
        printf("LED_Init [ok] \r\n");
        OLED_Init();
        printf("OLED_Init [ok] \r\n");
        lcd_init();
        printf("LCD_Init [ok] \r\n");
    }
    //==================================================================================================
    //  实现功能: oled_test测试函数
    //  函数说明: 采用软件IIC 进行配置   SDA PB9  SCL in 
    //  函数备注:  测试正常
    //--------------------------------------------------------------------------------------------------
    //  |   -   |   -   |   0   |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9   
    //==================================================================================================  
    void oled_example(void)
    {
          OLED_ShowString_08x16(0,0,"GD32 SWSPI OLED");
          OLED_ShowNumber_SignedInteger_06x08(16,2,1234,5);
          OLED_ShowNumber_UnsignedInteger_06x08(64,2,1234,4);
          OLED_ShowString_06x08(32,3,"Time:2023.12.03");
          OLED_ShowNumber_Float_06x08(32,4,123.46,3,3);
          OLED_ShowString_06x08(32,5,"By:Endhub");
          OLED_ShowCHinese(32,6,5);
          OLED_ShowCHinese(48,6,6);
          OLED_ShowCHinese(64,6,7);
          OLED_ShowCHinese(80,6,8);
          //OLED_Clear();
    }      
    
    int main(void)
    {
        // static uint8_t num   = 1;
        // num = num+1;
        // TFT_ShowNumber_UnsignedInteger_16x16(8,25,num,3,Blue1,White);
        // if (num >100)
        //   num = 0;
        // 
        Hardware_Init();
        printf("Hardware_Init [ok] \r\n");
        printf("GD32307E-START Baord Testing\r\n");
        printf("gd32f307_spi_lcd 20231216! \r\n");
        lcd_clear(White);               //清屏
        TFT_ShowString_16x16(0,5,"HELLO-GD32F307",Blue1,White);
        TFT_ShowString_16x16(0,25,"GD32-START Baord",Blue1,White);
        TFT_ShowString_16x16(0,45,"By 2023-12-17",Blue1,White);
        TFT_ShowString_16x16(0,65,"By CoderEnd",Blue1,White);
        TFT_ShowChinese(0,90,0,16,Gray0,Red);
        TFT_ShowChinese(20,90,1,16,Gray0,Red);
        TFT_ShowChinese(40,90,2,16,Gray0,Red);
        TFT_ShowChinese(60,90,3,16,Gray0,Red);
        TFT_ShowChinese(80,90,4,16,Gray0,Red);
    
        while(1)
        { 
    
        }
    }
    
  2. 效果

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

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

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

相关文章

LinuxCNC系统安装

首先我们需要准备一个U盘来安装系统&#xff0c;然后进入Debian官网。操作系统处&#xff0c;点击“下载Debian”。 如果需要下载其他比较全版本&#xff0c;可以点击“其他下载链接”&#xff0c;选择DVD的安装&#xff0c;因为是国外的网站&#xff0c;最好不要选择网络安装。…

【每日OJ—有效的括号(栈)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1、有效的括号题目&#xff1a; 1.1方法讲解&#xff1a; 1.2代码实现&#xff1a; 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#…

机器学习:增强式学习Reinforcement learning

收集有标签数据比较困难的时候同时也不知道什么答案是比较好的时候可以考虑使用强化学习通过互动&#xff0c;机器可以自己知道什么结果是好的&#xff0c;什么结果是坏的 Outline 什么是RL Action就是一个functionEnvironment就是告诉这个Action是好的还是坏的 例子 Space i…

2023年度IT168技术卓越奖名单:亚信安慧AntDB数据库

信创卓越贡献奖&#xff1a;湖南亚信安慧科技有限公司 一句话点评&#xff1a;亚信安慧的核心交易数据库AntDB具有应用时间久&#xff08;15年&#xff09;、运行节点多&#xff08;2000&#xff09;、数据规模大&#xff08;PB级&#xff09;、产品稳定可靠&#xff08;500项目…

L1-050:倒数第N个字符串

题目描述 给定一个完全由小写英文字母组成的字符串等差递增序列&#xff0c;该序列中的每个字符串的长度固定为 L&#xff0c;从 L 个 a 开始&#xff0c;以 1 为步长递增。例如当 L 为 3 时&#xff0c;序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这…

Spring Cloud + Vue前后端分离-第6章 通用代码生成器开发

Spring Cloud Vue前后端分离-第6章 通用代码生成器开发 6-1 代码生成器原理介绍 1.增加generator模块&#xff0c;用于代码生成 2.集成freemarker 通用代码生成器开发 FreeMarker 是一款模版引擎&#xff0c;通过模板生成文件&#xff0c;包括html页面&#xff0c;excel …

【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 分发饼干 class Solutio…

万兆网络之线路测速

网络测速有很多种方式&#xff0c;建议使用开源的iperf搭建测试 官方&#xff1a;iperf3&#xff08;技术网站一般不被和谐&#xff0c;有部分可能被污染&#xff09; Windows下载后解压即可运行 小技巧&#xff1a;如果你用的笔记本只有一个C盘&#xff0c;最好将免安装的软…

Zotero插件安装、问题、bug大全(随时更新)

Zotero插件安装、问题、bug大全&#xff08;随时更新&#xff09; 1. 插件安装2. 茉莉花&#xff08;Jasminum&#xff09;插件使用tips及可能遇到的问题2.1 更新2.2 未找到PDFtk Server的可执行文件 问题解决方法 3. Zotero Sci-hub插件相关问题3.1 Zotero Sci-hub插件有时抓取…

iOS问题记录 - iOS 17通过NSUserDefaults设置UserAgent无效

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 最近维护一个老项目时遇到的问题。说起这老项目我就有点头疼&#xff0c;一个快十年前的项目&#xff0c;这么说你可能不觉得有什么&#xff0c;但是你想想Swift也才发布不到十年&#xff08;2014年6月发布&#xff0…

DS排序--快速排序

Description 给出一个数据序列&#xff0c;使用快速排序算法进行从小到大的排序 排序方式&#xff1a;以区间第一个数字为枢轴记录 输出方式&#xff1a;每一步区间排序&#xff0c;都输出整个数组 –程序要求– 若使用C只能include一个头文件iostream&#xff1b;若使用C…

深度学习笔记_7经典网络模型LSTM解决FashionMNIST分类问题

1、 调用模型库&#xff0c;定义参数&#xff0c;做数据预处理 import numpy as np import torch from torchvision.datasets import FashionMNIST import torchvision.transforms as transforms from torch.utils.data import DataLoader import torch.nn.functional as F im…

2000年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天是2023年12月19日&#xff0c;距离2024年的AMC8正式考试倒计时一个月。 从战争中学习战争最有效。前几天&#xff0c;六分成长分析了2023年、2022年、2020、2019、2018、2017的AMC8真题的典型考题、考点和详细答案解析。 今天我们不再从2016年分析&#xff0c;来看看更早…

pytorch文本分类(三)模型框架(DNNtextCNN)

pytorch文本分类&#xff08;三&#xff09;模型框架&#xff08;DNN&textCNN&#xff09; 原任务链接 目录 pytorch文本分类&#xff08;三&#xff09;模型框架&#xff08;DNN&textCNN&#xff09;1. 背景知识深度学习 2. DNN2.1 从感知器到神经网络2.2 DNN的基本…

避坑指南:uni-forms表单在uni-app中的实践经验

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;uni-app篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:uni-app中forms表单的避坑指南篇 该篇章已被前端圈子收录,点此处进入即可查看更多优质内…

Pytorch nn.Linear()的基本用法与原理详解及全连接层简介

主要引用参考&#xff1a; https://blog.csdn.net/zhaohongfei_358/article/details/122797190 https://blog.csdn.net/weixin_43135178/article/details/118735850 nn.Linear的基本定义 nn.Linear定义一个神经网络的线性层&#xff0c;方法签名如下&#xff1a; torch.nn.Li…

AT32F403如何扩大SRAM

配置方法 使用雅特力的ICP 进行配置(可在官网下载) (1)当连接上芯片后,点击设备操作->选择字节 (2)选择224KB SRAM (3)然后点击应用到设备,(可以点击从设备加载,来看当前的配置) (4)打开keil5魔术棒图标 ,将Target中的IRAM1第二个选项从0x10000改为0x3800。…

虚拟电厂 能源物联新方向

今年有多热&#xff1f;据上海市气象局官微消息&#xff0c;5月29日13时09分&#xff0c;徐家汇站气温达36.1℃&#xff0c;打破了百年来的当地5月份气温*高纪录。不仅如此&#xff0c;北京、四川、江西、湖南、广东、广西等地也频频发布高温预警。 伴随着居民用电急剧攀升&am…

4.1 媒资管理模块 - Nacos与Gateway搭建

文章目录 媒资管理模块 - 媒资项目搭建一、需求分析1.1 介绍1.2 数据模型1.3 分析网关 二、 搭建Nacos2.1 服务发现中心2.2.1 Maven2.2.2 配置Nacos 2.2 配置中心2.2.1 介绍2.2.2 Maven 坐标2.2.3 配置 content-api 工程2.2.4 配置 content-service 工程2.2.5 配置 system-api …

基础算法(5):滑动窗口

1.何为滑动窗口&#xff1f; 滑动窗口其实也是一种算法&#xff0c;主要有两类&#xff1a;一类是固定窗口&#xff0c;一类是可变窗口。固定的窗口只需要一个变量记录&#xff0c;而可变窗口需要两个变量。 2.固定窗口 就像上面这个图一样。两个相邻的长度为4的红色窗口&…