
我有一点点遗憾,就是之前想过为NUCLEO配置一块屏幕,但是一直没有机会,最近有一块TFT屏幕,型号是ILI9225,在KEIL下先编写驱动程序,是初始化,然后写命令,写数据,最后在设置屏幕的寄存器。 void LCD_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB ,ENABLE); -----可以看到我的IO口是B9,B10,B11,B12,B13,B14,B15 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); } void SPIv_WriteData(u8 Data) {//STM32_模拟SPI读写一个字节数据底层函数 unsigned char i=0; for(i=8;i>0;i--) { if(Data&0x80) LCD_SDA_SET; //输出数据 else LCD_SDA_CLR; //LCD_SDA -----> GPIO_Pin_15/ //LCD_SDA_SET----> LCD_CTRL->BSRR=LCD_SDA LCD_SCL_CLR; LCD_SCL_SET; Data<<=1; } } void Lcd_WriteIndex(u8 Index) { LCD_CS_CLR; LCD_RS_CLR; #if USE_HARDWARE_SPI SPI_WriteByte(SPI2,Index); #else SPIv_WriteData(Index); #endif LCD_CS_SET; } //LCD写命令字,根据ILI9225的读写时序完成,与网上已有资料一致 这个是写数据,所有液晶屏都是一样的,只是协议有不同,我的是SPI 按照SPI标准硬件读写协议完成的!像12864之类的协议就有I2C等等。 void Lcd_WriteData(u8 Data) { LCD_CS_CLR; LCD_RS_SET; #if USE_HARDWARE_SPI SPI_WriteByte(SPI2,Data); #else SPIv_WriteData(Data); #endif LCD_CS_SET; } Lcd_Init函数每个液晶屏幕根据其控制芯片的不同也有不一样的写命令,数据组合 我的ILI9225与其他的液晶屏幕的初始化,设置位置当然有所区别 //LCD Init For 2.2inch LCD Panel with ILI9225. LCD_WriteReg(0x10, 0x0000); // Set SAP,DSTB,STB LCD_WriteReg(0x11, 0x0000); // Set APON,PON,AON,VCI1EN,VC LCD_WriteReg(0x12, 0x0000); // Set BT,DC1,DC2,DC3 LCD_WriteReg(0x13, 0x0000); // Set GVDD LCD_WriteReg(0x14, 0x0000); // Set VCOMH/VCOML voltage delay_ms(40); // Delay 20 ms // Please follow this power on sequence LCD_WriteReg(0x11, 0x0018); // Set APON,PON,AON,VCI1EN,VC LCD_WriteReg(0x12, 0x1121); // Set BT,DC1,DC2,DC3 LCD_WriteReg(0x13, 0x0063); // Set GVDD LCD_WriteReg(0x14, 0x3961); // Set VCOMH/VCOML voltage LCD_WriteReg(0x10, 0x0800); // Set SAP,DSTB,STB delay_ms(10); // Delay 10 ms LCD_WriteReg(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC delay_ms(30); // Delay 30 ms LCD_WriteReg(0x02, 0x0100); // set 1 line inversion等等,由于发帖长度限制,这里就写一下一部分吧。 接着我会开一个贴写我在MBED上面是怎么样写SPI来驱动我的ILI9225的 |
没成功,所以换用模拟的SPI,
可以参考下F4的SPI设置问题,我是用的F4的板子 不知道你用的什么板子 可能是用的F3的 这样的话SPI的配置就大差不差了 我这个程序里面还加了文件操作系统 对于需要外扩大容量的SD卡很有帮助,另外还添加了长文件名支持,这样就有点耗内存了 所以我上传了两个版本,你可以拿去参考下
https://www.stmcu.org.cn/module/forum/thread-599839-1-1.html