STM32F103的FSMC模块驱动LCD屏幕

news2025/8/12 13:24:36

     以下内容为对正点原子的 S T M 32 F 103 STM32F103 STM32F103精英板的 F S M C FSMC FSMC模块驱动 L C D LCD LCD屏幕例程的学习。做一个记录来加强对模块的认知。
      F S M C FSMC FSMC的全称是 F l e x i b l e s t a t i c m e m o r y c o n t r o l l e r Flexible\quad static\quad memory\quad controller Flexiblestaticmemorycontroller,翻译成中文就是灵活的静态存储器控制器,这样来看的话 F S M C FSMC FSMC模块无法支持 D R A M DRAM DRAM,因为 D R A M DRAM DRAM属于动态存储器,它需要刷新电路不断的刷新来维持存储的数据,而 S R A M SRAM SRAM不需要刷新电路,只需要芯片有供电就可以维持存储的数据。但是我看 S T M 32 H 750 STM32H750 STM32H750 F M C , F l e x i b l e m e m o r y c o n t r o l l e r FMC,Flexible\quad memory\quad controller FMC,Flexiblememorycontroller,注意这里没有了 S , S t a t i c S,Static S,Static,模块加入了对 S D R A M SDRAM SDRAM(同步 D R A M DRAM DRAM)的支持。如图1所示,同时 S T M 32 H 750 STM32H750 STM32H750 F M C FMC FMC模块也删除了对 P C _ C A R D PC\_CARD PC_CARD的支持,可能是因为这玩意已经过时了吧, S T M 32 F 103 STM32F103 STM32F103 F S M C FSMC FSMC模块是支持 P C _ C A R D PC\_CARD PC_CARD的。 F S M C FSMC FSMC支持的存储器类型如下所示:

  • S R A M SRAM SRAM
  • P S R A M PSRAM PSRAM
  • N O R F L A S H NOR\quad FLASH NORFLASH
  • N A N D F L A S H NAND\quad FLASH NANDFLASH

      N O R F L A S H NOR\quad FLASH NORFLASH N A N D F L A S H NAND\quad FLASH NANDFLASH在断电之后存储的内容不会丢失。 S R A M SRAM SRAM P S R A M PSRAM PSRAM在断电之后存储的内容会丢失。 N O R F L A S H NOR\quad FLASH NORFLASH N A N D F L A S H NAND\quad FLASH NANDFLASH一般在写入之前首先要对要写入的位置所在的存储块进行擦除的操作,也就是将所有的比特存储位变为二进制值1, S R A M SRAM SRAM P S R A M PSRAM PSRAM不需要。由于 N A N D F L A S H NAND\quad FLASH NANDFLASH的特性决定, N A N D F L A S H NAND\quad FLASH NANDFLASH不支持 X I P , E x c e c u t e I n P l a c e XIP,Excecute\quad In\quad Place XIP,ExcecuteInPlace,功能, N O R F L A S H NOR\quad FLASH NORFLASH支持 X I P XIP XIP功能。

 
图1.

     我这里测试的时候用的是如图2所示的 3.5 3.5 3.5英寸的屏幕,这里我们要知道这里的屏幕不单单只是一块玻璃而已,而是一整个模组。一个基本的模组包含了液晶面板和显示驱动芯片(我这里的屏幕模组的显示驱动芯片的型号是 N T 35310 NT35310 NT35310),如图3所示。 M C U MCU MCU,比如 S T M 32 F 103 STM32F103 STM32F103,通过 F S M C FSMC FSMC模块将数据通过8080接口(当然显示驱动芯片一般支持多种接口类型,可以根据需要进行选择)发送给显示驱动芯片之后,显示驱动芯片一般再通过 R G B RGB RGB接口将接收到的数据显示到屏幕上。但是为什么 S T M 32 F 103 STM32F103 STM32F103 F S M C FSMC FSMC模块可以用来驱动 L C D LCD LCD屏幕?如果你去看 S T M 32 F 103 STM32F103 STM32F103 F S M C FSMC FSMC模块用户手册的话,它也没有提到它可以驱动 L C D LCD LCD屏幕,也没有8080接口相关的关键字。

 
图2.
 
