战舰LCD小问题,请求大家指点

2019-10-15 20:28发布

//LCD???·?á????
typedef struct
{
 u16 LCD_REG;
 u16 LCD_RAM;
} LCD_TypeDef;
//????NOR/SRAM?? Bank1.sector4,???·??HADDR[27,26]=11 A10×÷???????ü????·???
//×????è???±STM32?????á????????????! 111110=0X3E      
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)     依我自己的理解,这样定义也行啊,可实际是不行的,请问差在哪?

//LCD???·?á????
typedef struct
{
 u32 LCD_REG;
 u32 LCD_RAM;

} LCD_TypeDef;
//????NOR/SRAM?? Bank1.sector4,???·??HADDR[27,26]=11 A10×÷???????ü????·???
//×????è???±STM32?????á????????????! 111110=0X3E      
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FC))
#define LCD             ((LCD_TypeDef *) LCD_BASE)

  A10的话数据和命令的控制信号是0x000007fe,结构体中定义的是16位的变量,两字节加上2就是RAM地址0x00000800.   如果定义的是32位的变量,是不是就是0x000007fc,四字节加上四后就是RAM的地址0x00000800了,但就是不好使,为什么呢?是因为给LCD的数据或是命令是16位的,结构体中就得定义成16位的变量吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
八度空间
1楼-- · 2019-10-16 15:51
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-10-16 17:19
回复【6楼】正点妹子:
---------------------------------
这是用的结构体,必须u16,然后让地址偏移2个位置,也就是让外部地址线增加1.
如果你用u32,那就地址偏移4个位置,外部地址线加2,你一定要这么搞,也可以,自己设计的时候,首地址设置好就可以了。

至于8位的,外部总线你设置为8位模式咯,这样就可以定义为u8,否则如果设置为16位/32位,解决办法参考前面提到的。
正点妹子
3楼-- · 2019-10-16 20:16
回复【8楼】正点原子:
-------------------------回复【8楼】正点原子:
---------------------------------
这夏懂了懂了!!!!   谢谢原子哥,谢谢Badu_space哥,感谢
1612103064
4楼-- · 2019-10-16 23:37
八度空间 发表于 2013-12-17 12:22
回复【3楼】正点妹子:
---------------------------------
LCD_REG/LCD_RAM这两个东西是定义了FSMC的相关地 ...


2.//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(u16 regval)
{
LCD->LCD_REG=regval; //写入要写的寄存器序号
}

这个寄存器序号是谁的寄存器啊?怎样理解这个寄存器?
1612103064
5楼-- · 2019-10-17 04:30
正点原子 发表于 2013-12-17 19:55
回复【6楼】正点妹子:
---------------------------------
这是用的结构体,必须u16,然后让地址偏移2个位 ...


2.//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(u16 regval)
{
LCD->LCD_REG=regval; //写入要写的寄存器序号
}

这个寄存器序号是谁的寄存器啊?怎样理解这个寄存器?
llqzx
6楼-- · 2019-10-17 07:51
 精彩回答 2  元偷偷看……

一周热门 更多>