OpenEdv-开源电子网

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

关于LCD屏的显示更改接线引脚

[复制链接]

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-11-15
在线时间
0 小时
发表于 2013-11-27 08:44:58 | 显示全部楼层 |阅读模式
大家好,例程中LCD屏的的CS接FSMC_NE4,RS接FSMC_A10,对应开发板上也就是PG12,和PG0。现在我想把程序改为CS接FSMC_NE1,RS接FSMC_A16,对应开发板上PD7,和PD11。程序部分我把 
lcd.h中的#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))改为: 
             #define LCD_BASE        ((u32)(0x60000000 | 0x0001FFFE)) 
把lcd.c中的FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  这里我们使用NE4 ,也就对应BTCR[6],[7] 
改为:FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; 
   把 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  // 使能BANK1  
改为 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  // 使能BANK1  

我想问一下,这样改有错吗?但为啥屏幕只是白屏,什么都不显示,还是还有其他地方需要改动?

求各位大神帮帮忙

很着急

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-11-27 10:02:50 | 显示全部楼层
回复【楼主位】北溟鱼:
---------------------------------
#define  LCD_REG (*(__IO u16 *)(0x60000000)) //rs =0 写地址
#define  LCD_RAM (*(__IO u16 *)(0x60020000)) //rs =1 写数据
1-1
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-11-27 10:29:08 | 显示全部楼层
回复【楼主位】北溟鱼:
---------------------------------
将PD7,PD11设置为复用推挽输出试试,刚说错了,呵呵
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-11-15
在线时间
0 小时
 楼主| 发表于 2013-11-27 10:50:06 | 显示全部楼层
回复【3楼】xiaoyan:
---------------------------------
程序里用的是总线结构,没有设计的具体引脚的定义,这个如何设置?说详细点。
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-11-15
在线时间
0 小时
 楼主| 发表于 2013-11-27 10:58:45 | 显示全部楼层
回复【2楼】mygod:
---------------------------------
这个是加在lcd.h里的吗?这样不是跟结构体定义
typedef struct
{
      u16 LCD_REG;
      u16 LCD_RAM;
}LCD_TypeDef;
冲突了吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-11-27 11:04:34 | 显示全部楼层
回复【5楼】北溟鱼:
---------------------------------
两者用其一即可.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-11-15
在线时间
0 小时
 楼主| 发表于 2013-11-27 15:50:53 | 显示全部楼层
回复【3楼】xiaoyan:
---------------------------------
谢谢,是没定义定义推挽输出的原因,太感谢了,纠结了好多天了,呵呵
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-11-15
在线时间
0 小时
 楼主| 发表于 2013-11-27 15:52:10 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
谢谢原子,做出来了,呵呵
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-3-18
在线时间
0 小时
发表于 2014-8-11 16:29:01 | 显示全部楼层
回复【7楼】北溟鱼:
---------------------------------
我碰到了和你一样的问题 
我已经把PD11和PD7复用推挽输出了
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_11;  // //PORTD???????ì????  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //???????ì????   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure); 
可还是白屏。请问你是怎么做到的呢
回复 支持 反对

使用道具 举报

21

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-7-19
在线时间
89 小时
发表于 2018-2-7 19:22:20 | 显示全部楼层
mygod 发表于 2013-11-27 10:02
回复【楼主位】北溟鱼:
---------------------------------
#define  LCD_REG                        (*(__IO u1 ...

地址线不是32位的吗,为什么要强转成u16??
回复 支持 反对

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-2-7 19:24:20 | 显示全部楼层
飛饵 发表于 2018-2-7 19:22
地址线不是32位的吗,为什么要强转成u16??

数据是16位的,跟地址毛关系??
回复 支持 反对

使用道具 举报

21

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-7-19
在线时间
89 小时
发表于 2018-2-7 19:55:46 | 显示全部楼层
a496298685 发表于 2018-2-7 19:24
数据是16位的,跟地址毛关系??

0x60000000不是从bank1块开始吗,如果转成u16不就变成0x0000了?怎么知道RS是挂在bank1上?又如果我把RS挂在A16上(0x60020000或0x60000000),那还是变成0x0000了,还怎么控制RS?难道我理解错地址线了?
回复 支持 反对

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-2-7 19:58:18 | 显示全部楼层
飛饵 发表于 2018-2-7 19:55
0x60000000不是从bank1块开始吗,如果转成u16不就变成0x0000了?怎么知道RS是挂在bank1上?又如果我把RS ...

你仔细研读一下
        (*(__IO u16 *)(0x60000000))       
是什么意思
回复 支持 反对

使用道具 举报

21

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-7-19
在线时间
89 小时
发表于 2018-2-7 21:26:30 | 显示全部楼层
a496298685 发表于 2018-2-7 19:58
你仔细研读一下
        (*(__IO u16 *)(0x60000000))       
是什么意思

百度了一圈,原来是指把0x60000000作为地址映射到外部存储器上,然后又指向到该地址的值,因为数据是16位的,所以要转成u16。
关键是把(__IO u16 *)理解错了,并不是说把0x60000000变成0x0000,应该说,*(__IO u16 *)是把地址0x60000000指向的值的类型转成u16,对吧?
回复 支持 反对

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-2-7 21:29:59 | 显示全部楼层
飛饵 发表于 2018-2-7 21:26
百度了一圈,原来是指把0x60000000作为地址映射到外部存储器上,然后又指向到该地址的值,因为数据是16位 ...

算是吧。把你的理解倒过来就正确了。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 00:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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