<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32的FSMC靈活靜態(tài)存儲器控制器

STM32的FSMC靈活靜態(tài)存儲器控制器

作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò ) 收藏
  FSMC(Flexihie Static Memory Controller)模塊只適用于大容量產(chǎn)品。

  FSMC模塊能夠與同步或異步存儲器和16位PC存儲器卡接口,主要將AHB傳輸信號轉換到適當的外部設備協(xié)議,滿(mǎn)足訪(fǎng)問(wèn)外部設備的時(shí)序要求。

本文引用地址:http://dyxdggzs.com/article/201611/316147.htm

  存儲器接口包括:

 ?、佟RAM靜態(tài)隨機存儲器

 ?、凇OM只讀存儲器

 ?、邸OR閃存

 ?、堋SRAM(4個(gè)存儲塊)

 ?、荨蓚€(gè)NAND閃存塊

 ?、蕖?6位PC卡

  STM32之所以能夠支持NOR FLASH和NAND FLASH兩類(lèi)訪(fǎng)問(wèn)方式完全不同的存儲器擴展,是因為FSMC內部實(shí)際包括NOR FLASH和NAND / PC Card兩個(gè)控制器,分別支持兩種截然不同的存儲器訪(fǎng)問(wèn)方式。在STM32內部,FSMC的一端通過(guò)內部高速總線(xiàn)AHB連接到內核Cortex-M3,另一端則是面向擴展器的外部總線(xiàn)。內核對外部存儲器訪(fǎng)問(wèn)信號發(fā)送到AHB總線(xiàn)后,經(jīng)FSMC轉換為符合外部存儲器通信規約的信號,送到外部存儲器相應的引腳,實(shí)現數據交互。FSMC起著(zhù)橋梁作用,既能進(jìn)行信號類(lèi)型的轉換,又能進(jìn)行信號寬度和時(shí)序的調整,屏蔽掉不同存儲類(lèi)型的差異,使之對內核而言沒(méi)有區別。

  FSMC模塊框圖如下:

       
  存儲塊外設地址映射(具體說(shuō)明請看數據手冊,此處只用圖表形式簡(jiǎn)單表示):
     
           
  下表為NOR/PSRAM存儲塊選擇:  
           
  三個(gè)存儲塊可用于NAND或PC:
        
  對于NAND閃存,空間可在低256K字節部分劃分為三個(gè)區:
        
  時(shí)序參數:
  FSMC通過(guò)使用可編程的存儲器時(shí)序參數寄存器,拓展了可選用的外部存儲器的速度范圍。FSMC的NOR FLASH控制器支持同步和異步突發(fā)兩種訪(fǎng)問(wèn)方式。
  選用同步突發(fā)訪(fǎng)問(wèn)方式時(shí),FSMC將系統時(shí)鐘HCLK分頻后,發(fā)送給外部存儲器作為同步時(shí)鐘信號FSMC_CLK。此時(shí)需要設置的時(shí)間參數有兩個(gè):CLK的分頻系數和訪(fǎng)問(wèn)中獲得第1個(gè)數據所需要的等待延遲(DATLAT)。
  選用異步突發(fā)訪(fǎng)問(wèn)方式時(shí),FSMC主要設置3個(gè)時(shí)間參數:地址建立時(shí)間(ADDSET),數據建立時(shí)間(DATAST)和地址保持時(shí)間(ADDHLD)。
  異步NOR FLASH時(shí)序模式2時(shí)間參數計算公式如下:
         
  式中Twc和Trc為所選存儲器芯片的寫(xiě)周期長(cháng)度和讀操作周期長(cháng)度;Twp為所選存儲器芯片的寫(xiě)信號持續長(cháng)度。
  為達到更好的控制效果,還應考慮FSMC自身延遲問(wèn)題,使用校正公式:
         
  式中TAVQV為所選存儲器芯片訪(fǎng)問(wèn)過(guò)程中,從地址有效至數據有效的時(shí)間域;Tsu(Data_NE)為STM32特征參數,從數據有效到FSMC_NE失效時(shí)間域,Ttv(A_NE)為STM32特征參數,從FSMC_NE有效至地址有效的時(shí)間域。
  關(guān)于FSMC的其它配置這里就不多說(shuō)了,下面以TFT屏(ILI9325)的驅動(dòng)舉個(gè)例子。
  TFT_RS —— PE2/A23
  TFT_WR —— PD5/NWE
  TFT_RD —— PD4/NOE
  數據線(xiàn)連接FSMC的數據接口,TFT屏背光使用PWM控制。
  例程如下:

#define TFT_Command ((uint32_t)0x60000000)
#define TFT_Data    ((uint32_t)0x61000000)   // FSMC_A23(16位) 注意16位與8位的地址計算方式不一樣
                          // 8位地址 ——0x60800000
                          // 16位地址——0x61000000
/*-------------------------------------------------------------------------------*/
void TFT_IO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5
            | GPIO_Pin_14 | GPIO_Pin_15// | GPIO_Pin_7
            | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
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_Pin_2;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
/*-------------------------------------------------------------------------------*/
void TFT_FSMC_Configuration(void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC , ENABLE);

TFT_IO_Configuration();

p.FSMC_AddressSetupTime = 1;
p.FSMC_AddressHoldTime = 0;
p.FSMC_DataSetupTime = 2;
p.FSMC_BusTurnAroundDuration = 0;
p.FSMC_CLKDivision = 0;
p.FSMC_DataLatency = 0;
p.FSMC_AccessMode = FSMC_AccessMode_B;

FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;   //擴展NORBANK的第1個(gè)子BANK
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;  //不使用總線(xiàn)復用
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;   //擴展類(lèi)型為SRAM
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;  // 16位總線(xiàn)寬度
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;  //讀寫(xiě)統一時(shí)間參數
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;   //指向定義的BTR結構
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}

/*---------------------------------------*/
void TFT_Write_com(u16 dat) //發(fā)送命令
{
  *(__IO uint16_t *) (TFT_Command)= dat;
}
/*---------------------------------------*/
void TFT_Write_dat(u16 dat)// 發(fā)送數據
{
  *(__IO uint16_t *) (TFT_Data)= dat;
}

/*---------------------------------------*/
u16 TFT_Read_dat(void)// 讀數據
{
  return *(__IO uint16_t *) (TFT_Data);
}
/*---------------------------------------*/
u16 TFT_ReadReg(u16 reg)
{
  *(__IO uint16_t *) (TFT_Command)= reg;
  return *(__IO uint16_t *) (TFT_Data);
}


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>