sram 介紹
1、SRAM控制原理
STM32控制器芯片內部有一定大小的SRAM及FLASH作為內存和程序存儲空間,但當程序較大,內存和程序空間不足時,就需要在STM32芯片的外部擴展存儲器了。 STM32F407ZE系列芯片可以擴展外部SRAM用作內存。
給STM32芯片擴展內存與給PC擴展內存的原理是一樣的,只是PC上一般以內存條的形式擴展, 而且內存條實質是由多個內存顆粒(即SDRAM芯片)組成的通用標準模塊,而STM32擴展時,直接直接與SRAM芯片連接
內存:8M bit static RAMs organized as 512K words by 16bits(1M)
有下圖 STM32F407 的程序存儲空間為1M ,開始地址為0x800_0000 size 0x10_0000,內存
2、功能板塊圖
?引腳說明
功能表
?SRAM存儲矩陣
????????SRAM內部包含的存儲陣列,可以把它理解成一張表格,數據就填在這張表 格上。和表格查找一樣,指定一個行地址和列地址,就可以精確地找到目標單元格, 這是SRAM芯片尋址的基本原理。這樣的每個單元格被稱為存儲單元,而這樣的表則 被稱為存儲矩陣
地址譯碼器把N根地址線轉換成2N根信號線,每根信號線對應一行或一列存儲單元,通過地址線找到具體的存儲單元,實現尋址。
本實例中的SRAM比較小,沒有列地址線,它的數據寬度為16位,即一個行地址對應2字節空間,框圖中左側的A0-A18是行址信號, 18根地址線一共可以表示218=28x1024=512K行存儲單元,所以它一共能訪問512Kx16bits大小的空間。訪問時,使用UB#或LB#線控制數據寬度,
SRAM的讀寫流程
讀時訊
?寫時訊
讀寫 時訊?
sram 讀寫流程
?讀寫時序的流程很類似,過程如下: (1) 主機使用地址信號線發出要訪問的存儲器目標地址; (2) 控制片選信號CS1#及CS2#使能存儲器芯片; (3) 若是要進行讀操作,則控制讀使能信號OE#表示要讀數據,若進行寫操作則控制寫使能信號WE#表示要寫數據; (4) 使用掩碼信號LB#與UB#指示要訪問目標地址的高、低字節部分; (5) 若是讀取過程,存儲器會通過數據線向主機輸出目標數據,若是寫入過程,主要使用數據線向存儲器傳輸目標數據
?FSMC簡介
????????TM32F4系列芯片使用FSMC外設來管理擴展的存儲器, FSMC是Flexible Static Memory Controller的縮寫,譯為靈活的靜態存儲控制器。它可以用于驅動包括SRAM、 NOR FLASH以及NAND FLSAH類型的存儲器,不能驅動如SDRAM這種動態的存儲器而在STM32F429系列的控制器中,它具有FMC外設,支持控制SDRAM存儲器
1、FSMC框圖剖析
2、 通訊引腳
由于控制不同類型存儲器的時候會有一些不同的引腳,看起來有非常多,其中地址線FSMC_A和數據線FSMC_D是所有控制器都共用的
其中比較特殊的FSMC_NE是用于控制SRAM芯片的控制信號線,STM32具有FSMC_NE1/2/3/4號引腳,不同的引腳對應STM32內部不同的地址 區域。 例如,當STM32訪問0x68000000-0x6BFFFFFF地址空間時,FSMC_NE3引腳會自動設置為低電平,由于它連接到SRAM的CE#引腳,所以SRAM的片選被使能,而訪問0x60000000-0x63FFFFFF地址時, FSMC_NE1會輸出低電平。當使用不同的FSMC_NE引腳連接外部存儲器時, STM32訪問SRAM的地址不一樣,從而達到控制多塊SRAM芯片的目的。
3、 存儲器控制器
上面不同類型的引腳是連接到FSMC內部對應的存儲控制器中的。NOR/PSRAM/SRAM設備使用相同的控制器, NAND/PC卡設備使用相同的控制器,不同的控制器有專用的寄存器用于配置其工作模式。控制SRAM的有FSMC_BCR1/2/3/4控制寄存器、FSMC_BTR1/2/3/4片選時序寄存器以及FSMC_BWTR1/2/3/4寫時序寄存器。每種寄存器都有4個,分別對應于4個不同的存儲區域(比如板塊1 有4個區域 (4*64MB)),各種寄存器介紹如下: ????????? FSMC_BCR控制寄存器可配置要控制的存儲器類型、數據線寬度以及信號 有效極性能參數。 ????????? FMC_BTR時序寄存器用于配置SRAM訪問時的各種時間延遲,如數據保 持時間、地址保持時間等。 ????????? FMC_BWTR寫時序寄存器與FMC_BTR寄存器控制的參數類似,它專門用 于控制寫時序的時間參數。
4、時鐘控制邏輯 ?
FSMC外設掛載在AHB總線上,時鐘信號來自于HCLK(默認168MHz)(sram異步時鐘沒有分頻,分頻無效 ),控制器的同步時鐘輸出就是由它分頻得到。例如, NOR控制器的FSMC_CLK引腳輸出的時鐘,它可用于與同步類型的SRAM芯片進行同步通訊,它的時鐘頻率可通過FSMC_BTR寄存器的CLKDIV位配置,可以配置為HCLK的1/2或1/3,也就是說,若它與同步類型的SRAM通訊時,同步時鐘最高頻率為84MHz。本示例中的SRAM為異步類型的存儲器,不使用同步時鐘信號,所以時鐘分頻配置不起作用。‘
5、FSMC的地址映射 ?
????????FSMC連接好外部的存儲器并初始化后,就可以直接通過訪問地址來讀寫數據。FSMC訪問存儲器的方式與I2C EEPROM、 SPI FLASH的不一樣,后兩種方式都需要控制I2C或SPI總線給存儲器發送地址,然后獲取數據;在程序里,這個地址和數據都需要分開使用不同的變量存儲,并且訪問時還需要使用代碼控制發送讀寫命令。而使用FSMC外接存儲器時,其存儲單元是映射到STM32的內部尋址空間的;在程序里,定義一個指向這些地址的指針,然后就可以通過指針直接修改該存儲單元的內容, FSMC外設會自動完成數據訪問過程,讀寫命令之類的操作不需要程序控制
FSMC的地址映射
?
圖中左側的是Cortex-M4內核的存儲空間分配,右側是STM32FSMC外設的地址映射。可以看到FSMC的NOR/PSRAM/SRAM/NANDFLASH以及PC卡的地址都在External RAM地址空間內。正是因為存在這樣的地址映射,使得訪問FSMC控制的存儲器時,就跟訪問STM32的片上外設寄存器一樣(片上外設的地址映射即圖中左側的“Peripheral”區域)。FSMC把整個External RAM存儲區域分成了4個Bank區域,并分配了地址范圍及適用的存儲器類型,如NOR及SRAM存儲器只能使用Bank1的地址。 在NOR及SRAM區域, 每個Bank的內部又分成了4個小塊,每個小塊有相應的控制引腳用于連接片選信號,如FSMC_NE[4:1]信號線可用于選擇BANK1內部的4小塊地址區域,當STM32訪問0x68000000-0x6BFFFFFF地址空間時,會訪問到Bank1的第3小塊區域,相應的FSMC_NE3信號線會輸出控制信號
?FSMC控制SRAM的時序
FSMC外設支持輸出多種不同的時序以便于控制不同的存儲器,它具有ABCD四種模式,下面我們僅針對控制SRAM使用的模式A進行講解
?當內核發出訪問某個指向外部存儲器地址時, FSMC外設會根據配置控制信號線產生時序訪問存儲器,上圖中的是訪問外部SRAM時FSMC外設的讀寫時序。 以讀時序為例,該圖表示一個存儲器操作周期由地址建立周期 (ADDSET)、數據建立周期(DATAST)。在地址建立周 期中,地址線發出要訪問的地址,數據掩碼信號線指示出要讀取地址的高、 低字節部分,片選信號使能存儲器芯片;地址建立周期結束后讀使能信號線 發出讀使能信號,接著存儲器通過數據信號線把目標數據傳輸給FSMC, FSMC把它交給內核。 寫時序類似,區別是它的一個存儲器操作周期僅由地址建立周期 (ADDSET)和數據建立周期(DATAST)+1組成,且在數據建立周期期間寫使能信 號線發出寫信號,接著FSMC把數據通過數據線傳輸到存儲器中
寫程序步驟 ?=============================================================================== ? ? ? ? ? ? ? ? ? ? ##### NOR and SRAM Controller functions ##### ?=============================================================================== ?
?[..] The following sequence should be followed to configure the FSMC to interface ? ? ? with SRAM, PSRAM, NOR or OneNAND memory connected to the NOR/SRAM Bank: ? ? ?(#) Enable the clock for the FSMC and associated GPIOs using the following functions: ? ? ? ? ? RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); ? ? ? ? ? RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);
? ?(#) FSMC pins configuration? ? ? ? ?(++) Connect the involved FSMC pins to AF12 using the following function? ? ? ? ? ? ? GPIO_PinAFConfig(GPIOx, GPIO_PinSourcex, GPIO_AF_FSMC);? ? ? ? ?(++) Configure these FSMC pins in alternate function mode by calling the function ? ? ? ? ? ? GPIO_Init(); ? ? ? ?(#) Declare a FSMC_NORSRAMInitTypeDef structure, for example: ? ? ? ? ? FSMC_NORSRAMInitTypeDef ?FSMC_NORSRAMInitStructure; ? ? ? and fill the FSMC_NORSRAMInitStructure variable with the allowed values of ? ? ? the structure member. ? ? ?? ? ?(#) Initialize the NOR/SRAM Controller by calling the function ? ? ? ? ? FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);?
? ?(#) Then enable the NOR/SRAM Bank, for example: ? ? ? ? ? FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE); ?
? ?(#) At this stage you can read/write from/to the memory connected to the NOR/SRAM Bank.?
(1)(使能時鐘)
(2)初始化GPIO引腳和復用配置
(3)初始化寄存器通過結構定義FSMC_NORSRAMInitTypeDef? 用函數FSMC_NORSRAMInitTypeDef
(4)使能SRAm:FSMC_NORSRAMCmd
代碼塊
/*初始化SRAM相關的GPIO*/ ?? ?SRAM_GPIO_Config();
GPIO_InitTypeDef GPIO_InitStructure;/* 使能SRAM相關的GPIO時鐘 *//*地址信號線*/RCC_AHB1PeriphClockCmd(FSMC_A0_GPIO_CLK | FSMC_A1_GPIO_CLK | FSMC_A2_GPIO_CLK | FSMC_A3_GPIO_CLK | FSMC_A4_GPIO_CLK | FSMC_A5_GPIO_CLK |FSMC_A6_GPIO_CLK | FSMC_A7_GPIO_CLK | FSMC_A8_GPIO_CLK |FSMC_A9_GPIO_CLK | FSMC_A10_GPIO_CLK| FSMC_A11_GPIO_CLK| FSMC_A12_GPIO_CLK| FSMC_A13_GPIO_CLK|FSMC_A14_GPIO_CLK|FSMC_A15_GPIO_CLK|FSMC_A16_GPIO_CLK|FSMC_A17_GPIO_CLK|FSMC_A18_GPIO_CLK|/*數據信號線*/FSMC_D0_GPIO_CLK | FSMC_D1_GPIO_CLK | FSMC_D2_GPIO_CLK | FSMC_D3_GPIO_CLK | FSMC_D4_GPIO_CLK | FSMC_D5_GPIO_CLK |FSMC_D6_GPIO_CLK | FSMC_D7_GPIO_CLK | FSMC_D8_GPIO_CLK |FSMC_D9_GPIO_CLK | FSMC_D10_GPIO_CLK| FSMC_D11_GPIO_CLK|FSMC_D12_GPIO_CLK| FSMC_D13_GPIO_CLK| FSMC_D14_GPIO_CLK|FSMC_D15_GPIO_CLK| /*控制信號線*/FSMC_CS_GPIO_CLK | FSMC_WE_GPIO_CLK | FSMC_OE_GPIO_CLK |FSMC_UDQM_GPIO_CLK|FSMC_LDQM_GPIO_CLK, ENABLE);/*-- GPIO 配置 -----------------------------------------------------*//* 通用 GPIO 配置 */GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;/*A地址信號線 針對引腳配置*/GPIO_InitStructure.GPIO_Pin = FSMC_A0_GPIO_PIN; GPIO_Init(FSMC_A0_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A0_GPIO_PORT,FSMC_A0_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A1_GPIO_PIN; GPIO_Init(FSMC_A1_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A1_GPIO_PORT,FSMC_A1_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A2_GPIO_PIN; GPIO_Init(FSMC_A2_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A2_GPIO_PORT,FSMC_A2_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A3_GPIO_PIN; GPIO_Init(FSMC_A3_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A3_GPIO_PORT,FSMC_A3_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A4_GPIO_PIN; GPIO_Init(FSMC_A4_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A4_GPIO_PORT,FSMC_A4_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A5_GPIO_PIN; GPIO_Init(FSMC_A5_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A5_GPIO_PORT,FSMC_A5_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A6_GPIO_PIN; GPIO_Init(FSMC_A6_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A6_GPIO_PORT,FSMC_A6_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A7_GPIO_PIN; GPIO_Init(FSMC_A7_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A7_GPIO_PORT,FSMC_A7_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A8_GPIO_PIN; GPIO_Init(FSMC_A8_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A8_GPIO_PORT,FSMC_A8_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A9_GPIO_PIN; GPIO_Init(FSMC_A9_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A9_GPIO_PORT,FSMC_A9_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A10_GPIO_PIN; GPIO_Init(FSMC_A10_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A10_GPIO_PORT,FSMC_A10_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A11_GPIO_PIN; GPIO_Init(FSMC_A11_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A11_GPIO_PORT,FSMC_A11_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A12_GPIO_PIN; GPIO_Init(FSMC_A12_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A12_GPIO_PORT,FSMC_A12_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A13_GPIO_PIN; GPIO_Init(FSMC_A13_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A13_GPIO_PORT,FSMC_A13_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A14_GPIO_PIN; GPIO_Init(FSMC_A14_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A14_GPIO_PORT,FSMC_A14_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A15_GPIO_PIN; GPIO_Init(FSMC_A15_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A15_GPIO_PORT,FSMC_A15_GPIO_PinSource,FSMC_GPIO_AF); GPIO_InitStructure.GPIO_Pin = FSMC_A16_GPIO_PIN; GPIO_Init(FSMC_A16_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A16_GPIO_PORT,FSMC_A16_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A17_GPIO_PIN; GPIO_Init(FSMC_A17_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A17_GPIO_PORT,FSMC_A17_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_A18_GPIO_PIN; GPIO_Init(FSMC_A18_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_A18_GPIO_PORT,FSMC_A18_GPIO_PinSource,FSMC_GPIO_AF);/*DQ數據信號線 針對引腳配置*/GPIO_InitStructure.GPIO_Pin = FSMC_D0_GPIO_PIN; GPIO_Init(FSMC_D0_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D0_GPIO_PORT,FSMC_D0_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D1_GPIO_PIN; GPIO_Init(FSMC_D1_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D1_GPIO_PORT,FSMC_D1_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D2_GPIO_PIN; GPIO_Init(FSMC_D2_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D2_GPIO_PORT,FSMC_D2_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D3_GPIO_PIN; GPIO_Init(FSMC_D3_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D3_GPIO_PORT,FSMC_D3_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D4_GPIO_PIN; GPIO_Init(FSMC_D4_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D4_GPIO_PORT,FSMC_D4_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D5_GPIO_PIN; GPIO_Init(FSMC_D5_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D5_GPIO_PORT,FSMC_D5_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D6_GPIO_PIN; GPIO_Init(FSMC_D6_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D6_GPIO_PORT,FSMC_D6_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D7_GPIO_PIN; GPIO_Init(FSMC_D7_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D7_GPIO_PORT,FSMC_D7_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D8_GPIO_PIN; GPIO_Init(FSMC_D8_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D8_GPIO_PORT,FSMC_D8_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D9_GPIO_PIN; GPIO_Init(FSMC_D9_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D9_GPIO_PORT,FSMC_D9_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D10_GPIO_PIN; GPIO_Init(FSMC_D10_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D10_GPIO_PORT,FSMC_D10_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D11_GPIO_PIN; GPIO_Init(FSMC_D11_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D11_GPIO_PORT,FSMC_D11_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D12_GPIO_PIN; GPIO_Init(FSMC_D12_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D12_GPIO_PORT,FSMC_D12_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D13_GPIO_PIN; GPIO_Init(FSMC_D13_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D13_GPIO_PORT,FSMC_D13_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D14_GPIO_PIN; GPIO_Init(FSMC_D14_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D14_GPIO_PORT,FSMC_D14_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_D15_GPIO_PIN; GPIO_Init(FSMC_D15_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_D15_GPIO_PORT,FSMC_D15_GPIO_PinSource,FSMC_GPIO_AF);/*控制信號線*/GPIO_InitStructure.GPIO_Pin = FSMC_CS_GPIO_PIN; GPIO_Init(FSMC_CS_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_CS_GPIO_PORT,FSMC_CS_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_WE_GPIO_PIN; GPIO_Init(FSMC_WE_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_WE_GPIO_PORT,FSMC_WE_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_OE_GPIO_PIN; GPIO_Init(FSMC_OE_GPIO_PORT, &GPIO_InitStructure); GPIO_PinAFConfig(FSMC_OE_GPIO_PORT,FSMC_OE_GPIO_PinSource,FSMC_GPIO_AF); GPIO_InitStructure.GPIO_Pin = FSMC_UDQM_GPIO_PIN; GPIO_Init(FSMC_UDQM_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_UDQM_GPIO_PORT,FSMC_UDQM_GPIO_PinSource,FSMC_GPIO_AF);GPIO_InitStructure.GPIO_Pin = FSMC_LDQM_GPIO_PIN; GPIO_Init(FSMC_LDQM_GPIO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(FSMC_LDQM_GPIO_PORT,FSMC_LDQM_GPIO_PinSource,FSMC_GPIO_AF);
}
測試
通過向訪問地址進行測試(8‘16、32位’)
e.g
?*( uint8_t*) (Bank1_SRAM4_ADDR ) = (uint8_t)0xAA; ?? ? printf("\r\n指針訪問SRAM,寫入數據0xAA \r\n");
?? ? /*從SRAM讀取數據*/ ?? ? temp = ?*( uint8_t*) (Bank1_SRAM4_ADDR ); ?? ? printf("讀取數據:0x%X \r\n",temp);
總結
以上是生活随笔 為你收集整理的F407 sram 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。