当前位置: 首页 > news >正文

STM32F40X系列FSMC8路驱动LCD显示屏(LY-TFT30-39P-1509 芯片hx8352)

hx8352_8080_8bit_FMSC板级驱动

  • 1.LCD相关
    • 1.1LCD参数
    • 1.2 LCD引脚
    • 1.3 LCD实物
    • 1.4 LCD引脚解释
  • 2.接线关系
  • 3.STM32F40x基于FMSC@16bit修改
    • 1)地址偏移
    • 2)删除多余GPIO
    • 3)修改FMSC的配置
    • 4)LCD初始化寄存器
  • 3.板驱动程序
  • 4.运行结果

1.LCD相关

1.1LCD参数

LCD控制芯片:HX8352
LCD控制芯片通信方式:8080@8bit
LCD分辨率:240pix * 430pix

1.2 LCD引脚

通过LCD电路图可知,带斜杠的为低电平有效。
RS为判断DBx传输的为数据或命令,高为数据,低为命令
WR、RD分别为读写使能,低电平有效
RESET为复位、CS为片选,
DB10-17为数据/命令传输端口,相当于8位同步传输,

图1:LCD输出引脚

1.3 LCD实物

图上AB位置与12标注依次对应,注意B上端有个2个空引脚。
图上C位置,由于3处没有焊接触摸屏的处理芯片和电容,所以触摸屏无效,C引脚无效。
图上D位置为4对应的SD卡引脚,为SPI驱动,此教程未使用。

图1:LCD实物图

1.4 LCD引脚解释

LCD的驱动芯片为HX8352, 驱动芯片会在出厂时,设定IM0-2,从而确定LCD控制模式,如图选定8位数据8080通信,选定的通信引脚为D8-17。

2.接线关系

这个要对应上,需要插一会。

3.STM32F40x基于FMSC@16bit修改

其实只要在FSMC16位数据通信模式上修改即可,需要修改以下几处。

1)地址偏移

FSMC为8位bit,不需要偏移一位。
只要将FSMC_Ax的x位设置为1或者0即可。
如实例:
片选选择FSMC_NE2,对应引脚PG9,储存起始位为0x64000000,
RS连接FSMC_A13,对应引脚PG2,
传输数据FSMC地址写入0x64000000+0<<13 =0x64000000
传输数据FSMC地址写入0x64000000+1<<13 = 0x64002000

/******************************* HX8352 显示屏的 FSMC 参数定义 ***************************/#define      FSMC_Addr_HX8352_CMD         ( ( uint32_t ) 0x64000000 )  //FSMC_Bank1_NORSRAM用于LCD命令操作的地址
#define      FSMC_Addr_HX8352_DATA        ( ( uint32_t ) 0x64002000 )  //FSMC_Bank1_NORSRAM用于LCD数据操作的地址 #define      FSMC_Bank1_NORSRAMx           FSMC_Bank1_NORSRAM2          //由片选引脚决定的NOR/SRAM块
/******************************* HX8352 显示屏8080通讯引脚定义 ***************************/
//片选,选择NOR/SRAM块
#define      LCD_CS_CLK                RCC_AHB1Periph_GPIOG  
#define      LCD_CS_PORT               GPIOG
#define      LCD_CS_PIN                GPIO_Pin_9
#define      LCD_CS_PinSource          GPIO_PinSource9
//DC引脚,使用FSMC的地址信号控制,本引脚决定了访问LCD时使用的地址
//PG2为FSMC_A13
#define      LCD_DC_CLK                RCC_AHB1Periph_GPIOG  
#define      LCD_DC_PORT               GPIOG
#define      LCD_DC_PIN                GPIO_Pin_3
#define      LCD_DC_PinSource          GPIO_PinSource3

在这里插入图片描述

2)删除多余GPIO

删除FSMC_D0-7所有对应的引脚控制,包括引脚时钟、引脚输入输出配置复用。

	GPIO_InitTypeDef GPIO_InitStructure;/* 使能FSMC对应相应管脚时钟*/RCC_AHB1PeriphClockCmd ( 	/*控制信号*/LCD_CS_CLK|LCD_DC_CLK|LCD_WR_CLK|LCD_RD_CLK	|LCD_RST_CLK|//LCD_BK_CLK|/*数据信号*/RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOD , ENABLE );/* 配置FSMC相对应的数据线,FSMC-D0~D15 */	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1//|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15; 					//PD 0 1  14 15	 //8 9 10																			GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;//|GPIO_Pin_11//|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  //PE7-10  11-15																				GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC); 
//		GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC); 
//		GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);
//		GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);
//		GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);
//		GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);
//		GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);
//		GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);
//		GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC); 

3)修改FMSC的配置