图3.

     图4是驱动芯片 N T 35310 NT35310 NT35310的用户手册里面的8080接口的时序图,左边是写的,右边是读的。8080接口主要的信号线如下:

  • C S X CSX CSX:片选信号,低电平的时候选中显示驱动芯片。
  • D C X DCX DCX:低电平的时候告诉显示驱动芯片数据线上的是命令,高电平的时候告诉显示驱动芯片数据线上的是命令参数或数据。
  • W R X WRX WRX:写使能信号,低电平的时候告诉显示驱动芯片马上要写数据了。
  • R D X RDX RDX:读使能信号,低电平的时候告诉显示驱动芯片马上要读数据了。
  • D [ 23 : 0 ] D[23:0] D[23:0]:数据线,数据或命令的传输线。

     图5是 S T M 32 F 103 STM32F103 STM32F103 F S M C FSMC FSMC模块的模式 A A A的读和写的时序,图5中的地址信号线 A [ 25 : 0 ] A[25:0] A[25:0]和高低字节选择信号 N B L [ 1 : 0 ] NBL[1:0] NBL[1:0]这里我们可以不看,在驱动 L C D LCD LCD屏幕的时候用不到。图5中 N E x NEx NEx是片选信号, N O E NOE NOE是读使能信号, N W E NWE NWE是写使能信号, D [ 15 : 0 ] D[15:0] D[15:0]是数据线。对比一下图4和图5我们就可以发现 N T 35310 NT35310 NT35310的8080接口的读写时序和 S T M 32 F 103 STM32F103 STM32F103 F S M C FSMC FSMC模块的模式 A A A的读和写的时序基本差不多,这就是我们可以用 S T M 32 F 103 STM32F103 STM32F103 F S M C FSMC FSMC模块的模式 A A A来和 N T 35310 NT35310 NT35310的8080接口进行通信来驱动 L C D LCD LCD屏幕的原因。由于在驱动 L C D LCD LCD屏幕的时候需要有一根信号线来告诉显示驱动芯片现在发送的是命令还是数据或参数,这里在实际测试的时候采用的方法是用 F S M C FSMC FSMC模块的一根地址线来告诉显示驱动芯片现在发送的是命令还是数据或参数,这里选择的是地址信号线 A 10 A10 A10,地址信号线从0开始排序,因此在初始化 F S M C FSMC FSMC模块的地址的 G P I O GPIO GPIO引脚的时候也只初始化了一个引脚,但是因为测试的时候采用的是16 b i t bit bit数据通信,因此期望在地址信号线 A 10 A10 A10 G P I O GPIO GPIO引脚上输出高低电平的时候需要在地址的第11位上取值1或0,而不是在第10位上,具体原因请见 S T M 32 F 103 STM32F103 STM32F103 F S M C FSMC FSMC模块的文档说明,如图6所示。

  • 命令的地址为: ( ( u 16 ∗ ) ( 0 x 6 C 000000 ) ) ((u16 *)(0x6C000000)) ((u16)(0x6C000000))
  • 数据或参数的地址为: ( ( u 16 ∗ ) ( 0 x 6 C 000800 ) ) ((u16 *)(0x6C000800)) ((u16)(0x6C000800))
 
图4.
 
图5.
 
图6.

     目前也有一些专门的模块来驱动 L C D LCD LCD屏幕,比如 S T M 32 H 750 STM32H750 STM32H750 L T D C LTDC LTDC模块,如图6所示。这种模块驱动 L C D LCD LCD屏幕的时候, L C D LCD LCD屏幕模组应该就不需要显示驱动芯片了。

 
图7.

     说到这里我也有一个疑问显示驱动芯片 N T 35310 NT35310 NT35310是支持多种接口的,如图7所示,那我们在选择某一种接口的时候是否需要进行某种软件或硬件配置,对于这一点我还不是很明确。图8似乎是说明了有 I M 0 IM0 IM0 I M 1 IM1 IM1 I M 2 IM2 IM2三个引脚用来选择使用哪一种接口,不知是否正确。还有就是图8里面的 s e r i a l i n t e r f a c e serial\quad interface serialinterface不知道是不是就是图7里面说的 S e r i a l P e r i p h e r a l I n t e r f a c e , S P I Serial\quad Peripheral \quad Interface,SPI SerialPeripheralInterface,SPI接口,还有就是它这里的描述的 S P I SPI SPI接口和我们常见的四个引脚( C S CS CS:片选, C L K CLK CLK:时钟, M O S I MOSI MOSI M I S O MISO MISO)的 S P I SPI SPI接口好像又有一点差异。有知道的朋友可以帮忙明确一下。

 
