野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8240|回复: 0

FSMC控制16位TFT液晶屏幕,想改成8位屏幕程序如何改

[复制链接]
发表于 2021-12-18 10:43:51 | 显示全部楼层 |阅读模式
10火花
从硬件角度
控制线不变(还是例程里的),数据线将原来的D0~D15改为D0~D7,去掉了D8~D15。
从程序角度:

1.去掉GPIO中D8~D15的初始化程序

2.FSMC结构体配置中选择8位宽度
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth       = FSMC_MemoryDataWidth_8b;

3.将数据/命令写入的的地址从原来的0x60020000改为0x60010000,0x60000000不变
#define      FSMC_Addr_ILI9341_CMD         ( ( uint32_t ) 0x60000000 )  //命令写入地址
#define      FSMC_Addr_ILI9341_DATA        ( ( uint32_t ) 0x60010000 ) //数据写入地址

4.将写命令、写数据、读数据函数更改为如下:
写命令:
__inline void ILI9341_Write_Cmd ( uint16_t usCmd )
{
        * ( __IO uint8_t * ) ( FSMC_Addr_ILI9341_CMD ) = usCmd;
       
}

写数据
__inline void ILI9341_Write_Data ( uint16_t usData )
{
        if(usData>0xFF)
        {
                * ( __IO uint8_t * ) ( FSMC_Addr_ILI9341_DATA ) = (usData>>8);
       
                * ( __IO uint8_t * ) ( FSMC_Addr_ILI9341_DATA ) = usData;
        }
        else
        {
                * ( __IO uint8_t * ) ( FSMC_Addr_ILI9341_DATA ) = usData;
        }
}

读数据:
__inline uint16_t ILI9341_Read_Data ( void )
{
        u16 a=0,b=0;
        a=* ( __IO uint8_t * ) ( FSMC_Addr_ILI9341_DATA );
        a=* ( __IO uint8_t * ) ( FSMC_Addr_ILI9341_DATA );
        b=* ( __IO uint8_t * ) ( FSMC_Addr_ILI9341_DATA );
        a=((a<<8)&b);
        return a;
}


目前,更改了以上几处,把程序下到开发板无法正常显示,请各路大神教一下,看看上面程序是写错了还是程序里还有地方没改对,谢谢 !!!!!!!!!!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-28 00:26 , Processed in 0.027273 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表