打印
[活动专区]

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

[复制链接]
1277|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 freeelectron 于 2022-3-20 14:56 编辑

直接上图,先看效果。


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


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


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


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

        /* enable the led clock */
        crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
        crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);

        /* set default parameter */
        gpio_default_para_init(&gpio_init_struct);

#if SOFTWARE_SPI_ENABLE        
        /* configure the led gpio */
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
        gpio_init_struct.gpio_pins = GPIO_PINS_4|GPIO_PINS_5|GPIO_PINS_7;
        gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
        gpio_init(GPIOA, &gpio_init_struct);
        
        gpio_bits_set(GPIOA,GPIO_PINS_4|GPIO_PINS_5|GPIO_PINS_7);

#else        

        /*SPI1 :  
                PA4/CS  
                PA5/SCK   
                PA6/MISO   
                PA7/MOSI   
        */
        
        gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_pull           = GPIO_PULL_UP;
        gpio_init_struct.gpio_mode           = GPIO_MODE_OUTPUT;
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init_struct.gpio_pins = GPIO_PINS_4;
        gpio_init(GPIOA, &gpio_init_struct);
        
        gpio_bits_set(GPIOA,GPIO_PINS_4);

        gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE5, GPIO_MUX_0);
        gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE6, GPIO_MUX_0);
        gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE7, GPIO_MUX_0);

        gpio_default_para_init(&gpio_init_struct);

        gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_pull           = GPIO_PULL_DOWN;
        gpio_init_struct.gpio_mode           = GPIO_MODE_MUX;
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init_struct.gpio_pins = GPIO_PINS_5;
        gpio_init(GPIOA, &gpio_init_struct);

        gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_pull           = GPIO_PULL_UP;
        gpio_init_struct.gpio_mode           = GPIO_MODE_MUX;
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init_struct.gpio_pins = GPIO_PINS_6;
        gpio_init(GPIOA, &gpio_init_struct);

        gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_pull           = GPIO_PULL_UP;
        gpio_init_struct.gpio_mode           = GPIO_MODE_MUX;
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init_struct.gpio_pins = GPIO_PINS_7;
        gpio_init(GPIOA, &gpio_init_struct);
        
        
        spi_init_type spi_init_struct;

        crm_periph_clock_enable(CRM_SPI1_PERIPH_CLOCK, TRUE);
  
        spi_default_para_init(&spi_init_struct);
        spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX;
        spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
        spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_2;
        spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
        spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
        spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH;  //SPI_CLOCK_POLARITY_HIGH
        spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;       //SPI_CLOCK_PHASE_2EDGE
        spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
        spi_init(SPI1, &spi_init_struct);

        spi_enable(SPI1, TRUE);
        
#endif        
        
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
        gpio_init_struct.gpio_pins = GPIO_PINS_0|GPIO_PINS_1|GPIO_PINS_2;
        gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
        gpio_init(GPIOB, &gpio_init_struct);
        
        gpio_bits_set(GPIOB,GPIO_PINS_0|GPIO_PINS_1|GPIO_PINS_2);
}
(2)SPI写数据
void LCD_Writ_Bus(u8 dat) 
{        
        LCD_CS_LOW();
        
#if SOFTWARE_SPI_ENABLE        
        
        u8 i;

        for(i=0;i<8;i++)
        {                          
                LCD_SCLK_LOW();
                if(dat&0x80)
                {
                   LCD_MOSI_HIGH();
                }
                else
                {
                   LCD_MOSI_LOW();
                }
                LCD_SCLK_HIGH();
                dat<<=1;
        }
#else
    spi_i2s_data_transmit(SPI1, dat);
        while(spi_i2s_flag_get(SPI1, SPI_I2S_TDBE_FLAG) == RESET) {};

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

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


4、现象


显示了字符,中文、以及图片。





使用特权

评论回复
沙发
豌豆爹| | 2022-3-23 09:49 | 只看该作者
这显示屏幕的表情挺可爱

使用特权

评论回复
板凳
xt3203| | 2023-12-4 22:10 | 只看该作者
学习中,未得要领,可以分享一下完整的工程文件吗?

使用特权

评论回复
地板
feifeiniao| | 2023-12-27 09:12 | 只看该作者
有没有完整的代码,可以分享一下吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

65

主题

785

帖子

10

粉丝