重要是修改 FSMC_NORSRAMInitTypeDef类型 的结构体参数 FSMC_MemoryDataWidth

FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth =	FSMC_MemoryDataWidth_8b;    //数据宽度为8bit  

4)LCD初始化寄存器

LCD控制芯片的寄存器需要初始化,其和芯片信号相关,这里为hx8352

	 LCD_W_CMD( 0x1A);LCD_W_DATA(0x02); //BTLCD_W_CMD( 0x1B);LCD_W_DATA(0x88); //VRH//****VCOM offset**///LCD_W_CMD( 0x23);LCD_W_DATA(0x00); //SEL_VCMLCD_W_CMD( 0x24);LCD_W_DATA(0x64); //LCD_W_CMD( 0x25);LCD_W_DATA(0x15); //VDVLCD_W_CMD( 0x2D);LCD_W_DATA(0x03); //NOW[2:0]=001//****OPON**//LCD_W_CMD( 0xE8);LCD_W_DATA(0x60);//Power on SettingLCD_W_CMD( 0x18);LCD_W_DATA(0x04); //Frame rate 72HzLCD_W_CMD( 0x19);LCD_W_DATA(0x01); //OSC_EN='1', start OscLCD_W_CMD( 0x01);LCD_W_DATA(0x00); //DP_STB='0', out deep sleepLCD_W_CMD( 0x1F);LCD_W_DATA(0x88); //STB=0//delayms(50);LCD_W_CMD( 0x1F);LCD_W_DATA(0x80); //DK=0//delayms(50);LCD_W_CMD( 0x1F);LCD_W_DATA(0x90); //PON=1//delayms(50);LCD_W_CMD( 0x1F);LCD_W_DATA(0xD0); //VCOMG=1//delayms(50);//262k/65k color selectionLCD_W_CMD( 0x17);LCD_W_DATA(0x05); //default 0x06 262k color // 0x05 65k color//SET PANELLCD_W_CMD( 0x36);LCD_W_DATA(0x03);//12    //屏幕正反向,红蓝交换,背景,放大屏幕等// 0x03 正常// 0x04 上下反向LCD_W_CMD( 0x29);LCD_W_DATA(0x31); //400 linesLCD_W_CMD( 0x71);LCD_W_DATA(0x1A); //RTN//Gamma 2.2 SettingLCD_W_CMD( 0x40);LCD_W_DATA(0x00);LCD_W_CMD( 0x41);LCD_W_DATA(0x45);LCD_W_CMD( 0x42);LCD_W_DATA(0x45);LCD_W_CMD( 0x43);LCD_W_DATA(0x04);LCD_W_CMD( 0x44);LCD_W_DATA(0x00);LCD_W_CMD( 0x45);LCD_W_DATA(0x08);LCD_W_CMD( 0x46);LCD_W_DATA(0x23);LCD_W_CMD( 0x47);LCD_W_DATA(0x23);LCD_W_CMD( 0x48);LCD_W_DATA(0x77);LCD_W_CMD( 0x49);LCD_W_DATA(0x40);LCD_W_CMD( 0x4A);LCD_W_DATA(0x04);LCD_W_CMD( 0x4B);LCD_W_DATA(0x00);LCD_W_CMD( 0x4C);LCD_W_DATA(0x88);LCD_W_CMD( 0x4D);LCD_W_DATA(0x88);LCD_W_CMD( 0x4E);LCD_W_DATA(0x88);LCD_W_CMD( 0x02);LCD_W_DATA(0x00);LCD_W_CMD( 0x03);LCD_W_DATA(0x00); //Column StartLCD_W_CMD( 0x04);LCD_W_DATA(0x00);LCD_W_CMD( 0x05);LCD_W_DATA(0xEF); //Column EndLCD_W_CMD( 0x06);LCD_W_DATA(0x00);LCD_W_CMD( 0x07);LCD_W_DATA(0x00); //Row StartLCD_W_CMD( 0x08);LCD_W_DATA(0x01);LCD_W_CMD( 0x09);LCD_W_DATA(0x8F); //8f//Row End//Display ON SettingLCD_W_CMD( 0x28);LCD_W_DATA(0x38); //GON=1, DTE=1, D=10//delayms(40);LCD_Delay(0xFFFFF );LCD_W_CMD( 0x28);LCD_W_DATA(0x3F); //3//3c//GON=1, DTE=1, D=11//LCD_W_CMD( 0x22); //Start GRAM write//LCD_W_CMD( 0x16);LCD_W_DATA(0xaa);  //填充方向

