.& · 6 天前

MM32F5375硬件spi驱动tftLcd屏评测

MM32F5375 SPI模块支持DMA请求,数据位宽可以设置1-32位
驱动lcd屏需要用到spi DMA请求,在发指令时需将数据位宽设置成8位,发显示数据将位宽设置成16位,spi频率设置37.5M
截屏2025-07-13 11.21.36.png

一.准备工作

1.mini-F5375-OB开发板

WechatIMG105.jpg

2.1.54’ spi屏
WechatIMG104.jpg

二.示例代码

1.spi配置:

GPIO\_InitTypeDef GPIO\_InitStruct;

SPI\_InitTypeDef  SPI\_InitStruct;

RCC\_APB2PeriphClockCmd(RCC\_APB2Periph\_SPI1, ENABLE);

SPI\_StructInit(&SPI\_InitStruct);

SPI\_InitStruct.SPI\_Mode      = SPI\_Mode\_Master;

SPI\_InitStruct.SPI\_DataSize  = SPI\_DataSize\_32b;

SPI\_InitStruct.SPI\_DataWidth = 8;

SPI\_InitStruct.SPI\_CPOL      = SPI\_CPOL\_Low;

SPI\_InitStruct.SPI\_CPHA      = SPI\_CPHA\_1Edge;

SPI\_InitStruct.SPI\_NSS       = SPI\_NSS\_Soft;

SPI\_InitStruct.SPI\_BaudRatePrescaler = SPI\_BaudRatePrescaler\_4;

SPI\_InitStruct.SPI\_FirstBit  = SPI\_FirstBit\_MSB;

SPI\_Init(SPI1, &SPI\_InitStruct);

SPI\_DataSizeConfig(SPI1, 8);

SPI\_BiDirectionalLineConfig(SPI1, SPI\_Enable\_RX);

SPI\_BiDirectionalLineConfig(SPI1, SPI\_Enable\_TX);

RCC\_AHBPeriphClockCmd(RCC\_AHBPeriph\_GPIOA, ENABLE);

GPIO\_PinAFConfig(GPIOA, GPIO\_PinSource4, GPIO\_AF\_5); /* PA4 SPI\_NSS */

GPIO\_PinAFConfig(GPIOA, GPIO\_PinSource5, GPIO\_AF\_5); /* PA5 SPI\_SCK */

GPIO\_PinAFConfig(GPIOA, GPIO\_PinSource6, GPIO\_AF\_5); /* PA6 SPI\_MISO */

GPIO\_PinAFConfig(GPIOA, GPIO\_PinSource7, GPIO\_AF\_5); /* PA7 SPI\_MOSI */

GPIO\_StructInit(&GPIO\_InitStruct);

GPIO\_InitStruct.GPIO\_Pin   = GPIO\_Pin\_4 | GPIO\_Pin\_5 | GPIO\_Pin\_7;

GPIO\_InitStruct.GPIO\_Speed = GPIO\_Speed\_High;

GPIO\_InitStruct.GPIO\_Mode  = GPIO\_Mode\_AF\_PP;

GPIO\_Init(GPIOA, &GPIO\_InitStruct);

GPIO\_StructInit(&GPIO\_InitStruct);

GPIO\_InitStruct.GPIO\_Pin   = GPIO\_Pin\_6;

GPIO\_InitStruct.GPIO\_Speed = GPIO\_Speed\_High;

GPIO\_InitStruct.GPIO\_Mode  = GPIO\_Mode\_IPU;

GPIO\_Init(GPIOA, &GPIO\_InitStruct);

SPI\_Cmd(SPI1, ENABLE);

2.定义 CS, CD,和背光控制命令:

define LCDINTERFACE SPI1

define CMD 0

define DATA 1

define SETCS(s) \

do{ \

if(s) \

{ \

while (RESET == SPI\_GetFlagStatus(LCDINTERFACE, SPI\_FLAG\_TXEPT)); \

} \

SPI\_CSInternalSelected(LCDINTERFACE, s); \

}while(0)