图8.
 
图9.

     好了下面来看代码,正点原子的代码是支持多种显示存储芯片的,为了代码的简洁,我把它改成只是基于 N T 35310 NT35310 NT35310的测试代码,其它不先关的我全部删除了,因为原理差不多。代码最开始肯定是 F S M C FSMC FSMC模块和 L C D LCD LCD屏幕模组的初始化, F S M C FSMC FSMC模块初始化了16根数据线,一根地址线来告诉显示驱动芯片发送的是命令还是数据或参数。读使能信号线,写使能信号线,片选信号线。由于液晶本身是不发光的,所以需要有一个背光灯提供光源,因此还需要一个 G P I O GPIO GPIO口来控制光源的开和关。下面来看一下 F S M C FSMC FSMC模块的参数配置:

  1. 这里地址和数据线不复用,用的是扩展模式A,因此存储器类型选择 S R A M SRAM SRAM,扩展模式也要使能,读写时序不同。
  2. 因为 L C D LCD LCD屏幕模组配置的是16比特数据宽度,因此外部存储器宽度参数配置为16比特。
  3. 因为这里和 L C D LCD LCD屏幕模组采用的是异步通信所以同步功能关闭, W A I T WAIT WAIT信号也没有用到
  4. 因为要向 L C D LCD LCD屏幕模组发送数据,因此写功能要开启。
	readWriteTiming.FSMC_AddressSetupTime = 15;	 
    readWriteTiming.FSMC_AddressHoldTime = 0;	 
    readWriteTiming.FSMC_DataSetupTime = 11;		 
    readWriteTiming.FSMC_BusTurnAroundDuration = 0;
    readWriteTiming.FSMC_CLKDivision = 0;
    readWriteTiming.FSMC_DataLatency = 0;
    readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;	 
      
	  
	writeTiming.FSMC_AddressSetupTime =1;	 
    writeTiming.FSMC_AddressHoldTime =0;	 
    writeTiming.FSMC_DataSetupTime =1;		
    writeTiming.FSMC_BusTurnAroundDuration = 0;
    writeTiming.FSMC_CLKDivision = 0;
    writeTiming.FSMC_DataLatency =0;
    writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;	 
	  
	  
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4; 
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM; 
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;  
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
	FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;	 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable;  
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;  
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming; 

     至于 F S M C FSMC FSMC模块的读写时序参数的配置,我们这里只需要关注 F S M C _ A d d r e s s S e t u p T i m e FSMC\_AddressSetupTime FSMC_AddressSetupTime F S M C _ D a t a S e t u p T i m e FSMC\_DataSetupTime FSMC_DataSetupTime这连个参数就可以了,其它的配置为0就可以了。对于这两个参数分别可以简单的认为是读写使能信号的高电平持续时间和读写使能信号的低电平持续时间,如图10和图11中红圈中标示的位置所示。这里的 H C L K HCLK HCLK为72 M H Z MHZ MHZ,周期大概为14 n s ns ns F S M C FSMC FSMC模块配置为不对 H C L K HCLK HCLK进行分频。这里的时序要求只规定了最小值,只要配置的值超过这个最小值应该就可以,写时序的高低电平最小值是19 n s ns ns因此我们配置为2个 H C L K HCLK HCLK周期就可以了,因此 F S M C _ A d d r e s s S e t u p T i m e FSMC\_AddressSetupTime FSMC_AddressSetupTime F S M C _ D a t a S e t u p T i m e FSMC\_DataSetupTime FSMC_DataSetupTime都配置的为1。对于读时序,读使能的低电平最低要求时间是150 n s ns ns,因此读时序的 F S M C _ D a t a S e t u p T i m e FSMC\_DataSetupTime FSMC_DataSetupTime参数配置为11, 12 × 14 = 168 12\times14=168 12×14=168。对于读时序,读使能的高电平最低要求时间是250 n s ns ns,因此读时序的 F S M C _ A d d r e s s S e t u p T i m e FSMC\_AddressSetupTime FSMC_AddressSetupTime参数应该配置为17, 18 × 14 = 252 18\times14=252 18×14=252。但是 F S M C _ A d d r e s s S e t u p T i m e FSMC\_AddressSetupTime FSMC_AddressSetupTime最高能配置到15,因此这里配置为15。我们前面也说过了 F S M C _ A d d r e s s S e t u p T i m e FSMC\_AddressSetupTime FSMC_AddressSetupTime F S M C _ D a t a S e t u p T i m e FSMC\_DataSetupTime FSMC_DataSetupTime这两个参数只是大概的对应于读写使能信号的高电平持续时间和读写使能信号的低电平持续时间,因此实际的读时序的 F S M C _ A d d r e s s S e t u p T i m e FSMC\_AddressSetupTime FSMC_AddressSetupTime时间还远没有到250 n s ns ns,所以这里也不用纠结。

 
