打印
[DemoCode下载]

使用M058S的SPI轻松驱动ST7735 TFT IPS屏

[复制链接]
1638|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 gaoyang9992006 于 2024-7-24 17:09 编辑

因为要调用M058S的库函数,因此要在ST7735的头文件里包含它
#include "M058S.h"
接下来要实现
RST DC CS的映射
#define DC_SetLow()                P01=0
#define DC_SetHigh()        P01=1

#define CS_SetLow()                P04=0
#define CS_SetHigh()        P04=1

#define RST_SetLow()        P00=0
#define RST_SetHigh()        P00=1
通过宏定义实现函数映射替换
接下来就是通过SPI发送函数实现ST7735的数据发送

void ST7735_SPI_SendByte(uint8_t byte)
{

        //LCD_Writ_Bus(byte);
        /* Write to TX register */
        SPI_WRITE_TX0(SPI0, byte);
        /* Trigger SPI data transfer */
        SPI_TRIGGER(SPI0);
        /* Check SPI0 busy status */
        while(SPI_IS_BUSY(SPI0));

}
最后就是在主函数里,设置IO工作模式和SPI工作模式
        GPIO_SetMode(P0, BIT0|BIT1|BIT4|BIT5|BIT7, GPIO_PMD_OUTPUT);


因为我们只使用了发送功能,在配置SPI时候只配置发送引脚即可,另外CS我们自己实现的拉高拉低,因此也可以不配置SPI的SS
    /* Select HCLK as the clock source of SPI0 */
    CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL1_SPI0_S_HCLK, MODULE_NoMsk);

    /* Enable SPI0 peripheral clock */
    CLK_EnableModuleClock(SPI0_MODULE);

    /* Setup SPI0 multi-function pins */
    SYS->P0_MFP &= ~( SYS_MFP_P05_Msk  | SYS_MFP_P07_Msk);
    SYS->P0_MFP |= (  SYS_MFP_P05_MOSI | SYS_MFP_P07_SPICLK);



最后设置SPI工作模式和位宽,频率
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init SPI                                                                                                */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Configure as a master, clock idle low, 8-bit transaction, drive output on falling clock edge and latch input on rising edge. */
    /* Set IP clock divider. SPI clock rate = 2 MHz */
    SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 8, 2000000);




接下来就可以使用ST7735的函数使用SPI实现屏幕点亮了
        ST7735_Init();
        ST7735_FillScreen(ST7735_BLACK);
        ST7735_DrawRectangle(0,0+24,10,5,ST7735_YELLOW);CLK_SysTickDelay(250000);
        ST7735_DrawRectangle(15,5+24,10,20,ST7735_BLUE);CLK_SysTickDelay(250000);
        ST7735_DrawRectangle(30,25+24,10,10,ST7735_RED);CLK_SysTickDelay(250000);

        
游客,如果您要查看本帖隐藏内容请回复

使用特权

评论回复
沙发
mintspring| | 2024-7-24 16:56 | 只看该作者
求分享工程,学习学习。

使用特权

评论回复
板凳
mintspring| | 2024-7-24 17:06 | 只看该作者
看起来挺好懂。

使用特权

评论回复
地板
gaoyang9992006|  楼主 | 2024-7-24 19:18 | 只看该作者
这里用io模拟一个SPI数据发送时序
void LCD_Writ_Bus(uint8_t dat) 
{       
        uint8_t i;
        for(i=0;i<8;i++)
        {                          
        SCK_SetLow();
                if(dat&0x80)
                {
           SDO_SetHigh();
                }
                else
                {
           SDO_SetLow();
                }
        SCK_SetHigh();
                dat<<=1;
        }
}

可以切换使用体验。

使用特权

评论回复
5
xinpian101| | 2024-7-24 19:29 | 只看该作者
晒个效果看看。

使用特权

评论回复
6
gaoyang9992006|  楼主 | 2024-7-24 19:32 | 只看该作者




使用特权

评论回复
7
et009| | 2024-8-11 21:31 | 只看该作者
謝謝分享

使用特权

评论回复
8
班杰明| | 2024-8-12 23:01 | 只看该作者
模拟的spi移植起来方便

使用特权

评论回复
9
gaoyang9992006|  楼主 | 2024-8-13 08:40 | 只看该作者
班杰明 发表于 2024-8-12 23:01
模拟的spi移植起来方便

我这帖子是用硬件实现的,补充了模拟实现的方法。

使用特权

评论回复
10
nixiu520| | 2024-11-19 22:23 | 只看该作者
学习,学习,看起来对我很有帮助

使用特权

评论回复
11
xixi2017| | 2024-11-20 21:41 | 只看该作者
看着挺好用啊

使用特权

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

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1971

主题

15978

帖子

210

粉丝