【前言】
我的测评计划是移植LVGL,那莫驱动LCD屏是首要的任务,这一篇将从如何配置SPI,以及对ST7735的数据、复位引脚的适配。
【MCC配置SPI】
1、根据开发板原理图,这次使用的SPI为SERCOM1为驱动ST7735的端口。

与ST7735的IO连接为:
PA16------SDA
PA17------SCK
PA18------CS
PA8-------RST
PA9--------DC
BL我这里直接接VCC
2、进入MCC添加SERCOM1到工程中:

配置中主要是配置为SPI Master模式,以及时钟相位,发送数据带宽等。
3、进行pinset,配置DC、RST如下:

配置spi如下:

配置好,生成工程。
【st7735代码移植】
1、添加st7735的驱动到工程中

2、修改数据发送命令如下:
void ST7735_Reset(void)
{
RST_Clear();
SYSTICK_DelayMs(100);
RST_Set() ;
SYSTICK_DelayMs(100);
}
void ST7735_WriteCommand(uint8_t cmd)
{
uint8_t txBuffer[1];
size_t txSize = 1;
DC_Clear();
txBuffer[0] = cmd;
if(SERCOM1_SPI_Write(&txBuffer, txSize))
{
printf("Write falied\r\n");
}
while( SERCOM1_SPI_IsBusy());
}
void ST7735_WriteByte(uint8_t data)
{
uint8_t txBuffer[1];
size_t txSize = 1;
DC_Set();
txBuffer[0] = data;
if(SERCOM1_SPI_Write(&txBuffer, txSize))
{
printf("Write falied\r\n");
}
while( SERCOM1_SPI_IsBusy());
}
void ST7735_WriteData(uint8_t *data, size_t data_size)
{
DC_Set();
if(SERCOM1_SPI_Write(&data[0], data_size))
{
printf("Write falied\r\n");
}
while( SERCOM1_SPI_IsBusy());
}3、修改初始化代码如下:
void ST7735_Init(void) {
SERCOM1_SPI_Initialize();
setup_st7735.clockFrequency = 6000000;
setup_st7735.clockPhase = SPI_CLOCK_PHASE_LEADING_EDGE;
setup_st7735.clockPolarity = SPI_CLOCK_POLARITY_IDLE_LOW;
setup_st7735.dataBits = SPI_DATA_BITS_8;
if (SERCOM1_SPI_TransferSetup (&setup_st7735, 60000000) == false)
{
printf("setup st7735 failed");
return;
}
// Initialize the display
ST7735_Reset();
ST7735_WriteCommand(ST7735_SLPOUT);
SYSTICK_DelayMs(120);
ST7735_WriteCommand(ST7735_FRMCTR1);
ST7735_WriteByte(0x01);
ST7735_WriteByte(0x2C);
ST7735_WriteByte(0x2D);
ST7735_WriteCommand(ST7735_FRMCTR2);
ST7735_WriteByte(0x01);
ST7735_WriteByte(0x2C);
ST7735_WriteByte(0x2D);
ST7735_WriteCommand(ST7735_FRMCTR3);
ST7735_WriteByte(0x01);
ST7735_WriteByte(0x2C);
ST7735_WriteByte(0x2D);
ST7735_WriteByte(0x01);
ST7735_WriteByte(0x2C);
ST7735_WriteByte(0x2D);
ST7735_WriteCommand(ST7735_INVCTR);
ST7735_WriteByte(0x07);
ST7735_WriteCommand(ST7735_PWCTR1);
ST7735_WriteByte(0xA2);
ST7735_WriteByte(0x02);
ST7735_WriteByte(0x84);
ST7735_WriteCommand(ST7735_PWCTR2);
ST7735_WriteByte(0xC5);
ST7735_WriteCommand(ST7735_PWCTR3);
ST7735_WriteByte(0x0A);
ST7735_WriteByte(0x00);
ST7735_WriteCommand(ST7735_PWCTR4);
ST7735_WriteByte(0x8A);
ST7735_WriteByte(0x2A);
ST7735_WriteCommand(ST7735_PWCTR5);
ST7735_WriteByte(0x8A);
ST7735_WriteByte(0xEE);
ST7735_WriteCommand(ST7735_VMCTR1);
ST7735_WriteByte(0x0E);
ST7735_WriteCommand(ST7735_INVERSE ? ST7735_INVON : ST7735_INVOFF);
ST7735_WriteCommand(ST7735_COLMOD);
ST7735_WriteByte(0x05);
ST7735_WriteCommand(ST7735_CASET);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x7F);
ST7735_WriteCommand(ST7735_RASET);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x9F);
ST7735_WriteCommand(ST7735_GMCTRP1);
ST7735_WriteByte(0x02);
ST7735_WriteByte(0x1C);
ST7735_WriteByte(0x07);
ST7735_WriteByte(0x12);
ST7735_WriteByte(0x37);
ST7735_WriteByte(0x32);
ST7735_WriteByte(0x29);
ST7735_WriteByte(0x2D);
ST7735_WriteByte(0x29);
ST7735_WriteByte(0x25);
ST7735_WriteByte(0x2B);
ST7735_WriteByte(0x39);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x01);
ST7735_WriteByte(0x03);
ST7735_WriteByte(0x10);
ST7735_WriteCommand(ST7735_GMCTRN1);
ST7735_WriteByte(0x03);
ST7735_WriteByte(0x1D);
ST7735_WriteByte(0x07);
ST7735_WriteByte(0x06);
ST7735_WriteByte(0x2E);
ST7735_WriteByte(0x2C);
ST7735_WriteByte(0x29);
ST7735_WriteByte(0x2D);
ST7735_WriteByte(0x2E);
ST7735_WriteByte(0x2E);
ST7735_WriteByte(0x37);
ST7735_WriteByte(0x3F);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x00);
ST7735_WriteByte(0x02);
ST7735_WriteByte(0x10);
ST7735_WriteCommand(ST7735_NORON);
SYSTICK_DelayMs(10);
ST7735_WriteCommand(ST7735_DISPON);
SYSTICK_DelayMs(10);
ST7735_SetRotation(ST7735_ROTATION);
ST7735_FillScreen(ST7735_BLACK);
}到此代码移植完毕
【测试】
在main.c中,我们初始化st7735然后输入字符串到LCD屏中。
ST7735_Init();
ST7735_DrawString(0, 0, (const char *)("hello world"), ST7735_YELLOW, ST7735_BLACK, &Font_11x18);
ST7735_DrawString(20,40, (const char *)("SAME51"), ST7735_YELLOW, ST7735_BLACK, &Font_11x18);
ST7735_DrawString(20,80, (const char *)("eepw.com"), ST7735_BLUE, ST7735_BLACK, &Font_11x18);下载到开发板看,效果如下:

我要赚赏金
