fsmc 16位改8位问题

2019-07-21 04:06发布

芯片的引脚不够用,就想把fsmc的数据总线改成8位,去掉了引脚复用然后设置成8位的,改了好久都没办法显示了.......(写16位改成了写2次8位应该对吧?屏是16位屏,能不能用8位驱动呢?)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
jimmjimm
2019-07-21 09:13
回复【2楼】正点原子:
---------------------------------
问题又来啦,发现屏幕可以调成8位的,调完后发现颜 {MOD}和bitmap位置不对,

我现在改了

地址从60020000改为60010000
#define Bank1_LCD_D    ((uint32_t)0x60010000) 


fsmc设置
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;

去掉了d8-15的引脚设置

写命令函数
__inline void Write_COM(u16 CMD)
{
*(__IO uint8_t *) (Bank1_LCD_C)= (u8)CMD;
}

写数据函数
__inline void Write_DATA(u16 shuju)
{
if(shuju>0xFF){
*(__IO uint8_t *) (Bank1_LCD_D)= (u8)(shuju>>8);
*(__IO uint8_t *) (Bank1_LCD_D)= (u8)shuju;
}else{
*(__IO uint8_t *) (Bank1_LCD_D)= (u8)shuju;
}
}

读数据函数
u16 LCD_RD_data(void)
{
u16 a=0,b=0;
a=*(__IO uint8_t *) (Bank1_LCD_D); //Dummy
a=*(__IO uint8_t *) (Bank1_LCD_D); //L
b=*(__IO uint8_t *) (Bank1_LCD_D); //L
a=((a<<8) &b);
return(a);
}


还有什么要改的地方么

一周热门 更多>