虽然看了其他回答,但是对于如何理解LCD读写数据/命令相关函数还是存在疑问。
以LCD_WR_REG()函数
其定义如下:
void LCD_WR_REG(u16 regval)
{
LCD->LCD_REG=regval;//写入要写的寄存器序号
}
如上所述,这个函数体就一个赋值语句,就是往Block 1的Sector 4的地址为0X6C0007FE的存储单元赋值regval。当然,我们这里是把LCD相当于sram看待,实质是不存在这个存储单元。个人理解这个语句会让STM32的FSMC执行两个动作:1,地址总线的信号为0X6C0007FE,如前所述,右移一位A10为0,意味着RS=0,意味着数据线上为命令信号;2,数据线的信号为regval。又由于CS、WR等其他信号FSMC自动控制,这样就完成了regval往LCD的写入,相当于OLED模块对应函数功能,如下所示。
void OLED_WR_Byte(u8 dat,u8 cmd)
{
DATAOUT(dat);
OLED_RS=cmd; //RS即为数据命令标志位
OLED_CS=0;
OLED_WR=0; //注意在WR的上升沿数据才能写入;然后保持高不变,
OLED_WR=1;
OLED_CS=1; //写完CS拉高,RS默认为高。
OLED_RS=1;
}
不过仍然有问题: 为什么这样普通的赋值语句就会让FSMC认为是给地址信号为0X6C0007FE 的sram存储单元赋值,或者说为什么就认为0X6C0007FE是sram地址信号?虽然开启了FSMC中断服务,但是还有类似的u8 t=3等赋值语句FSMC应该不能区分与以上赋值语句的区别吧?而结构体只是在stm32内存开辟一些存储空间,与sram完全没有关系啊。难道就是因为0X6C0007FE处于Block 1 Sector 4的地址范围STM32就认为这是sram的地址?
或者以上这么多疑问可用一个问题代替:对于一个赋值语句 t=0x0023怎么知道这是给stm内存单元赋值还是外存(如sram)赋值?
也不晓得问题问对没有
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
默认的一般都是在内部RAM
一周热门 更多>