本帖最后由 qjp1988113 于 2020-6-4 14:02 编辑
eMini板上的资源不少了。最近在咸鱼上淘了个LCD SHIELD,挺好的,320*240分辨率,带触摸,带SD卡槽,可惜是卡槽和触摸不能同时使用,LCD是SPI方式驱动的。
我把eMini板上的ardui的接口焊上排母了。
eMINI板子自带的例程库里,我们选择NSS用软件控制的方式来做这个程序,因为它更灵活。
直接打开:
工程里面我们把引脚的定义修改成实际板子与屏连接的定义(这里其实无需修改,用的就是SPI2),
板子上SPI2同时驱动了25D16 flash ,可惜这个芯片的SPI的4个控制引脚完全和arduino座子引出的重合。
我一开始担心会不会有影响呢,实际上没影响。但是这样就不能同时使用板上的FLASH了,真可惜,为啥
FLASH的CS端不接到其他引脚呢。
查看代码的SPI配置,这里用的硬件SPI,也就没什么好说的了,注意设定的波特率不要太快。
我们最重要的是用到SPI读写的函数:
unsigned int SPIMReadWriteByte(unsigned char tx_data);
例子里面其他的一些什么readID的,都是操作FLASH的函数,不用理它。
LCD驱动的代码就不多说了,把读写单个字节的功能函数换成上面的那个,即可。
LCD除了SPI通讯,还有BKL背光和DC数据/命令2个引脚要设定。下图的LCD_CS其实就是SPI的NSS端
void lcd_port_init(void)
{
GPIO_InitTypeDef tGPIO;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB , ENABLE);
//LCD-CS PB12
tGPIO.GPIO_Pin = LCD_CS_PIN;
tGPIO.GPIO_Mode = GPIO_Mode_Out_PP;
tGPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_CS_GPIO, &tGPIO);
//LCD-DC PB1
tGPIO.GPIO_Pin = LCD_DC_PIN;
tGPIO.GPIO_Mode = GPIO_Mode_Out_PP;
tGPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_DC_GPIO, &tGPIO);
//LCD-BKL PA15
tGPIO.GPIO_Pin = LCD_BKL_PIN;
tGPIO.GPIO_Mode = GPIO_Mode_Out_PP;
tGPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_BKL_GPIO, &tGPIO);
}
把读写操作里面的读写函数换成我们之前设定的那个SPI2读写。
到这一步,我们已经可以控制LCD显示写图形和字符什么的了。
移植下FATFS和SD卡的操作,SD卡的扩展是屏幕带的,有CS控制端,同样复用的SPI2。
完成后下载,显示图片:
在红色文字那一步程序上在增加XP2406触控函数,可以实现触控功能,就不多说了,具体查看代码:
代码移植的比较粗糙,SPI的NSS端在LCD里面和SPI里面都定义了,重复了,不过没影响。
下面附上代码:
ShowImage - 副本.rar
(3.97 MB)
|