define SETRES(s) \

do{ \

GPIO\_WriteBit(GPIOA, GPIO\_Pin\_3, s); \

}while(0)

define SETCMD(c) \

do{ \

while(RESET == SPI\_GetFlagStatus(LCDINTERFACE, SPI\_FLAG\_TXEPT)); \

GPIO\_WriteBit(GPIOA, GPIO\_Pin\_2, c); \

}while(0)

define SETBLK(s) \

do{ \

if(s) \

{ \

GPIO\_WriteBit(GPIOB, GPIO\_Pin\_1, 1); \

}else{ \

GPIO\_WriteBit(GPIOB, GPIO\_Pin\_1, 0); \

} \

}while(0)

3.LCD屏初始化:

//-------- Reset Sequence-----//

SETBLK(0);

sysDelayMs(50);

SETCS(ENABLE);

sysDelayMs(12);

SETRES(1);

sysDelayMs(12);

SETRES(0);

sysDelayMs(12);

SETRES(1);

sysDelayMs(20);

//------end Reset Sequence-----//

SPI\_DataSizeConfig(LCDINTERFACE, 8);

WriteComm(0x11);

sysDelayMs(20);

WriteComm(0x36); //Memory Data Access Control

WriteData(0x08);

WriteComm(0x3A); //Interface Pixel Format

WriteData(0x55); //MCU-16bit

WriteComm(0xB2); //Porch Setting

WriteData(0x0C); //Normal BP

WriteData(0x0C); //Normal FP

WriteData(0x00); //Enable Seperate

WriteData(0x33); //idle, BP[7:4], FP[3:0]

WriteData(0x33); //partial, BP[7:4], FP[3:0]

WriteComm(0xB7); //Gate Control

WriteData(0x70); //0x70,0x35,0x75 VGH=14.06V, VGL=-11.38

WriteComm(0xBB); //VCOMS Setting

WriteData(0x35);   //0x35,0x3D  Vcom=1.625V

WriteComm(0xC2);

WriteData(0x01);

WriteComm(0xC3);  //VRH Set  ???à¨?¨¨ 2?¨oy???????????

WriteData(0x19);   //0x19  GVDD=4.8V

WriteComm(0xC4);

WriteData(0x20);   //0x20 VDV, 0x20:0v

WriteComm(0xC6); //Frame Rate Control in Normal Mode

WriteData(0x0F);   //0x0F:60Hz

WriteComm(0xD0); //Power Control 1

WriteData(0xA4);

WriteData(0xA1); //AVDD=6.8V, AVCL=-4.8V, VDS=2.3V

//-------------------GAMMA---------------------------

WriteComm(0xE0);

WriteData(0x70);

WriteData(0x06);

WriteData(0x0B);

WriteData(0x07);

WriteData(0x08);

WriteData(0x05);

WriteData(0x2B);

WriteData(0x43);

WriteData(0x42);

WriteData(0x06);

WriteData(0x14);

WriteData(0x15);

WriteData(0x29);

WriteData(0x2D);

WriteComm(0xE1);

WriteData(0x70);

WriteData(0x05);

WriteData(0x0B);

WriteData(0x06);

WriteData(0x07);

WriteData(0x05);

WriteData(0x2A);

WriteData(0x33);

WriteData(0x41);

WriteData(0x07);

WriteData(0x14);

WriteData(0x15);

WriteData(0x29);

WriteData(0x2C);

WriteComm(0x21);

WriteComm(0x2A);     //Column Address Set

WriteData(0x00);

WriteData(0x00);   //0

WriteData(0x00);

WriteData(0xEF);   //239

WriteComm(0x2B);     //Row Address Set

WriteData(0x00);

WriteData(0x00);   //0

WriteData(0x00);

WriteData(0xEF);   //239

WriteComm(0xd6);

WriteData(0xa1);

WriteComm(0x29);

三:测试效果

WechatIMG106.jpg

推荐阅读
关注数
0
文章数
1
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息