【沁恒RISC-V内核 CH582】I2C 点亮OLED屏 - 国产芯片交流 - 电子工程世界-论坛 (eeworld.com.cn)
继I2C驱动OLED屏后,今天测试硬件SPI0驱动ST7735LCD屏。
一、CH582 芯片提供了 SPI0,特性如下:
二、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 )
;
}