OpenEdv-开源电子网

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

#define LCD ((LCD_TypeDef *) LCD_BASE) 这是强制类型转换吗?

[复制链接]

34

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-9-25
在线时间
1 小时
发表于 2013-10-9 15:43:45 | 显示全部楼层 |阅读模式
typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;
    
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)  

请问下红色标示:是将LCD_BASE强制类型转换后再定义给LCD 吗?

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

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6657
金钱
6657
注册时间
2015-8-25
在线时间
1034 小时
发表于 2017-5-24 09:55:25 | 显示全部楼层
reg是u16的占2个字节   0x6C0007FE 和  0x6C0007FF
ram是u16的占2个字节   0x6C000800 和  0x6C000801
这个从“7“到”8”的跳变是控制一根地址线从0到1也就是RS
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 1 反对 0

使用道具 举报

42

主题

173

帖子

0

精华

高级会员

Rank: 4

积分
548
金钱
548
注册时间
2013-6-18
在线时间
59 小时
发表于 2013-10-9 16:54:55 | 显示全部楼层
回复【楼主位】kelly_li:
---------------------------------
是的,在c语言中直接用数值(比如0x6c000000这种)不能表示指针的(比如int *a是可以的但是int * 0x6c0000000是错误的),所以必须强制转换结构体指针。
只为摆正你的倒影,我倾倒了整个世界。
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-10-9 19:07:04 | 显示全部楼层
可以这样理解
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

46

主题

333

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2013-12-12
在线时间
63 小时
发表于 2014-2-14 09:05:00 | 显示全部楼层
回复【2楼】菜鸟鸡哥:
---------------------------------
你好,那么这样的话对应过去,LCD_REG 和LCD_RAM各是多少?C语言基础有点差劲~这是我的定义:16位的。我用的是A1---PF1     NE4
#define LCD_BASE        ((uint32_t)(0x60000002 | 0x0C000000))
#define LCD             ((LCD_TypeDef *) LCD_BASE)
按我的计算的话应该是LCD_RAM =0x6c00 0004,         LCD_RAM= 0x6c000000+2^n*2   数据长度是16bit
不知道我这样的计算对不对!
不管对不对吧, ((uint32_t)(0x60000002 | 0x0C000000))这样的话对应过去是多少?怎么对应?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-14 15:09:45 | 显示全部楼层
回复【4楼】正点电子01:
---------------------------------
按你的做法.
&LCD->REG=0x6c00 0002
&LCD->RAM=0x6c00 0004
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

333

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2013-12-12
在线时间
63 小时
发表于 2014-2-14 17:42:23 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,我现在会计算LCD->RAM的地址了,但是这个LCD->REG的地址不知道怎么出来的~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-14 22:32:15 | 显示全部楼层
回复【6楼】 正点电子01 :
---------------------------------
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

333

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2013-12-12
在线时间
63 小时
发表于 2014-2-15 09:55:50 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
谢谢原子哥,我明白你的意思了,还是自己比较笨,嘿嘿~
#define LCD_BASE        ((uint32_t)(0x60000002 | 0x0C000000))
和你的
#define LCD_BASE        ((uint32_t)(0x6C000000 | 0x00000002))
是不是一个意思?
才大二,这个都是自学的~谢谢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-15 11:23:28 | 显示全部楼层
是的
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-3-26
在线时间
0 小时
发表于 2016-3-26 17:34:42 | 显示全部楼层
正点原子 发表于 2014-2-14 15:09
回复【4楼】正点电子01:
---------------------------------
按你的做法.
&LCD->REG=0x6c00 0002
&L ...

原子哥,LCD_RAM不是占2个字节的长度吗?&LCD_RAM=0X6C00 0102对吗?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-3-26
在线时间
0 小时
发表于 2016-3-26 17:37:41 | 显示全部楼层
正点原子 发表于 2014-2-14 15:09
回复【4楼】正点电子01:
---------------------------------
按你的做法.
&LCD->REG=0x6c00 0002
&L ...

原子哥,LCD_RAM不是占2个字节的长度吗?&LCD_RAM=0X6C00 0102对吗?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-3-26
在线时间
0 小时
发表于 2016-3-26 17:40:04 | 显示全部楼层
正点原子 发表于 2014-2-14 15:09
回复【4楼】正点电子01:
---------------------------------
按你的做法.
&LCD->REG=0x6c00 0002
&L ...

抱歉啊!原子哥,LCD_RAM不是占2个字节的长度吗?&LCD_RAM=0X6C01 0002对吗?
回复 支持 反对

使用道具 举报

12

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2016-1-28
在线时间
72 小时
发表于 2016-7-7 13:53:10 | 显示全部楼层
正点原子 发表于 2014-2-14 15:09
回复【4楼】正点电子01:
---------------------------------
按你的做法.
&LCD->REG=0x6c00 0002
&L ...

原子哥,LCD_RAM不是占2个字节的长度吗?&LCD_RAM=0X6C00 0102对吗?求回答
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-14
在线时间
3 小时
发表于 2017-5-24 09:36:06 | 显示全部楼层
FSMC Ax:用在LCD 显示RAM 和寄存器之间进行选择的地址线,即该线
用于选择LCD的RS 脚,该线可用地址线的任意一根线,范围:FSMC_A[25:0]。
注:RS = 0 时,表示读写寄存器;RS = 1 表示读写数据RAM。
举例 1:选择NOR 的第一个存储区,并且使用FSMC_A16 来控制LCD 的
RS 引脚,则我们访问LCD显示RAM 的基址为0x6002 0000,访问LCD寄存器
的地址为:0x6000 0000。
举例 2:选择NOR 的第四个存储区,使用FSMC_A0 控制LCD 的RS 脚,
则访问LCD显示RAM的基址为0x6000 0002,访问LCD寄存器的地址为:0x6000
0000。这个更好理解
回复 支持 反对

使用道具 举报

9

主题

121

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1588
金钱
1588
注册时间
2014-7-8
在线时间
172 小时
发表于 2019-2-21 11:26:08 | 显示全部楼层
mark一下!
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2012-3-20
在线时间
7 小时
发表于 2022-1-6 20:17:44 | 显示全部楼层
就是让结构体的地址指向0x6C0007FE
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-1-19
在线时间
8 小时
发表于 4 天前 | 显示全部楼层
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))  这个数值(0x6C000000 | 0x000007FE)代表什么意思?LCD 寄存器位置?
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-1-19
在线时间
8 小时
发表于 4 天前 | 显示全部楼层
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))  这个数值是怎计算出来?
回复 支持 反对

使用道具 举报

8

主题

570

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2908
金钱
2908
注册时间
2016-5-13
在线时间
184 小时
发表于 3 天前 | 显示全部楼层
leoleixm 发表于 2025-5-14 09:30
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))  这个数值是怎计算出来?

这个不是计算出来的。而是和硬件对应的。就是说硬件连接的是那个脚,就去操作那个脚。管脚对应的物理地址是固定的。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-18 19:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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