OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3886|回复: 6

F407的lcd的RS角一定要用A6么

[复制链接]

43

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1299
金钱
1299
注册时间
2016-4-21
在线时间
262 小时
发表于 2017-12-21 13:56:17 | 显示全部楼层 |阅读模式
10金钱
我用的A23,PE2一直起不来,会不会是这个问题

最佳答案

查看完整内容[请看2#楼]

//LCD 地址结构体 typedef struct { vu16 LCD_REG; vu16 LCD_RAM; } LCD_TypeDef; //使用 NOR/SRAM 的 Bank1.sector1,地址位 HADDR[27,26]=00 A18 作为数据命令区分线 //注意设置时 STM32 内部会右移一位对其! #define LCD_BASE ((u32)(0x60000000 | 0x0007FFFE)) #define LCD ((LCD_TypeDef *) LCD_BASE) 这里设置对了吗
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2017-12-21 13:56:18 | 显示全部楼层
//LCD 地址结构体
typedef struct
{
vu16 LCD_REG;
vu16 LCD_RAM;
} LCD_TypeDef;
//使用 NOR/SRAM 的 Bank1.sector1,地址位 HADDR[27,26]=00 A18 作为数据命令区分线
//注意设置时 STM32 内部会右移一位对其!
#define LCD_BASE ((u32)(0x60000000 | 0x0007FFFE))
#define LCD ((LCD_TypeDef *) LCD_BASE)
这里设置对了吗

RS

RS
回复

使用道具 举报

43

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1299
金钱
1299
注册时间
2016-4-21
在线时间
262 小时
 楼主| 发表于 2017-12-22 09:27:42 | 显示全部楼层
wangmingwei093 发表于 2017-12-21 13:56
//LCD 地址结构体
typedef struct
{

我的 LCD_BASE该设置成什么
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2017-12-22 13:21:41 | 显示全部楼层
MonkeyD路飞 发表于 2017-12-22 09:27
我的 LCD_BASE该设置成什么

#define LCD_BASE ((u32)(0x60000000 | 0x7E)) 这里你仔细看看原子的注释,LCD_BASE地址是对应SRAM地址,后面是对应的你要用哪个引脚作为控制
回复

使用道具 举报

43

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1299
金钱
1299
注册时间
2016-4-21
在线时间
262 小时
 楼主| 发表于 2017-12-23 14:22:30 | 显示全部楼层
wangmingwei093 发表于 2017-12-22 13:21
#define LCD_BASE ((u32)(0x60000000 | 0x7E)) 这里你仔细看看原子的注释,LCD_BASE地址是对应SRAM地址, ...

就是这个7E搞不大明白,比如A6就是111110,那我A23就是111111111111111111111110,
0x00FFFFFE么,结果并不对
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2017-12-25 10:36:12 | 显示全部楼层
MonkeyD路飞 发表于 2017-12-23 14:22
就是这个7E搞不大明白,比如A6就是111110,那我A23就是111111111111111111111110,
0x00FFFFFE么,结果 ...

这里确实很绕,我简单说下我的理解吧,首先RS是决定写命令还是写数据的,RS=0是写命令,RS=1是写数据。比如你把RS连接到A23,那么我就想,写命令的时候,我把A23这个引脚拉低,写数据的时候,把这个引脚拉高。以ILI9341为例,所有的命令都是8位的,我首先定义内存地址BANK从0X60000000开始(我的是F767,你按照你的板子来写),然后定义A23的偏移量是0X7FFFFE,这里重点是这个偏移量的理解,要理解这个偏移量,先要理解一下屏的信号线接线原理,我们把TFT屏当做一个SRAM来使用,在读写SRAM的时候,会按照A0~A18的地址来读写数据(可以理解直接向地址中写数据,就跟C语言里的指针指向的地址等于数据一样),TFT屏本身没有地址线,只有一条RS线来控制命令和数据的写入,那么好吧,直接把这个RS线当做地址线来用吧,所以直接地址写#define LCD_BASE ((u32)(0x60000000 | 0x7FFFFE)),当时这个地址的时候,就是写命令,对应的就是A23等于0,当 (0x60000000 | 0X800000)的时候就是写数据了,对应的A23=1。我不知道你是不是不理解为什么LCD_REG=(0x60000000 | 0x7FFFFE),而LCD_RAM= (0x60000000 | 0X800000),我一块给你解释了吧,这里涉及的是一个C语言的知识,其实就是上面所说的偏移。结构体成员地址问题,LCD_REG和LCD_RAM都是16位,而对应8位寻址地址是+2的,(单片机好像都是8位寻址吧),所以一个对应写命令,一个对应写数据了
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2017-12-25 10:40:10 | 显示全部楼层
MonkeyD路飞 发表于 2017-12-23 14:22
就是这个7E搞不大明白,比如A6就是111110,那我A23就是111111111111111111111110,
0x00FFFFFE么,结果 ...

你可以查一下,结构体成员地址对齐问题就知道怎么回事了,这个偏移量就是这么回事,其实我觉着原子哥的解释有点复杂了,就是一个C语言里的知识。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 20:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表