[MCU] 【沁恒RISC-V内核 CH582】SPI 驱动ST7735

lugl4313820   2022-2-27 10:40 楼主

【沁恒RISC-V内核 CH582】I2C 点亮OLED屏 - 国产芯片交流 - 电子工程世界-论坛 (eeworld.com.cn)

继I2C驱动OLED屏后,今天测试硬件SPI0驱动ST7735LCD屏。

一、CH582 芯片提供了 SPI0,特性如下:

  • SPI0 支持主机模式(Master)和从机模式(Slave)。
  •  兼容串行外设接口(SPI)规范。
  • 支持模式 0 和模式 3 数据传输方式。
  • 8 位数据传输方式,数据位序可选:字节低位在前或者高位在前。
  • 时钟频率最高可达系统主频 Fsys 的一半。
  • 8 字节 FIFO。
  • SPI0 从机模式支持首字节为命令模式或数据流模式。
  • SPI0 支持 DMA,数据传输效率更高。

二、SPI初始化:

    SPI0的IO分别是PA12(NSS),PA13(SCK),PA14(MOSI),今天我驱动ST7735不需要用到数据接收,所以PA15MISO不用配置

        GPIOA_ModeCfg( GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA );

    SPI0_MasterDefInit();

三、ST7735的DC、RES、BL角的初始,都配置成20mA的输出模式:

    GPIOA_ModeCfg(RES_PIN | DC_PIN | CS_PIN, GPIO_ModeOut_PP_20mA);

四、把DC、RES、BL高低电平定义如下:

#define RES_PIN  GPIO_Pin_0
#define DC_PIN   GPIO_Pin_1
#define BLK_PIN  GPIO_Pin_3
#define SCK_PIN  GPIO_Pin_13
#define MOSI_PIN GPIO_Pin_14
#define CS_PIN   GPIO_Pin_12
//-----------------LCD端口定义----------------

#define LCD_CS_Clr()   GPIOA_ResetBits(CS_PIN)//CS
#define LCD_CS_Set()   GPIOA_SetBits(CS_PIN)

#define LCD_RES_Clr()  GPIOA_ResetBits(RES_PIN)//RES
#define LCD_RES_Set()  GPIOA_SetBits(RES_PIN)

#define LCD_DC_Clr()   GPIOA_ResetBits(DC_PIN)//DC
#define LCD_DC_Set()   GPIOA_SetBits(DC_PIN)

#define LCD_BLK_Clr()  GPIOA_ResetBits(BLK_PIN)//BLK
#define LCD_BLK_Set()  GPIOA_SetBits(BLK_PIN)

经过以上四个步骤,ST7735硬件初始化就OK了,相比STM32,他的语句简洁。我从N32G45的工程把ST7735移植过来就几步,花配了几分钟就OK。

其他的ST7735的驱动库,我放在附件里。工程下载下来,解压到EXAM目录下就直接可以测试了。

main.c为:

/********************************** (C) COPYRIGHT *******************************
 * File Name          : Main.c
 * Author             : 刘建华
 * Version            : V1.0
 * Date               : 2022/02/27
 * Description        : 演示ST7735 硬件SPI驱动
 *******************************************************************************/

#include "CH58x_common.h"
#include "lcd_init.h"
#include "lcd.h"
__attribute__((aligned(4)))   UINT8 spiBuff[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6 };
__attribute__((aligned(4)))   UINT8 spiBuffrev[16];

void DebugInit( void )
{
  GPIOA_SetBits( GPIO_Pin_9 );
  GPIOA_ModeCfg( GPIO_Pin_8, GPIO_ModeIN_PU );
  GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeOut_PP_5mA );
  UART1_DefInit();
}

int main()
{
  UINT8 i;

  SetSysClock( CLK_SOURCE_PLL_60MHz );

  /* 配置串口调试 */
  DebugInit();
  PRINT( "Start @ChipID=%02X\n", R8_CHIP_ID );

  LCD_Init();
  LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
  LCD_ShowString(10,0,"CH582M",BLUE,WHITE,32,0);
  LCD_ShowString(16,36,"HELLO WORLD",RED,WHITE,16,0);
  LCD_ShowString(16,54,"ST7735",RED,WHITE,16,0);
  while( 1 )
    ;

}

微信图片_20220227103931.jpg

    SPI_ST7735.7z (2022-2-27 10:37 上传)

    192.87 KB, 下载次数: 93

回复评论 (1)

好啊,顶一个。

点赞  2022-2-27 12:16
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复