OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3823|回复: 3

FSMC挂起TFT 问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-8-12
在线时间
0 小时
发表于 2014-12-22 11:18:53 | 显示全部楼层 |阅读模式
5金钱
求救:我自己弄的FSMC挂起TFT的时候,配置有没有错 我用的单片机是 STM32F103VET6 只有100个引脚的
void LCD_GPIO_Config( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_FSMC, ENABLE );//使能FSMC时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE );//使能FSMC对应相应管脚时钟

/* FSMC数据线PD:0 1 8 9 10 14 15 PE:7 8 9 10 11 12 13 14 15*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init( GPIOD, &GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init( GPIOE, &GPIO_InitStructure );
/*
FSMC_NOE : PD4 : LCD_RD
FSMC_NWE : PD5 : LCD_WR
FSMC_NE1 : PD7 : LCD_CS
FSMC_A23 : PE2 : LCD_RS
*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_7;
GPIO_Init( GPIOD, &GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init( GPIOE, &GPIO_InitStructure );
/*
LCD背光 : PD3
LCD复位 : PE0
*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//通用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//LCD背光
GPIO_Init( GPIOD, &GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//LCD复位
GPIO_Init( GPIOE, &GPIO_InitStructure );
/* 开背光 */
GPIO_ResetBits( GPIOD , GPIO_Pin_3 ) ;
}
/*
初始化FSMC外设
*/
void LCD_FSMC_Config( void )
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure;
FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 0x01;//(0-0xF) 地址建立时间
FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0x08;//(0-0xF) 地址保持时间
FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 0x02;//(0-0xFF) 数据建立时间
FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0x08;//(0-0xF) 总线恢复时间
FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0x00;//(0-0xF) 时钟分频
FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0x02;//数据保持时间
FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_B;

FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;//地址数据不复用
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;//数据类型NOR FLASH
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//数据宽度16位
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;//禁止突出模式,使用异步写
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;//只在突发模式有效,等待信号极性为低
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;//禁止非对齐突发模式
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;//只在突发模式有效,NWAIT信号在什么时期产生
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;//写使能
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;//只在突发模式有效,禁用NWAIT信号
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;//禁止扩展模式,
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;//禁止突发写
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;//配置读写时序
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;//配置写时序
FSMC_NORSRAMInit( &FSMC_NORSRAMInitStructure );
/* 使能 FSMC Bank1_SRAM Bank */
FSMC_NORSRAMCmd( FSMC_Bank1_NORSRAM2, ENABLE );
}


#define Bank1_LCD_C ((u32)0x60000000) //命令基地址
#define Bank1_LCD_D ((u32)0x61000000) //数据基地址(A23 PE2)
#define LCD_WR_CMD(index) ((*(__IO u16 *)(Bank1_LCD_C)) = ((u16)index))//选定LCD指定寄存器
#define LCD_WR_Parameter(val) ((*(__IO u16 *)(Bank1_LCD_D)) = ((u16)(val)))//往LCD GRAM写入数据
#define LCD_WR_REG( index ) LCD_WR_CMD( index )
#define LCD_WR_Data( val ) LCD_WR_Parameter( val )

我所使用的块1(NOR)中的第一块 ,TFT的读写控制端用NE1 所以其寄存器基地址是 : 0X60000000 , RAM基地址 : 0X6100 0000 = 0X6000 0000+2^23*2 = 0X6000 0000 + 0X100 0000 = 0X6100 0000
然后在写寄存器的时候,初始化TFT感觉上没有错,因为我以前我用 I/O 模拟8080接口的时候我做过,我所用的TFT驱动是 HX8352A ,以前我弄成功过,现在想用FSMC驱动快一点,请问一下我这里设置FSMC有没有错?
谢谢啦

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-22 19:38:10 | 显示全部楼层
下载试试能不能用就知道了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-8-12
在线时间
0 小时
 楼主| 发表于 2014-12-23 11:09:00 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不能用,我试过了,我感觉没有错
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-23 23:26:48 | 显示全部楼层
回复【3楼】guiman98:
---------------------------------
那就得慢慢调试了,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 14:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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