最近正在进行一个项目的开发,屏幕使用的是4.58寸长条屏幕,驱动是ST7701,该屏幕接口有点特殊,既有SPI接口,又有RGB接口,说实话刚拿到这款屏幕,我竟无从下手,问询了厂家技术支持,了解到这个屏幕需要先用SPI进行ST7701的配置,再通过RGB数据线写像素点。
HYS-4.58UT4S2P001 屏幕的实物图以及接口定义如上图所示,接下来就进行电路设计了,使用主控芯片型号是STM32103VET6(这个芯片有些啥功能就不介绍了,大家可以下载datasheet自行查看)主要是支持FSMC接口,引脚足够多,屏幕控制器使用SSD1963,设计之初想的使用8080模式,RGB565来实现屏幕的驱动。 再提一嘴,这个屏幕背光供电是12V,整个硬件系统是3.3V,SSD1963某些引脚需要1.2V供电,我这边引入了两路电,一路是5V,通过两个LDO分别转3.3V和1.2V,另一路12V输入仅供给屏幕背光,这样整套系统的“血管”就建立完成了。 接下来进行电路的设计,SSD1963部分原理图如下,这个芯片好是好,就是电源引脚太多了,画原理图的时候还好一点,等到了画PCB的时候,真的会原地裂开,SSD1963上半部分引脚连到了主控芯片,下半部分连到了屏幕,所以在画PCB布局的时候,SSD1963介于主控芯片和屏幕之间再好不过了。 我也是第一次在CSDN上发表自己的文章,插入的图片不知道是否可以单击放大,先发表试试看,如果不能放大的话我会再发一篇文章,上图是主控芯片及SSD1963的引脚连接图,大家可以按照我这样来接线,注意一下SSD1963第128引脚,该引脚功能是CONF,通过电平高低来确定SSD1963工作在哪种模式( 6800 or 8080 )数据手册给出CONF引脚接VDDIO也就是3.3V可以配置为8080工作模式,因此R10电阻不焊接,仅焊接R2即可。SSD1963数据命令引脚,第122号引脚连接到了主控芯片FSMC_A16,了解过FSMC大家可以知道,我这套连接方式使用了NE1,基地址为0x60000000,通过A16来确定命令还是数据地址 // 地址线接A16 其中高4位固定为6//SSD1963写命令
void SSD1963_Write_Cmd ( uint16_t usCmd )
{
* ( __IO uint16_t * ) ( SSD1963_CMD_W_ADDR ) = usCmd;
}
//SSD1963写数据
void SSD1963_Write_Data ( uint16_t usData )
{
* ( __IO uint16_t * ) ( SSD1963_DATA_RW_ADDR ) = usData;
}
/******************配置FSMC有关的宏定义-开头****************************/
//地址线接A16 其中高4位固定为6
// 当A17为1时表示数据读写地址 当A17为0时表示指令读写地址
// 0110 0000 0000 0001 0110 0000 0000 0000
// 0000 0000 0000 0000 0000 0000 0000 0000
//涉及对齐 须左移一位
#define SSD1963_DATA_RW_ADDR ( ( uint32_t ) 0x60020000 ) //数据读写地址
#define SSD1963_CMD_W_ADDR ( ( uint32_t ) 0x60000000 ) //指令读写地址
/*A地址信号线*/
#define SSD1963FSMC_A16_GPIO_PORT GPIOD
#define SSD1963FSMC_A16_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_A16_GPIO_PIN GPIO_Pin_11
/*D 数据信号线*/
#define SSD1963FSMC_D0_GPIO_PORT GPIOD
#define SSD1963FSMC_D0_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_D0_GPIO_PIN GPIO_Pin_14
#define SSD1963FSMC_D1_GPIO_PORT GPIOD
#define SSD1963FSMC_D1_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_D1_GPIO_PIN GPIO_Pin_15
#define SSD1963FSMC_D2_GPIO_PORT GPIOD
#define SSD1963FSMC_D2_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_D2_GPIO_PIN GPIO_Pin_0
#define SSD1963FSMC_D3_GPIO_PORT GPIOD
#define SSD1963FSMC_D3_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_D3_GPIO_PIN GPIO_Pin_1
#define SSD1963FSMC_D4_GPIO_PORT GPIOE
#define SSD1963FSMC_D4_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D4_GPIO_PIN GPIO_Pin_7
#define SSD1963FSMC_D5_GPIO_PORT GPIOE
#define SSD1963FSMC_D5_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D5_GPIO_PIN GPIO_Pin_8
#define SSD1963FSMC_D6_GPIO_PORT GPIOE
#define SSD1963FSMC_D6_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D6_GPIO_PIN GPIO_Pin_9
#define SSD1963FSMC_D7_GPIO_PORT GPIOE
#define SSD1963FSMC_D7_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D7_GPIO_PIN GPIO_Pin_10
#define SSD1963FSMC_D8_GPIO_PORT GPIOE
#define SSD1963FSMC_D8_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D8_GPIO_PIN GPIO_Pin_11
#define SSD1963FSMC_D9_GPIO_PORT GPIOE
#define SSD1963FSMC_D9_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D9_GPIO_PIN GPIO_Pin_12
#define SSD1963FSMC_D10_GPIO_PORT GPIOE
#define SSD1963FSMC_D10_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D10_GPIO_PIN GPIO_Pin_13
#define SSD1963FSMC_D11_GPIO_PORT GPIOE
#define SSD1963FSMC_D11_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D11_GPIO_PIN GPIO_Pin_14
#define SSD1963FSMC_D12_GPIO_PORT GPIOE
#define SSD1963FSMC_D12_GPIO_CLK RCC_APB2Periph_GPIOE
#define SSD1963FSMC_D12_GPIO_PIN GPIO_Pin_15
#define SSD1963FSMC_D13_GPIO_PORT GPIOD
#define SSD1963FSMC_D13_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_D13_GPIO_PIN GPIO_Pin_8
#define SSD1963FSMC_D14_GPIO_PORT GPIOD
#define SSD1963FSMC_D14_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_D14_GPIO_PIN GPIO_Pin_9
#define SSD1963FSMC_D15_GPIO_PORT GPIOD
#define SSD1963FSMC_D15_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_D15_GPIO_PIN GPIO_Pin_10
/*控制信号线*/
/*CS片选*/
#define SSD1963FSMC_CS_GPIO_PORT GPIOD
#define SSD1963FSMC_CS_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_CS_GPIO_PIN GPIO_Pin_7
/*WE写使能*/
#define SSD1963FSMC_WE_GPIO_PORT GPIOD
#define SSD1963FSMC_WE_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_WE_GPIO_PIN GPIO_Pin_5
/*OE读使能*/
#define SSD1963FSMC_OE_GPIO_PORT GPIOD
#define SSD1963FSMC_OE_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_OE_GPIO_PIN GPIO_Pin_4
/*FSMC_NWAIT*/
#define SSD1963FSMC_NWAIT_GPIO_PORT GPIOD
#define SSD1963FSMC_NWAIT_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_NWAIT_GPIO_PIN GPIO_Pin_6
/*FSMC_RESET*/
#define SSD1963FSMC_RESET_GPIO_PORT GPIOD
#define SSD1963FSMC_RESET_GPIO_CLK RCC_APB2Periph_GPIOD
#define SSD1963FSMC_RESET_GPIO_PIN GPIO_Pin_3
//RES设置高低
#define SSD1963FSMC_RES_LOW GPIO_ResetBits( SSD1963FSMC_RESET_GPIO_PORT, SSD1963FSMC_RESET_GPIO_PIN )
#define SSD1963FSMC_RES_HIGH GPIO_SetBits( SSD1963FSMC_RESET_GPIO_PORT, SSD1963FSMC_RESET_GPIO_PIN )
/******************配置FSMC有关的宏定义-结尾****************************/
/*******************FSMC初始化相关函数-开头******************/
//FSMC的GPIO初始化
void FSMC_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能SRAM相关的GPIO时钟 */
RCC_APB2PeriphClockCmd(SSD1963FSMC_A16_GPIO_CLK|
SSD1963FSMC_D0_GPIO_CLK | SSD1963FSMC_D1_GPIO_CLK | SSD1963FSMC_D2_GPIO_CLK |
SSD1963FSMC_D3_GPIO_CLK | SSD1963FSMC_D4_GPIO_CLK | SSD1963FSMC_D5_GPIO_CLK |
SSD1963FSMC_D6_GPIO_CLK | SSD1963FSMC_D7_GPIO_CLK | SSD1963FSMC_D8_GPIO_CLK |
SSD1963FSMC_D9_GPIO_CLK | SSD1963FSMC_D10_GPIO_CLK| SSD1963FSMC_D11_GPIO_CLK|
SSD1963FSMC_D12_GPIO_CLK| SSD1963FSMC_D13_GPIO_CLK| SSD1963FSMC_D14_GPIO_CLK|
SSD1963FSMC_D15_GPIO_CLK|
/*控制信号线*/
SSD1963FSMC_CS_GPIO_CLK | SSD1963FSMC_WE_GPIO_CLK | SSD1963FSMC_OE_GPIO_CLK |
SSD1963FSMC_NWAIT_GPIO_CLK | SSD1963FSMC_RESET_GPIO_CLK, ENABLE);
/*-- GPIO 配置 -----------------------------------------------------*/
/* 通用 GPIO 配置 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //配置为推挽复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*A地址信号线 针对引脚配置*/
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_A16_GPIO_PIN;
GPIO_Init(SSD1963FSMC_A16_GPIO_PORT, &GPIO_InitStructure);
/*DQ数据信号线 针对引脚配置*/
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D0_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D0_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D1_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D1_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D2_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D2_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D3_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D3_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D4_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D4_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D5_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D5_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D6_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D6_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D7_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D7_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D8_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D8_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D9_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D9_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D10_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D10_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D11_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D11_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D12_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D12_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D13_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D13_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D14_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D14_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_D15_GPIO_PIN;
GPIO_Init(SSD1963FSMC_D15_GPIO_PORT, &GPIO_InitStructure);
/*控制信号线*/
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_CS_GPIO_PIN;
GPIO_Init(SSD1963FSMC_CS_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_WE_GPIO_PIN;
GPIO_Init(SSD1963FSMC_WE_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_OE_GPIO_PIN;
GPIO_Init(SSD1963FSMC_OE_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //NWAIT配置为浮空输入
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_NWAIT_GPIO_PIN;
GPIO_Init(SSD1963FSMC_NWAIT_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SSD1963FSMC_RESET_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //配置为推挽复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(SSD1963FSMC_RESET_GPIO_PORT, &GPIO_InitStructure);
}
//初始化FSMC模式 时序结构体作为一个指针写进初始化结构体中
static void FSMC_Mode_Config(void)
{
FSMC_NORSRAMTimingInitTypeDef ReadTimInitStruct;
FSMC_NORSRAMInitTypeDef SRAMInitStruct;
//使能AHB时钟 FSMC
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);
ReadTimInitStruct.FSMC_AccessMode = FSMC_AccessMode_B;
ReadTimInitStruct.FSMC_AddressHoldTime = 0x00;
ReadTimInitStruct.FSMC_AddressSetupTime = 0x01;
ReadTimInitStruct.FSMC_BusTurnAroundDuration = 0x00;
ReadTimInitStruct.FSMC_CLKDivision = 0x00;
ReadTimInitStruct.FSMC_DataLatency = 0x00;
ReadTimInitStruct.FSMC_DataSetupTime = 0x04;
//使用的结构体
SRAMInitStruct.FSMC_Bank = FSMC_Bank1_NORSRAM1; //设置要控制的BANK区域
SRAMInitStruct.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; //设置数据宽度
SRAMInitStruct.FSMC_MemoryType = FSMC_MemoryType_NOR; //设置存储器的类型
SRAMInitStruct.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //设置是否写使能
//SSD1963未使用
SRAMInitStruct.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;//突发访问模式
SRAMInitStruct.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
SRAMInitStruct.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //数据地址复用
SRAMInitStruct.FSMC_WaitSignal = FSMC_WaitSignal_Disable; //是否使能等待状态插入
SRAMInitStruct.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
SRAMInitStruct.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; //等待信号极性
SRAMInitStruct.FSMC_WrapMode = FSMC_WrapMode_Disable; //是否支持对齐的突发模式
SRAMInitStruct.FSMC_WriteBurst = FSMC_WriteBurst_Disable; //是否使能写突发操作
SRAMInitStruct.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; //是否使能拓展模式
//读写时序结构体
SRAMInitStruct.FSMC_ReadWriteTimingStruct = &ReadTimInitStruct;
SRAMInitStruct.FSMC_WriteTimingStruct = &ReadTimInitStruct;
//配置写入到寄存器
FSMC_NORSRAMInit(&SRAMInitStruct);
//使能FSMC
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1,ENABLE);
}
//FSMC初始化
void FSMC_Init(void)
{
//FSMC的GPIO初始化
FSMC_GPIO_Init();
//FSMC的模式初始化
FSMC_Mode_Config();
SSD1963FSMC_RES_LOW;
Delay_1Ms(10);
SSD1963FSMC_RES_HIGH;
}
/*******************FSMC初始化相关函数-结尾******************/
本文发布于:2024-02-02 20:12:22,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170687594446166.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |