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.3 LCD实物
图上AB位置与12标注依次对应,注意B上端有个2个空引脚。
图上C位置,由于3处没有焊接触摸屏的处理芯片和电容,所以触摸屏无效,C引脚无效。
图上D位置为4对应的SD卡引脚,为SPI驱动,此教程未使用。
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)LCD初始化寄存器 3.板驱动程序4.运行结果 1.LCD相关 1.1LCD参数 LCD控制芯片&…...
小象课堂在线授课教育系统
此项目包含后端全部代码,前端包括后台和web界面的源码,数据库用的mysql,可当作课设或者毕设,还可写入自己的简历中 web界面展示: 前端后台界面展示: 用户管理 课程管理 内容配置 订单管理 系统管理 系统监控...
Android 电池容量获取
Android 原生设置电池容量是在 power_profile.xml 中配置,此文件默认在 frameworks 目录下,也可能有 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综述大全(1)【A Survey of Visual Transformers】_香博士的博客-CSDN博客 Transformer综述大全(2)【A Survey of Vi…...
博客摘录「 佛祖保佑,永无bug——springboot启动图案的修改方法」2023年6月8日
挺有意思的。佛祖保佑永无BUG 神兽护体 代码注释(各种版本)_风流 少年的博客-CSDN博客...
【JavaEE进阶】SpringBoot 日志
文章目录 一. 日志有什么用?二. 自定义日志打印1. 日志的使用与打印 三. 日志级别1. 日志级别有什么用?2. 日志级别的分类及使用 四. 日志持久化五. 更简单的日志输出---Lombok1. Lombok的使用2. lombok原理解释2.1 Lombok更多注解说明 一. 日志有什么用? 在Java中…...
conda - 调研介绍
介绍: conda 是一个工具, 也是一个可执行命令, 其核心功能是管理包与环境. conda 支持多种语言, 用来管理Python包是绰绰有余的. 这里注意区分conda和pip, pip命令可以在任何环境中安装Python包, 而conda则是在conda环境中安装任何语言包. 接触过的conda主要有miniconda与anac…...
keepalived集群
keepalived概述 keepalived软件就是通过vrrp协议来实现高可用功能。 VRRP通信原理 VRRP就是虚拟路由冗余协议,它的出现就是为了解决静态路由的单点故障。 VRRP是通过一种竞选一种协议机制来将路由交个某台VRRP路由器。 VRRP 用IP多播的方式(多播地…...
CentOS系统环境搭建(八)——CentOS7开机自动执行脚本(以MySQL为例)
CentOS7开机自动执行脚本 文章目录 CentOS7开机自动执行脚本第一步:新建一个脚本run.sh第二步:脚本添加可执行权限第三步:执行如下命令将/etc/rc.d/rc.local文标记为可执行文件第四步:打开/etc/rc.d/rc.local文件,在最…...
re学习(31)BUUCTF-xx(多层加密)
参考文章:【BUUCTF逆向 [2019红帽杯]xx】_nb_What_DG的博客-CSDN博客 re学习笔记(26)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;官方文档的写法是在 package.json 中初始化,本质上还是执行了 npx husky install 指令 3. 添加…...
Spring系列篇 -- Bean的生命周期
目录 经典面试题目: 一,Bean的生命周期图 二,关于Bean的生命周期流程介绍: 三,Bean的单例与多例模式 总结: 前言:今天小编给大家带来的是关于Spring系列篇中的Bean的生命周期讲解。在了解B…...
分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测
分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测 目录 分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现BO-BiGRU贝叶斯优化双向门控循环单元多特征分…...
Linux权限系列--给普通用户添加某个命令的sudo权限
原文网址:Linux权限系列--给普通用户添加某个命令的sudo权限_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Linux系统如何给普通用户添加某个命令的sudo权限。 使用场景 普通开发者可能需要sudo的命令: apt-get(经常要安装软件&#x…...
11-数据结构-栈和队列的应用(C语言)
栈和队列的应用 目录 栈和队列的应用 一、括号匹配(栈) 二、表达式的各种转换 (1)中缀转后缀(手工) (2)后缀转中缀表达式(手工) (3)中缀转后缀(栈) (4)中缀转后缀(树) (5)后缀表达式求值 (6)中缀表达式求值(栈…...
uni-app自定义多环境配置,动态修改appid
背景 在企业级项目开发中,一般都会分为开发、测试、预发布、生产等多个环境,在工程化中使用不同的打包命令改变环境变量解决不同环境各种变量需要手动修改的问题,比如接口请求地址,不同环境的请求路径前缀都是不同的。在使用uni-…...
04 - 分离头指针情况、理解HEAD和branch
查看所有文章链接:(更新中)GIT常用场景- 目录 文章目录 1. 分离头指针2. HEAD和branch2.1 branch的一些操作2.2 HEAD 1. 分离头指针 分离头指针detached HEAD是一种HEAD指针指向了某一个具体的 commit id,而不是分支的情况。 切换…...
C#__基本特性和使用
// 特性(attribute): // 一种允许我们向程序集添加元数据的语言结构 // 用于保存程序结构信息的某种特殊类型的类 // 类似“批注”,用于解释说明 #define IsShowMessage // 宏定义,在开头定义࿰…...
别再只用STFT了!用Python手把手实现短时DCT(STDCT),搞定音频压缩和特征提取
别再只用STFT了!用Python手把手实现短时DCT(STDCT),搞定音频压缩和特征提取 如果你处理过音频信号,大概率用过短时傅里叶变换(STFT)——这个在语音识别、音乐分析中无处不在的工具。但当你面对一…...
停止健身房“赎罪”:把动作揉进日常,比发狠管用
健身房的惩罚 vs 生活中的律动 专栏:清醒日常 | 重新认识这副皮囊 (02) 老哥,今天咱们聊聊一个挺普遍,但很少有人愿意戳破的现象。 你有没有过这种经历:白天在公司极其憋屈地坐了十个小时,改了八遍PPT,晚…...
避坑指南:在Windows 11上用Docker Compose一键部署Casdoor(含MySQL和持久化配置)
Windows 11容器化部署Casdoor全攻略:告别环境配置噩梦 "明明按照文档一步步操作,为什么我的Casdoor就是跑不起来?"这可能是许多Windows开发者初次接触开源身份认证系统时的共同困惑。传统部署方式需要手动配置Go、Node.js、Yarn、…...
SpringBoot+Vue家政服务网站源码+论文
代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...
嘎嘎降AI使用教程:手把手教你用嘎嘎降AI降论文ai率,从97%降到7%实操
嘎嘎降AI使用教程:手把手教你用嘎嘎降AI降论文ai率,从97%降到7%实操 说实话,我当时论文被检测出AI率97%的时候,整个人是懵的。导师直接把报告甩给我说"你这论文是不是全让AI写的",我那叫一个尴尬。后来折腾了…...
3个步骤掌握AI音乐创作:语音模型驱动的开源工具实践指南
3个步骤掌握AI音乐创作:语音模型驱动的开源工具实践指南 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen AI翻…...
双指针-11. 盛最多水的容器
文章目录1.题解2.机考代码3.知识点讲解1.异向双指针力扣地址: 中等:11. 盛最多水的容器1.题解 class Solution {public int maxArea(int[] height) {int maxarea 0, l 0, r height.length - 1;while(l < r){maxarea Math.max(maxarea, Math.min(…...
OpenClaw技能市场盘点:10个Qwen3-32B最佳自动化插件推荐
OpenClaw技能市场盘点:10个Qwen3-32B最佳自动化插件推荐 1. 为什么需要关注OpenClaw技能市场? 去年冬天,当我第一次在本地部署OpenClaw时,最让我惊喜的不是框架本身,而是它背后那个充满可能性的技能市场。作为一个长…...
Wan2.2-I2V-A14B开源大模型教程:模型权重结构解析与LoRA微调入门
Wan2.2-I2V-A14B开源大模型教程:模型权重结构解析与LoRA微调入门 1. 模型概述与环境准备 Wan2.2-I2V-A14B是一款先进的文生视频开源大模型,能够根据文本描述生成高质量视频内容。本教程将深入解析模型权重结构,并指导您完成LoRA微调入门实践…...
Python金融计算效率翻倍的7个隐藏技巧:pandas加速300%、numba编译优化、向量化避坑指南
第一章:Python金融计算效率翻倍的底层逻辑与性能瓶颈诊断Python在金融量化分析中广泛应用,但其默认解释执行机制常导致大规模时间序列回测、蒙特卡洛模拟或协方差矩阵运算时出现显著延迟。效率瓶颈并非源于算法本身,而集中于CPython解释器的G…...
