[DemoCode下载] 使用M058S的SPI轻松驱动ST7735 TFT IPS屏

[复制链接]
2288|10
 楼主| gaoyang9992006 发表于 2024-7-24 16:40 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2024-7-24 17:09 编辑

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

  3. #define CS_SetLow()                P04=0
  4. #define CS_SetHigh()        P04=1

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

  1. void ST7735_SPI_SendByte(uint8_t byte)
  2. {

  3.         //LCD_Writ_Bus(byte);
  4.         /* Write to TX register */
  5.         SPI_WRITE_TX0(SPI0, byte);
  6.         /* Trigger SPI data transfer */
  7.         SPI_TRIGGER(SPI0);
  8.         /* Check SPI0 busy status */
  9.         while(SPI_IS_BUSY(SPI0));

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


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

  3.     /* Enable SPI0 peripheral clock */
  4.     CLK_EnableModuleClock(SPI0_MODULE);

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



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




接下来就可以使用ST7735的函数使用SPI实现屏幕点亮了
  1.         ST7735_Init();
  2.         ST7735_FillScreen(ST7735_BLACK);
  3.         ST7735_DrawRectangle(0,0+24,10,5,ST7735_YELLOW);CLK_SysTickDelay(250000);
  4.         ST7735_DrawRectangle(15,5+24,10,20,ST7735_BLUE);CLK_SysTickDelay(250000);
  5.         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数据发送时序
  1. void LCD_Writ_Bus(uint8_t dat)
  2. {       
  3.         uint8_t i;
  4.         for(i=0;i<8;i++)
  5.         {                          
  6.         SCK_SetLow();
  7.                 if(dat&0x80)
  8.                 {
  9.            SDO_SetHigh();
  10.                 }
  11.                 else
  12.                 {
  13.            SDO_SetLow();
  14.                 }
  15.         SCK_SetHigh();
  16.                 dat<<=1;
  17.         }
  18. }

可以切换使用体验。
xinpian101 发表于 2024-7-24 19:29 | 显示全部楼层
晒个效果看看。
 楼主| gaoyang9992006 发表于 2024-7-24 19:32 | 显示全部楼层
et009 发表于 2024-8-11 21:31 | 显示全部楼层
謝謝分享
班杰明 发表于 2024-8-12 23:01 来自手机 | 显示全部楼层
模拟的spi移植起来方便
 楼主| gaoyang9992006 发表于 2024-8-13 08:40 | 显示全部楼层
班杰明 发表于 2024-8-12 23:01
模拟的spi移植起来方便

我这帖子是用硬件实现的,补充了模拟实现的方法。
nixiu520 发表于 2024-11-19 22:23 | 显示全部楼层
学习,学习,看起来对我很有帮助
xixi2017 发表于 2024-11-20 21:41 | 显示全部楼层
看着挺好用啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16403

帖子

222

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