[活动专区] 【AT-START-F425测评】15、硬件SPI驱动(ST7735)1.8吋TFT LCD

[复制链接]
 楼主| freeelectron 发表于 2022-3-20 14:55 | 显示全部楼层 |阅读模式
本帖最后由 freeelectron 于 2022-3-20 14:56 编辑

直接上图,先看效果。
863996236cc2fb3225.png

1、硬件连接
GND         GND
3.3V         VCC  
PA5          SCL
PA7         SDA
PB0         ERS(复位)
PB1         DC(命令数据选择)
PA4         CS(片选)      
PB2         BL(背光)   


2、字库取摸方式
取模方式:阴码、逆向、列行式
使用PCtoLCD2002软件取摸。
114346236ce0d82ac2.png

3、图片取摸
水平扫描,16位真彩色  
使用Image2Lcd取摸
549806236ce43872a5.png

4、代码实现
(1)IO以及SPI初始化
代码兼容软件SPI和硬件SPI两种方式,通过宏SOFTWARE_SPI_ENABLE选择。
  1. void LcdIoInit(void)
  2. {
  3.         gpio_init_type gpio_init_struct;

  4.         /* enable the led clock */
  5.         crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  6.         crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);

  7.         /* set default parameter */
  8.         gpio_default_para_init(&gpio_init_struct);

  9. #if SOFTWARE_SPI_ENABLE        
  10.         /* configure the led gpio */
  11.         gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  12.         gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  13.         gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  14.         gpio_init_struct.gpio_pins = GPIO_PINS_4|GPIO_PINS_5|GPIO_PINS_7;
  15.         gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  16.         gpio_init(GPIOA, &gpio_init_struct);
  17.         
  18.         gpio_bits_set(GPIOA,GPIO_PINS_4|GPIO_PINS_5|GPIO_PINS_7);

  19. #else        

  20.         /*SPI1 :  
  21.                 PA4/CS  
  22.                 PA5/SCK   
  23.                 PA6/MISO   
  24.                 PA7/MOSI   
  25.         */
  26.         
  27.         gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
  28.         gpio_init_struct.gpio_pull           = GPIO_PULL_UP;
  29.         gpio_init_struct.gpio_mode           = GPIO_MODE_OUTPUT;
  30.         gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  31.         gpio_init_struct.gpio_pins = GPIO_PINS_4;
  32.         gpio_init(GPIOA, &gpio_init_struct);
  33.         
  34.         gpio_bits_set(GPIOA,GPIO_PINS_4);

  35.         gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE5, GPIO_MUX_0);
  36.         gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE6, GPIO_MUX_0);
  37.         gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE7, GPIO_MUX_0);

  38.         gpio_default_para_init(&gpio_init_struct);

  39.         gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
  40.         gpio_init_struct.gpio_pull           = GPIO_PULL_DOWN;
  41.         gpio_init_struct.gpio_mode           = GPIO_MODE_MUX;
  42.         gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  43.         gpio_init_struct.gpio_pins = GPIO_PINS_5;
  44.         gpio_init(GPIOA, &gpio_init_struct);

  45.         gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
  46.         gpio_init_struct.gpio_pull           = GPIO_PULL_UP;
  47.         gpio_init_struct.gpio_mode           = GPIO_MODE_MUX;
  48.         gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  49.         gpio_init_struct.gpio_pins = GPIO_PINS_6;
  50.         gpio_init(GPIOA, &gpio_init_struct);

  51.         gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
  52.         gpio_init_struct.gpio_pull           = GPIO_PULL_UP;
  53.         gpio_init_struct.gpio_mode           = GPIO_MODE_MUX;
  54.         gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  55.         gpio_init_struct.gpio_pins = GPIO_PINS_7;
  56.         gpio_init(GPIOA, &gpio_init_struct);
  57.         
  58.         
  59.         spi_init_type spi_init_struct;

  60.         crm_periph_clock_enable(CRM_SPI1_PERIPH_CLOCK, TRUE);
  61.   
  62.         spi_default_para_init(&spi_init_struct);
  63.         spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX;
  64.         spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
  65.         spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_2;
  66.         spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
  67.         spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
  68.         spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH;  //SPI_CLOCK_POLARITY_HIGH
  69.         spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;       //SPI_CLOCK_PHASE_2EDGE
  70.         spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
  71.         spi_init(SPI1, &spi_init_struct);

  72.         spi_enable(SPI1, TRUE);
  73.         
  74. #endif        
  75.         
  76.         gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  77.         gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  78.         gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  79.         gpio_init_struct.gpio_pins = GPIO_PINS_0|GPIO_PINS_1|GPIO_PINS_2;
  80.         gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  81.         gpio_init(GPIOB, &gpio_init_struct);
  82.         
  83.         gpio_bits_set(GPIOB,GPIO_PINS_0|GPIO_PINS_1|GPIO_PINS_2);
  84. }
(2)SPI写数据
  1. void LCD_Writ_Bus(u8 dat)
  2. {        
  3.         LCD_CS_LOW();
  4.         
  5. #if SOFTWARE_SPI_ENABLE        
  6.         
  7.         u8 i;

  8.         for(i=0;i<8;i++)
  9.         {                          
  10.                 LCD_SCLK_LOW();
  11.                 if(dat&0x80)
  12.                 {
  13.                    LCD_MOSI_HIGH();
  14.                 }
  15.                 else
  16.                 {
  17.                    LCD_MOSI_LOW();
  18.                 }
  19.                 LCD_SCLK_HIGH();
  20.                 dat<<=1;
  21.         }
  22. #else
  23.     spi_i2s_data_transmit(SPI1, dat);
  24.         while(spi_i2s_flag_get(SPI1, SPI_I2S_TDBE_FLAG) == RESET) {};

  25. #endif        
  26.         LCD_CS_HIGH();        
  27. }
(3)测试代码
  1. void LcdTest(void)
  2. {
  3.         LcdInit();//LCD初始化
  4.         LcdFill(0,0,LCD_W,LCD_H,BLACK);
  5.         
  6.         LcdShow16x16Hz(40, 0, 4, YELLOW, BLACK);
  7.         LcdShow16x16Hz(56, 0, 5, YELLOW, BLACK);
  8.         LcdShow16x16Hz(72, 0, 6, YELLOW, BLACK);

  9.         LcdShowString(32,24,"AT32F425",BLUE, BLACK,16);
  10.         LcdShowImage (14,60, 100, 93, gImage_zan);//winxin_gImage_x
  11. }


4、现象

564246236cf762620d.png
显示了字符,中文、以及图片。





豌豆爹 发表于 2022-3-23 09:49 来自手机 | 显示全部楼层
这显示屏幕的表情挺可爱
xt3203 发表于 2023-12-4 22:10 | 显示全部楼层
学习中,未得要领,可以分享一下完整的工程文件吗?
feifeiniao 发表于 2023-12-27 09:12 | 显示全部楼层
有没有完整的代码,可以分享一下吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:stm32/LoRa物联网:304350312

65

主题

785

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部