打印
[应用相关]

STM32F103驱动4.3寸液晶屏 CubeMX配置 过程易错点

[复制链接]
1158|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
610u|  楼主 | 2022-2-28 22:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
液晶屏显示基础



液晶屏有内嵌MCU屏和RGB屏,RGB屏要求较高 需要单片机直接控制。

其中 正点原子的4.3寸屏幕使用的液晶驱动模块是NT35510.这个芯片有多种驱动方式,比如8080并口 SPI,其中8080因为是并口所以速度较快,因此如果引脚足够的话一般使用8080驱动液晶屏.

因为STM32中只有对应SPI、IIC、CAN的通讯接口,而没有8080的通讯接口

所以stm32使用8080协议通讯方式有两种

使用普通IO口模拟8080时序(速率较慢且繁琐)
使用FSMC的NOR FLASH 模式
(因为

1、NOR FLASH的时序与8080类似

2、液晶显示屏在某种意义上也是一种存储器,只不过它会把存储器内的数据以RGB三原色的形式显示出来)


一般来说都是选择FSMC中的NOR FLASH模式




使用特权

评论回复
沙发
610u|  楼主 | 2022-2-28 22:46 | 只看该作者
FSMC信号名称   功能

CLK              时钟

A[25:0]           地址总线(可以找出一个当作8080的D/Cx 低电平命令 高电平数据)

D[15:0]           双向数据总线

NE[x]            片选线(也就是说可以控制4个SRAM)(当作8080的片选线CSx)

NOE             输出使能(当作RDX   也就是8080读使能)

NWE             写使能(当作WRX    写使能)

NWAIT           NOR 闪存要求FSMC等待的信号

NADV            地址、数据线复用时用作锁存信号

使用特权

评论回复
板凳
610u|  楼主 | 2022-2-28 22:48 | 只看该作者
地址转换
拓展存储器大小

使用特权

评论回复
地板
610u|  楼主 | 2022-2-28 22:49 | 只看该作者
STM32f103中的拓展存储器有四个块,其中每个块又能分为四个存储区(也就是一个块可以连接4个存储器)

实际在STM32芯片内部没有这些存储空间,只是提供了映像来访问外部的存储器

需要注意的是 外部存储器在STM32外部的地址与STM32内部的地址不同。

使用特权

评论回复
5
610u|  楼主 | 2022-2-28 22:49 | 只看该作者
也就是说,当访问0x6000 0000的地址时,是访问块1的存储区1[NE0被拉低]的第一个字节(对应的地址线A[25:0]对应的值是0)

当访问0x6400 0000的地址时,是访问块1的存储区2[NE1被拉低]的第一个字节(对应的地址线A[25:0]对应的值也是0)

使用特权

评论回复
6
610u|  楼主 | 2022-2-28 22:50 | 只看该作者

可以注意到
当数据宽度为16为时,HADDR右移一位后与FSMC地址线A相连。

所以如果定义写地址和读地址,那么如果一个是0x6000 0000 那么下一个其实是0x6000 0002(其实也就类似于一次写入或者读出了2个字节)

使用特权

评论回复
7
610u|  楼主 | 2022-2-28 22:52 | 只看该作者
操作外部存储器步骤

1、初始化外部存储器的对应区域(比如初始化块1存储区0)

定义一个变量的地址在0x6000 0000 到0x9FFF FFFF中,( 使用__attribute__((at(地址))) 或者直接强制转化为指针)
写这个变量时,NWE和NE[x](这里的x需要看地址位置)会被拉低
也就是说当初始化完成后,只用直接赋值对应的变量或者读取对应的变量那么单片机就会按照对应的时序进行数据传输。

使用特权

评论回复
8
610u|  楼主 | 2022-2-28 22:53 | 只看该作者
液晶屏点亮实验

CubeMX配置

其中的NE4和A10是通过原理图的引脚得知, Data为16是因为使用的是8080并口,16位双向数据IO。

使用特权

评论回复
9
610u|  楼主 | 2022-2-28 22:54 | 只看该作者
根据系统时钟72Mhz得到一个HCLK为14ns(向上去整)然后根据液晶屏的8080时序图进行计算,并填入cubeMX中(这里的Bus turn around 无意义 因为地址线和数据线没有复用)

使用特权

评论回复
10
610u|  楼主 | 2022-2-28 23:00 | 只看该作者

使用特权

评论回复
11
610u|  楼主 | 2022-2-28 23:00 | 只看该作者

使用特权

评论回复
12
610u|  楼主 | 2022-2-28 23:01 | 只看该作者
过程中发生的问题以及解决方案
屏幕花屏(复位后的图像相同)
设置初始化坐标,进行清屏操作

    2、屏幕花屏(复位后的图像不同)

设置在初始化工作后设置延时(这个很重要)

   3、初始化成功,但是无法读取ID或者设置光标失败(就是有一些指令失败)

使用特权

评论回复
13
610u|  楼主 | 2022-2-28 23:03 | 只看该作者
原因是忘记keil5忘记关闭优化了,关闭之后显示正常

使用特权

评论回复
14
周半梅| | 2023-9-25 07:10 | 只看该作者

给瞬间电流提供低阻抗导通路径

使用特权

评论回复
15
周半梅| | 2023-9-25 09:16 | 只看该作者

器件整合的再紧凑都无法发挥最大的效率

使用特权

评论回复
16
周半梅| | 2023-9-25 09:41 | 只看该作者

/**************************************************
*函数名称:unsigned int SetOneKeyPushResetTime(void)
*函数功能:按键最长的输出时间
*入口参数:void
*出口参数:unsigned int SOCAPI_SET_KEY_CONTI_TIME
*备注         :这个返回值的设置, 是根据有多长时间启动TouchKeyRestart()一次
例如10ms 启动一次, 那SOCAPI_SET_KEY_CONTI_TIME*10ms,超过时间后此按键无效。
**************************************************/

使用特权

评论回复
17
帛灿灿| | 2023-9-25 09:50 | 只看该作者

void sendrgb(unsigned char a2,b2,c2)//单灯子函数
{
        sendbye(b2);
        sendbye(a2);
        sendbye(c2);
}

使用特权

评论回复
18
Wordsworth| | 2023-9-25 11:12 | 只看该作者

需要串联一个限流电阻在其中

使用特权

评论回复
19
Clyde011| | 2023-9-25 12:15 | 只看该作者

当人接触任何东西时,体内的电荷就会放电。

使用特权

评论回复
20
万图| | 2023-9-25 14:11 | 只看该作者

有不普通的门道

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

517

帖子

0

粉丝