3.板驱动程序

stm32f40x_hx8352_LCD驱动下载连接
ask码字模font.c自带
中文字模需要导入到外部flash上
在这里插入图片描述

4.运行结果

bsp_hx8352_lcd.c 中的 test_HX8352_LCD_3() 运行结果

相关文章:

STM32F40X系列FSMC8路驱动LCD显示屏(LY-TFT30-39P-1509 芯片hx8352)

hx8352_8080_8bit_FMSC板级驱动 1.LCD相关1.1LCD参数1.2 LCD引脚1.3 LCD实物1.4 LCD引脚解释 2.接线关系3.STM32F40x基于FMSC16bit修改1)地址偏移2)删除多余GPIO3)修改FMSC的配置4&#xff09;LCD初始化寄存器 3.板驱动程序4.运行结果 1.LCD相关 1.1LCD参数 LCD控制芯片&…...

小象课堂在线授课教育系统

此项目包含后端全部代码&#xff0c;前端包括后台和web界面的源码&#xff0c;数据库用的mysql,可当作课设或者毕设&#xff0c;还可写入自己的简历中 web界面展示&#xff1a; 前端后台界面展示&#xff1a; 用户管理 课程管理 内容配置 订单管理 系统管理 系统监控...

Android 电池容量获取

Android 原生设置电池容量是在 power_profile.xml 中配置&#xff0c;此文件默认在 frameworks 目录下&#xff0c;也可能有 overlay 目录文件。 <!-- This is the battery capacity in mAh (measured at nominal voltage) --><item name"battery.capacity"…...

无涯教程-Perl - tell函数

描述 此函数返回指定FILEHANDLE中读取指针的当前位置(以字节为单位)。如果省略FILEHANDLE,则它将返回上次访问的文件中的位置。 语法 以下是此函数的简单语法- tell FILEHANDLEtell返回值 此函数以字节为单位返回当前文件位置。 例 以下是显示其基本用法的示例代码,要检…...

【论文综述】Transformer 综述

中国科学院、东南大学等联合发表最新的视觉 Transformer 综述_中科院AI算法工程师的博客-CSDN博客 Transformer综述大全&#xff08;1&#xff09;【A Survey of Visual Transformers】_香博士的博客-CSDN博客 Transformer综述大全&#xff08;2&#xff09;【A Survey of Vi…...

博客摘录「 佛祖保佑,永无bug——springboot启动图案的修改方法」2023年6月8日

挺有意思的。佛祖保佑永无BUG 神兽护体 代码注释(各种版本)_风流 少年的博客-CSDN博客...

【JavaEE进阶】SpringBoot 日志

文章目录 一. 日志有什么用?二. 自定义日志打印1. 日志的使用与打印 三. 日志级别1. 日志级别有什么用?2. 日志级别的分类及使用 四. 日志持久化五. 更简单的日志输出---Lombok1. Lombok的使用2. lombok原理解释2.1 Lombok更多注解说明 一. 日志有什么用? 在Java中&#xf…...

conda - 调研介绍

介绍: conda 是一个工具, 也是一个可执行命令, 其核心功能是管理包与环境. conda 支持多种语言, 用来管理Python包是绰绰有余的. 这里注意区分conda和pip, pip命令可以在任何环境中安装Python包, 而conda则是在conda环境中安装任何语言包. 接触过的conda主要有miniconda与anac…...

keepalived集群

keepalived概述 keepalived软件就是通过vrrp协议来实现高可用功能。 VRRP通信原理 VRRP就是虚拟路由冗余协议&#xff0c;它的出现就是为了解决静态路由的单点故障。 VRRP是通过一种竞选一种协议机制来将路由交个某台VRRP路由器。 VRRP 用IP多播的方式&#xff08;多播地…...