图10.
 
图11.

      F S M C FSMC FSMC模块初始化完成之后就是 L C D LCD LCD模块初始化了,这里的代码是厂家提供的,但是我看 N T 35310 NT35310 NT35310的用户手册上没有,不知道出处在哪里。这里有一个地方要注意的是虽然这里的屏幕模组已经在硬件上改为16比特接口,但是这里不代表一个像素点就是用16比特表示的,至于一个像素点的格式是有命令配置的。如图10和图11所示,可以配置为16比特或18bit。初始化代码里面配置的是16比特。对于16根数据线的8080接口,如果像素比特是16比特的话,一个像素可以一次发完,但是如果像素比特是18比特的话,两个像素一共要3次发送才能完成。但是我看正点原子的程序里面对于16根数据线的8080接口,如果像素比特是16比特的话,读两个像素一共要3次读取才能完成,这我也是很迷惑。

 
图12.
 
图13.
int main(void)
{	 
    u8 color_index=0;
	u8 id1=0;
	u8 id2=0;  
	u8 id3=0;
	u8 id4=0; 	  
	delay_init();	    	  

    uart_init(115200);	 	
	FEMC_LCD_Init();		  	
	LCD_WR_REG(0xD4);      
    id1=LCD_RD_DATA();
    id2=LCD_RD_DATA();
    id3=LCD_RD_DATA();
    id4=LCD_RD_DATA();

    printf("id1=%x,id2=%x,id3=%x,id4=%x.\r\n",id1,id2,id3,id4);           
           
    while(1)
    {
        switch(color_index)
        {
            case 0:LCD_Clear(WHITE);point_color=BLACK;break;
            case 1:LCD_Clear(BLACK);point_color=BLUE;break;
            case 2:LCD_Clear(BLUE);point_color=RED;break;
            case 3:LCD_Clear(RED);point_color=MAGENTA;break;
            case 4:LCD_Clear(MAGENTA);point_color=GREEN;break;
            case 5:LCD_Clear(GREEN);point_color=CYAN;break;
            case 6:LCD_Clear(CYAN);point_color=YELLOW;break; 
            case 7:LCD_Clear(YELLOW);point_color=BRRED;break;
            case 8:LCD_Clear(BRRED);point_color=GRAY;break;
            case 9:LCD_Clear(GRAY);point_color=LGRAY;break;
            case 10:LCD_Clear(LGRAY);point_color=BROWN;break;
            case 11:LCD_Clear(BROWN);point_color=WHITE;break;
         }
				
         LCD_ShowString(30,40,"This is FEMC test for LCD."); 
         LCD_ShowString(30,70,"LCD Display driver IC is NT35310.");
         LCD_ShowString(30,90,"2022.11.22");                                                  
         color_index++;
         if(color_index==12)
             color_index=0;
         delay_ms(1000);
	  }
}

     好了我们最后来看一下主函数,流程比较简单, F S M C FSMC FSMC模块和 L C D LCD LCD模块初始化完成之后就去读一下显示驱动芯片的 I D ID ID,然后循环不断地首先将屏幕刷新为一种颜色,然后用另一种颜色显示3行字符串。这里比较重要的是如何去构建字符串的字模,所谓的字模就是在一个点阵上要保证那些点为1,那些点为0,才能显示出特定的字符。这里使用的软件是 P C t o L C D 2002 PCtoLCD2002 PCtoLCD2002,这里我测试的时候采用是是 12 × 12 12\times12 12×12的点阵,但是似乎对于英文字符自动的变为 12 × 6 12\times6 12×6的点阵了。这里我们在配置的时候选择阴码(亮点为1,即对应的点阵的该点的比特位位1,暗点为0,即对应的点阵的该点的比特位位0),选择 C 51 C51 C51格式。取模方式表示最后在生成点阵的16进制数组的时候遍历点阵的顺序,点阵的一个点表示一个比特位,这里的逐列式的遍历顺序是从上到下,从左到右。顺向表示每遍历8个比特位,第一个遍历的比特位为这个构成的字节数据的最高位。

 
