完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void LCD_WR_REG(u16 data) { *(vu16 *)(Bank1_LCD_Reg) = data; } 这是一个例程的关于SSD1289写寄存器的一个函数,有两点不明白: 1、这个 (u32)0x6c000000中的0x6c000000代表什么,为什么有这个数字,难道涉及SSD1289的寄存器地址范围? 2、*(vu16 *)(Bank1_LCD_Reg) = data;这句话为什么能实现写数据的目的,*(*vu16) 是什么意思? |
|
相关推荐
5个回答
|
|
1、是地址,根据你将LCD驱动器挂接的外部总线bank有关。
2、vu16 * 是将后面的地址变成一个指向16位整形变量的指针,意思是访问这个地址时是按照16位位宽来访问的,就是数据总线上一次出现16位数据,前面加个*表示访问地址指向的内容。所以*(vu16*)表示写入或读取地址指向的空间一个16位(整形)内容。 |
|
|
|
#define Bank1_LCD_Reg ((u32)0x6c000000)
void LCD_WR_REG(u16 data) { *(vu16 *)(Bank1_LCD_Reg) = data; } 这是一个例程的关于SSD1289写寄存器的一个函数,有两点不明白: 1、这个 (u32)0x6c000000中的0x6c000000代表什么,为什么有这个数字,难道涉及SSD1289的寄存器地址范围? 2、*(vu16 *)(Bank1_LCD_Reg) = data;这句话为什么能实现写数据的目的,*(*vu16) 是什么意思? --------------------------- 如果没有猜错你的LCD是并口驱动,而且LCD是挂在在FSMC总线上的,FSMC总线总共分为4段地址,可以驱动NOR Flash、 LCD等外设,这四段地址在STM32的寄存器映射上可以找到,其中0x6c000000就代表一个FSMC 总线的地址。 你可以把LCD想象成一个存储空间,就相当于往这个存储空间存储数据,存储的数据就在屏幕上显示出来。 |
|
|
|
看程序0x6c000000就是代表一个地址,vu16或许是是volatile unsigned short,最好追踪去看一下原型
|
|
|
|
你的LCD是挂在在FSMC总线上, 0x6c000000代表地址
|
|
|
|
0x6c000000就是一个地址
|
|
1 条评论
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:45 , Processed in 0.707778 second(s), Total 95, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号