stm32 8080时序驱动lcd屏幕

88 篇文章 11 订阅

PSAM使用的硬件接口

在这里插入图片描述

PSAM读时序

在这里插入图片描述

PSAM写时序

在这里插入图片描述

相关时序

PSAM_RCRx

在这里插入图片描述在这里插入图片描述

NOR 和PSRAM控制寄存器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
驱动LCD屏幕的思路通常分为以下几个步骤: 1. 确定使用的LCD屏幕型号和接口类型(如SPI、I2C、并行接口等)。 2. 根据LCD屏幕手册,了解其控制器的初始化过程以及数据传输方式(如像素数据的格式、行列扫描方向等)。 3. 编写LCD屏幕控制器的初始化代码,包括设置控制器的时序、电源、像素格式等。 4. 编写像素数据传输函数,将图像数据传输到LCD屏幕上。 在STM32F103系列芯片上,可以使用硬件SPI或软件SPI(通过GPIO模拟SPI)来驱动LCD屏幕。以下是一个简单的示例代码: ```c // 定义SPI接口 #define LCD_SPI SPI1 #define LCD_SPI_PORT GPIOA #define LCD_SPI_CLK RCC_APB2Periph_SPI1 #define LCD_SPI_SCK_PIN GPIO_Pin_5 #define LCD_SPI_MISO_PIN GPIO_Pin_6 #define LCD_SPI_MOSI_PIN GPIO_Pin_7 // 定义LCD屏幕接口 #define LCD_CS_PIN GPIO_Pin_4 #define LCD_DC_PIN GPIO_Pin_3 #define LCD_RST_PIN GPIO_Pin_2 // 初始化SPI接口 void LCD_SPI_Init(void) { SPI_InitTypeDef spi_init; GPIO_InitTypeDef gpio_init; // 使能SPI时钟 RCC_APB2PeriphClockCmd(LCD_SPI_CLK | RCC_APB2Periph_AFIO, ENABLE); // 配置SPI引脚 gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; gpio_init.GPIO_Speed = GPIO_Speed_50MHz; gpio_init.GPIO_Pin = LCD_SPI_SCK_PIN | LCD_SPI_MOSI_PIN; GPIO_Init(LCD_SPI_PORT, &gpio_init); gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; gpio_init.GPIO_Pin = LCD_SPI_MISO_PIN; GPIO_Init(LCD_SPI_PORT, &gpio_init); // 配置SPI spi_init.SPI_Direction = SPI_Direction_2Lines_FullDuplex; spi_init.SPI_Mode = SPI_Mode_Master; spi_init.SPI_DataSize = SPI_DataSize_8b; spi_init.SPI_CPOL = SPI_CPOL_High; spi_init.SPI_CPHA = SPI_CPHA_2Edge; spi_init.SPI_NSS = SPI_NSS_Soft; spi_init.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; spi_init.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(LCD_SPI, &spi_init); // 使能SPI SPI_Cmd(LCD_SPI, ENABLE); } // 初始化LCD屏幕 void LCD_Init(void) { GPIO_InitTypeDef gpio_init; // 使能GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置LCD屏幕引脚 gpio_init.GPIO_Mode = GPIO_Mode_Out_PP; gpio_init.GPIO_Speed = GPIO_Speed_50MHz; gpio_init.GPIO_Pin = LCD_CS_PIN | LCD_DC_PIN | LCD_RST_PIN; GPIO_Init(LCD_SPI_PORT, &gpio_init); // 复位LCD屏幕 GPIO_ResetBits(LCD_SPI_PORT, LCD_RST_PIN); Delay(10); GPIO_SetBits(LCD_SPI_PORT, LCD_RST_PIN); Delay(10); // 初始化LCD屏幕控制器 LCD_SPI_Init(); LCD_WriteCmd(0x01); // 复位 Delay(10); LCD_WriteCmd(0x11); // 退出睡眠 Delay(10); LCD_WriteCmd(0x36); // 设置像素格式 LCD_WriteData(0x00); LCD_WriteCmd(0x3A); // 设置像素数据格式 LCD_WriteData(0x05); LCD_WriteCmd(0x29); // 打开显示 } // 写命令到LCD屏幕 void LCD_WriteCmd(uint8_t cmd) { GPIO_ResetBits(LCD_SPI_PORT, LCD_DC_PIN); GPIO_ResetBits(LCD_SPI_PORT, LCD_CS_PIN); SPI_SendData8(LCD_SPI, cmd); while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) == SET); GPIO_SetBits(LCD_SPI_PORT, LCD_CS_PIN); } // 写数据到LCD屏幕 void LCD_WriteData(uint8_t data) { GPIO_SetBits(LCD_SPI_PORT, LCD_DC_PIN); GPIO_ResetBits(LCD_SPI_PORT, LCD_CS_PIN); SPI_SendData8(LCD_SPI, data); while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) == SET); GPIO_SetBits(LCD_SPI_PORT, LCD_CS_PIN); } ``` 以上代码只是一个简单的示例,具体实现还需要根据LCD屏幕型号和接口类型进行调整。同时,还需要注意时序的设置以及像素数据的格式等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Car12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值