先上图:
这款LCD点阵型驱动芯片是RA8835,我采用的是8080时序,CS,A0,RD,WR与DB[0..7]
连接原理图:
DB3与DB4是JTAG引脚复用,我并非用JTAG-DP调试端口,而是SW-DP,只需要JTMS/SWDIO与JTCK/SWCLK。
但是stm32复位后,JTAG与SW默认同时开启的,即所有的JTAG端口均被系统保留,软件设置GPIO是不起作用的,所以导致DB4一直为高电平,DB3一直为低电平,ST的文档里说明,如果要释放多余的JTAG端口,需设置SWJ_CFG[2:0]为010,关闭JTAG-DP,启用SW-DP
并且开启端口复用的始终,在代码上体现是这样的:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
缺一不可。谨记
最后是RA8835的驱动,与别的mcu基本类似,这里主要是stm32的端口配置
/**********************bsp**************************************/ #define LCD_CTRL_PORT GPIOA #define LCD_DATA_PORT GPIOB #define RCC_LCD_CTRL_PORT RCC_APB2Periph_GPIOA #define RCC_LCD_DATA_PORT RCC_APB2Periph_GPIOB #define CS_PIN GPIO_Pin_4 #define A0_PIN GPIO_Pin_5 #define WR_PIN GPIO_Pin_2 #define RD_PIN GPIO_Pin_3 /**********************bsp**************************************/ #define GPIO_PIN_L8 ((uint16_t)0x00FF) #define GPIO_PIN_H8 ((uint16_t)0xFF00) #define CS_ON() GPIO_SetBits(LCD_CTRL_PORT, CS_PIN) #define CS_OFF() GPIO_ResetBits(LCD_CTRL_PORT, CS_PIN) #define A0_ON() GPIO_SetBits(LCD_CTRL_PORT, A0_PIN) #define A0_OFF() GPIO_ResetBits(LCD_CTRL_PORT, A0_PIN) #define WR_ON() GPIO_SetBits(LCD_CTRL_PORT, WR_PIN) #define WR_OFF() GPIO_ResetBits(LCD_CTRL_PORT, WR_PIN) #define RD_ON() GPIO_SetBits(LCD_CTRL_PORT, RD_PIN) #define RD_OFF() GPIO_ResetBits(LCD_CTRL_PORT, RD_PIN) #define BKLCD_ON() #define BKLCD_OFF() //低8位为数据端口 #define lcd_CMD(cmdx) GPIO_Write(LCD_DATA_PORT,(GPIO_ReadOutputData(LCD_DATA_PORT)&0xff00)|(cmdx)) #define lcd_DATA(datax) GPIO_Write(LCD_DATA_PORT,(GPIO_ReadOutputData(LCD_DATA_PORT)&0xff00)|(datax))
GPIO_InitTypeDef GPIO_InitStructure; //时钟 RCC_APB2PeriphClockCmd(RCC_LCD_CTRL_PORT | RCC_LCD_DATA_PORT, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); /***************液晶数据口0~7*******************/ GPIO_InitStructure.GPIO_Pin = GPIO_PIN_L8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure); /*****控制端口***WR(PA2), RD(PA3), CS(PA4), A0(PA5)*****/ GPIO_InitStructure.GPIO_Pin = CS_PIN | A0_PIN | RD_PIN | WR_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_CTRL_PORT, &GPIO_InitStructure);
别的注意控制端口的时序,数据锁存后的一定要有几百ns的延时,基本上没有多大问题。
下面移植ucGUI,待续。。。