CentOS系统环境搭建(八)——CentOS7开机自动执行脚本(以MySQL为例)

CentOS7开机自动执行脚本 文章目录 CentOS7开机自动执行脚本第一步&#xff1a;新建一个脚本run.sh第二步&#xff1a;脚本添加可执行权限第三步&#xff1a;执行如下命令将/etc/rc.d/rc.local文标记为可执行文件第四步&#xff1a;打开/etc/rc.d/rc.local文件&#xff0c;在最…...

re学习(31)BUUCTF-xx(多层加密)

参考文章&#xff1a;【BUUCTF逆向 [2019红帽杯]xx】_nb_What_DG的博客-CSDN博客 re学习笔记&#xff08;26&#xff09;BUUCTF-re-[2019红帽杯]xx_Forgo7ten的博客-CSDN博客 还有B站 水番正文 IDA64位载入 shiftF12查看字符串 交叉引用找到关键代码 使用findcrypt插件找到…...

HDFS的小文件影响及解决办法

Hadoop Distributed File System (HDFS) 是用于存储和处理大规模数据的分布式文件系统。然而,HDFS 中的小文件可能会对系统性能和资源利用产生一些影响。下面是小文件对HDFS的影响以及处理方法的一些信息: 影响: 元数据开销: HDFS中的每个文件和目录都有相关的元数据(文件…...

【前端】husky 的使用

husky 是一个优化 git hooks 的 npm 库 Modern native Git hooks made easy 安装和使用 1.安装 npm install husky --save-dev 2. 初始化 npx husky install&#xff1b;官方文档的写法是在 package.json 中初始化&#xff0c;本质上还是执行了 npx husky install 指令 3. 添加…...

Spring系列篇 -- Bean的生命周期

目录 经典面试题目&#xff1a; 一&#xff0c;Bean的生命周期图 二&#xff0c;关于Bean的生命周期流程介绍&#xff1a; 三&#xff0c;Bean的单例与多例模式 总结&#xff1a; 前言&#xff1a;今天小编给大家带来的是关于Spring系列篇中的Bean的生命周期讲解。在了解B…...

分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测

分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测 目录 分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现BO-BiGRU贝叶斯优化双向门控循环单元多特征分…...

Linux权限系列--给普通用户添加某个命令的sudo权限

原文网址&#xff1a;Linux权限系列--给普通用户添加某个命令的sudo权限_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Linux系统如何给普通用户添加某个命令的sudo权限。 使用场景 普通开发者可能需要sudo的命令&#xff1a; apt-get&#xff08;经常要安装软件&#x…...

11-数据结构-栈和队列的应用(C语言)

栈和队列的应用 目录 栈和队列的应用 一、括号匹配&#xff08;栈&#xff09; 二、表达式的各种转换 (1)中缀转后缀(手工) (2)后缀转中缀表达式(手工) (3)中缀转后缀(栈) (4)中缀转后缀&#xff08;树&#xff09; (5)后缀表达式求值 (6)中缀表达式求值&#xff08;栈…...

uni-app自定义多环境配置,动态修改appid

背景 在企业级项目开发中&#xff0c;一般都会分为开发、测试、预发布、生产等多个环境&#xff0c;在工程化中使用不同的打包命令改变环境变量解决不同环境各种变量需要手动修改的问题&#xff0c;比如接口请求地址&#xff0c;不同环境的请求路径前缀都是不同的。在使用uni-…...

04 - 分离头指针情况、理解HEAD和branch

查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;GIT常用场景- 目录 文章目录 1. 分离头指针2. HEAD和branch2.1 branch的一些操作2.2 HEAD 1. 分离头指针 分离头指针detached HEAD是一种HEAD指针指向了某一个具体的 commit id&#xff0c;而不是分支的情况。 切换…...

C#__基本特性和使用

// 特性&#xff08;attribute&#xff09;: // 一种允许我们向程序集添加元数据的语言结构 // 用于保存程序结构信息的某种特殊类型的类 // 类似“批注”&#xff0c;用于解释说明 #define IsShowMessage // 宏定义&#xff0c;在开头定义&#xff0…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...