图14.
 
图15.

     图15中字符 " A " "A" "A"的点阵字模放大之后如图16所示,按照逐列式的比特位读取顺序,从左到右,首先读取第一列的点阵数据,白色的方格表示比特位0,绿色的方格表示比特位1,。从上到下读取每一列的数据,这里需要注意的是如果每一列的点的个数不是8的倍速的话,在最后要补上0。因此这里的 12 × 12 12\times12 12×12的点阵实际是 12 × 6 12\times6 12×6的点阵的每一列的最后都要补上四个0,因此该点阵的第一列读取到的两个字节的点阵数据为 0 x 00 , 0 x 40 0x00,0x40 0x00,0x40,因此整个点阵的数据字节数为 6 × 2 = 8 6\times2=8 6×2=8。有了点阵数据之后在 L C D LCD LCD屏幕上显示对应的字符就很简单了,只是点阵中的点的显示顺序要和构成字模的16进制数据的顺序一样,比如我们之前在构建字模16进制数据的时候的顺序为从上到下,从左到右的每一列构建的。那么我们在显示的时候每读取连个字节的数据就是相当于一列的点阵数据,比特位1表示亮点,比特位0表示暗点,高位优先。

 
图16.

我的工程在这里。

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

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

相关文章

【Python+Appium】开展自动化测试(四)使用weditor进行元素定位

目录 前言 一,weditor的安装与使用 二,遇到的问题 结语 前言 上一篇我们讲到了如何通过编写一个简单的Python脚本完成了登录app的操作,如何断言,如何编写一条完整的用例。那么今天继续我们的自动化测试第四天,使用…

【Java进阶篇】第五章 集合(下)--Map集合

文章目录1、概述2、Map接口中的常用方法3、Map集合的遍历4、哈希表的数据结构5、Map集合的存取6、hashCode()和equals()的重写7、一些小零散的东西8、HashMap和Hashtable的区别9、Properties类10、TreeMap11、自定义类实现Comparable接口12、二叉树13、Comparator接…

Caffeine《一》

《Caffeine(Java顶级缓存组件)一》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Caffeine(Java顶级缓存组件)》《Caffeine(Java顶级缓存组件)一》1. Caffeine缓存概念1.1 缓存的分…

【MyBatis】一、概述

框架 框架就是对通用代码的封装,提前写好了一堆接口和类,我们可以在做项目的时候直接引入这些接口和类,基于这些现有的接口和类进行开发,提高开发效率。 框架一般以jar包形式存在 三层架构 表现层(UI)&am…

数字化助力生产管理:计件工资管理系统

目前因市场经济的发展,企业为求发展同时为防止消极怠工的情况,常把员工工资与产量结合起来。为了增加工人的劳动积极性,秉持多劳多得的科学管理理念,许多生产类型企业均实现了计件工资制。所谓的计件工资制是指按照生产的合格品的…

python之opencv人脸识别快速体验

目录 1、灰度转换 2、引用opencv官方提供的人脸训练模型 3、绘制方框(用于框住人脸) 4、效果及完整代码: 5、检测多张人脸: 学习链接: 1、灰度转换 # 灰度转换gary cv.cvtColor(img,cv.COLOR_BGR2GRAY) 2、引…

图解:Elasticsearch 8.X 如何求解环比上升比例?

1、企业级Elasticsearch 8.X 实战问题 问题描述:有个聚合的需求,问下大家,一个索引中有时间字段 要求 计算本月和上月相比的环比上升比例?——来自GPVIP群 2、问题释义 2.1 啥叫环比? 环比是统计学术语&#xff0c…

LabVIEW使用Deskto pExecution Trace工具包

