fsmc 16位改8位问题

2019-07-21 04:06发布

芯片的引脚不够用,就想把fsmc的数据总线改成8位,去掉了引脚复用然后设置成8位的,改了好久都没办法显示了.......(写16位改成了写2次8位应该对吧?屏是16位屏,能不能用8位驱动呢?)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
jimmjimm
1楼-- · 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);
}


还有什么要改的地方么
jimmjimm
2楼-- · 2019-07-21 12:28
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-21 14:43
16位屏,必须接16位数据线。。。
jimmjimm
4楼-- · 2019-07-21 17:47
回复【2楼】正点原子:
---------------------------------
那个......请问是什么原因呢..........真的不是很懂.....

然后原子兄的开发板什么时候出来啊,现在公司计划买一块f4的开发板,如果原子你的出来块的话就选你啦(时间比较急,9月开始突然给我了一揽子开发计划要在年底做完)
正点原子
5楼-- · 2019-07-21 23:45
 精彩回答 2  元偷偷看……
jimmjimm
6楼-- · 2019-07-22 02:03
回复【5楼】正点原子:
---------------------------------
行,我再试试,感觉快弄好了,改成8位后虽然显示速度变慢了(发一次数据变成两次),不过肉眼应该察觉不出来,还能空出8个引脚出来

一周热门 更多>