OpenEdv-开源电子网

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

求助,FSMC如何挂载SRAM和LCD

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-10-29
在线时间
0 小时
发表于 2013-10-29 10:16:39 | 显示全部楼层 |阅读模式
芯片:stm32f103zc

目标,sram就是想当内存使用,让内部内存作为栈,或者更优配置

求步奏或者教程历程

部分源码,

#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
  #ifdef DATA_IN_ExtSRAM
    SystemInit_ExtMemCtl(); 




本函数为默认例程,我对比了一下我的板子, 是使用  NE3,SRAM  0x68000000

void SystemInit_ExtMemCtl(void) 
{
  RCC->AHBENR = 0x00000114;
  RCC->APB2ENR = 0x000001E0;
  GPIOD->CRL = 0x44BB44BB;  //PD7(NE1)(RESEVERD)
  GPIOD->CRH = 0xBBBBBBBB;  //PD8-PD15  OUTPUT
  GPIOE->CRL = 0xB44444BB;  
  GPIOE->CRH = 0xBBBBBBBB;
  GPIOF->CRL = 0x44BBBBBB;  
  GPIOF->CRH = 0xBBBB4444;
  GPIOG->CRL = 0x44BBBBBB;  
  GPIOG->CRH = 0x44444B44;
  FSMC_Bank1->BTCR[4] = 0x00001011;
  FSMC_Bank1->BTCR[5] = 0x00000200;
}


以下为LCD FSMC配置看,请问下海缺少了什么, 外部SRAM


void LCD_FSMCInit()//LCD FSMC 初始化
{
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef  FSMC_NORSRAMTimingInitStructure;
/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 1 ----------------------------------------*/
/* FSMC_Bank1_NORSRAM4 configuration */
#ifdef TFT_61059 
FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 1;
FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 2;
#endif
#ifdef TFT_HX8352  
  FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 2;
FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 1;
FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 3;
#endif
FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_B;
/* Color LCD configuration ------------------------------------
LCD configured as follow:
   - Data/Address MUX = Disable
   - Memory Type = SRAM
   - Data Width = 16bit
   - Write Operation = Enable
   - Extended Mode = Enable
   - Asynchronous Wait = Disable */


FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
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);
/* - BANK 1 (of NOR/SRAM Bank 0~3) is enabled */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
码农
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-10-29
在线时间
0 小时
 楼主| 发表于 2013-10-29 10:23:24 | 显示全部楼层
在线急等,发现这样的配置搞到我板子里,LCD不亮了
码农
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-10-29 11:29:38 | 显示全部楼层
回复【2楼】studyembred:
---------------------------------
初看代码没什么问题,你的是战舰板子?串口有打印出TFT驱动器的型号么?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-10-29
在线时间
0 小时
 楼主| 发表于 2013-10-29 11:36:53 | 显示全部楼层
不是啊,不是板子,一个产品要加SRAM,另外 本身就挂载了LCD
码农
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-29 12:20:04 | 显示全部楼层
回复【4楼】studyembred:
---------------------------------
请参考下我们战舰板的:外部SRAM例程
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-10-29
在线时间
0 小时
 楼主| 发表于 2013-10-29 13:15:17 | 显示全部楼层
你好,请问下是这个么,







//初始化外部SRAM
void FSMC_SRAM_Init(void)
{    
RCC->AHBENR|=1<<8;       //使能FSMC时钟  
RCC->APB2ENR|=1<<5;      //使能PORTD时钟
RCC->APB2ENR|=1<<6;      //使能PORTE时钟
  RCC->APB2ENR|=1<<7;      //使能PORTF时钟
RCC->APB2ENR|=1<<8;      //使能PORTG时钟   

//PORTD复用推挽输出
GPIOD->CRH&=0X00000000;
GPIOD->CRH|=0XBBBBBBBB; 
GPIOD->CRL&=0XFF00FF00;
GPIOD->CRL|=0X00BB00BB;    
//PORTE复用推挽输出
GPIOE->CRH&=0X00000000;
GPIOE->CRH|=0XBBBBBBBB; 
GPIOE->CRL&=0X0FFFFF00;
GPIOE->CRL|=0XB00000BB; 
//PORTF复用推挽输出
GPIOF->CRH&=0X0000FFFF;
GPIOF->CRH|=0XBBBB0000;        
GPIOF->CRL&=0XFF000000;
GPIOF->CRL|=0X00BBBBBB; 

//PORTG复用推挽输出 PG10->NE3      
GPIOG->CRH&=0XFFFFF0FF;
GPIOG->CRH|=0X00000B00;  
  GPIOG->CRL&=0XFF000000;
GPIOG->CRL|=0X00BBBBBB;    
  
//寄存器清零
//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
//这里我们使用NE3 ,也就对应BTCR[4],[5]。    
FSMC_Bank1->BTCR[4]=0X00000000;
FSMC_Bank1->BTCR[5]=0X00000000;
FSMC_Bank1E->BWTR[4]=0X00000000;
//操作BCR寄存器 使用异步模式,模式A(读写共用一个时序寄存器)
//BTCR[偶数]:BCR寄存器;BTCR[奇数]:BTR寄存器
FSMC_Bank1->BTCR[4]|=1<<12;//存储器写使能
FSMC_Bank1->BTCR[4]|=1<<4; //存储器数据宽度为16bit    
//操作BTR寄存器    
FSMC_Bank1->BTCR[5]|=3<<8; //数据保持时间(DATAST)为3个HCLK 4/72M=55ns(对EM的SRAM芯片)  
FSMC_Bank1->BTCR[5]|=0<<4; //地址保持时间(ADDHLD)未用到    
FSMC_Bank1->BTCR[5]|=0<<0; //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns  
//闪存写时序寄存器  
FSMC_Bank1E->BWTR[4]=0x0FFFFFFF;//默认值
//使能BANK1区域3
FSMC_Bank1->BTCR[4]|=1<<0;
}   


int main(void)
{
u8 key;  
  u8 i=0;     
u32 ts=0;
  Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600); //串口初始化为9600
delay_init(72);   //延时初始化 
LED_Init();   //初始化与LED连接的硬件接口
LCD_Init();   //初始化LCD
usmart_dev.init(72); //初始化USMART
  KEY_Init(); //按键初始化  
  FSMC_SRAM_Init(); //初始化外部SRAM  

        //  do somethings      ..............................
}




我的意思是,在进入main.c之前就设置好了FSMC,程序能自动运行外部ram





码农
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-10-29
在线时间
0 小时
 楼主| 发表于 2013-10-29 13:28:48 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
你好,还在么,能看下我5楼的补充么
码农
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-10-29
在线时间
0 小时
 楼主| 发表于 2013-10-29 15:43:13 | 显示全部楼层
最新进展情况

貌似外部存储加上了,

但两者相互影响

如下图





码农
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-30 00:34:06 | 显示全部楼层
回复【6楼】studyembred:
---------------------------------
这样我不知道会不会冲突哇,你把外部SRAM,用编译器自动分配么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-10 00:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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