LabVIEW使用Deskto pExecution Trace工具包 可以使用桌面执行跟踪工具包来调试和优化大型LabVIEW应用程序,包括具有多个循环的应用程序、客户端-服务器架构、动态加载VI等。该工具包从本地或远程计算机桌面上运行的应用程序捕获执行事件,并在表窗格中显…

PCB layout有DRC为什么还要用CAM和DFM检查?

随着电子产品的高速发展,PCB生产中大量使用BGA、QFP、PGA和CSP等高集成度封装器件,PCB的复杂程度也大大增加,这对于PCB设计也提出了更高的要求。所以在PCB设计阶段,除了基础的电气性能之外,还需要考虑可制造性&#xf…

上游模式用于实验室用冷冻机压力和真空度的高精度控制

摘要:本文针对实验室用冷冻干燥机的真空度控制,提出了干燥过程中的真空度精密控制解决方案。解决方案主要是采用双真空计(电容真空计和皮拉尼真空计)测量干燥过程中的真空度变化,双通道PID真空度控制器一方面采集电容真…

MySQL数据库:2、MySQL的下载与安装、基本使用、系统服务制作

一、MySQL简介 ​ MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 二、安装与下载 1、下载流程 1、访问官方(www.mysql.com&#xf…

数据结构学习笔记(Ⅲ):栈和队列

目录 1 栈 1.1 栈的基本概念 1.定义 2.基本操作 ​1.2 栈道顺序存储实现 1.实现 2.基本操作 3.共享栈 1.3 栈的链式存储实现 2 队列 2.1 基本概念 1.定义 2.基本操作 2.2 队列的顺序实现 1.实现 2.基本操作 2.3 队列的链式实现 1.链式存储实现队列 2.基本操…

Selenium基础 —unittest单元测试框架

目录 (一)unittest基本简介 (二)unittest基本概念 1、unittest核心的四个概念 2、如何创建一个测试类 3、test fixture常用的四个方法 4、unittest编写测试方法(用例)规范 5、执行测试脚本 6、入门示例 7、结果说明 &am…

目标检测论文解读复现之十七:融合注意力机制的YOLOv5口罩检测算法

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

视频格式转换器下载哪个好?分享:3种TS到MP4的转换器

对于TS视频格式大家可能接触的比较少,我们先来认识下TS视频格式。 TS是日本高清摄像头拍摄下的视频格式,常用于记录实录片段,比如讲堂、演唱会、监控等等。TS和MP4不同的地方在于TS是一种抢先非高清版视频,其画质并不如MP4&#x…

华为十年架构师实战经验总结:大规模分布式系统架构与设计实战

前言 本篇是从程序员到首席架构师十多年职业生涯的实战经验总结,系统讲解构建大规模分布式系统的核心技术与实现方法,包含开源的Fourinone系统的设计与实现过程,手把手教你掌握分布式技术。 通过学习这个系统的实现方法与相关的理论&#x…

Investment Guide|Star Investors: X METAVERSE PRO‘s Copy Trading System

With the globalization of finance, people around the world are more keenly aware of the role of finance. When financial investment has become a social trend, “how to effectively use every penny and grasp every investment opportunity in a timely manner” h…

SpringCloud - 服务调用

文章目录1. LB负载均衡(Load Balance)2. Ribbon负载均衡服务调用2.1 Ribbon负载均衡演示2.1.1 架构2.1.2 POM2.1.3 RestTemplate操作2.2 Ribbon核心组件IRule2.3 负载均衡规则替换2.4 Ribbon负载均衡算法2.4.1 原理2.4.2 手动实现负载均衡3. OpenFeign服务调用3.1 OpenFeign使用…

[Spring Boot]09 Spring Boot集成和使用Redis

目录前言Spring Boot如何集成RedisSpring Boot如何使用Redis小结前言 Redis全称Remote Dictionary Server(远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilip…

Python 基础(二):搭建 Python 开发环境

搭建 Python 开发环境一、下载 Python 安装包二、安装 Python三、Python开始菜单介绍3.1 IDLE3.2 Python 3.113.3 Python 3.11 Manuals3.4 Python 3.11 Manuals Docs四、Hello World大家好,我是水滴~~ 本篇文章主要介绍如何搭建 Python 的开发环境,主要内…