<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32 FSMC學(xué)習(xí)筆記

          STM32 FSMC學(xué)習(xí)筆記

          作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
          FSMC全稱“靈活靜態(tài)存儲器控制器”。
          FSMC 包括4個模塊:

          (1)AHB接口(包括FSMC配置寄存器)
          (2)NOR閃存和PSRAM控制器(驅(qū)動LCD的時候LCD就好像一個PSRAM的里面只有2個16位的存儲空間,一個是DATA RAM 一個是CMD RAM)
          (3)NAND閃存和PC卡控制器
          (4)外部設(shè)備接口
          每個模塊通過片選信號控制
          --------------------------------------------------------------------------------------------------
          硬件電路(這里給出的是非復(fù)用連接)

          可以這樣接
          地址線A0 接 RS
          NE接 CS
          NEW –WR
          NOE –RD

          FSMC與外設(shè)連接好以后,就等于對于使用者屏蔽了對外設(shè)備的具體操作,只要對應(yīng)類型的映射地址空間寫入數(shù)據(jù),這些數(shù)據(jù)+地址就會被自動翻譯,并寫入外圍存儲設(shè)備。
          對于寫LCD來說,STM官方庫里有一些常用寫法:
          #define LCD_BASE((u32)(0x60000000 | 0x0C000000))//我解釋一下,地址是BANK1 的 第四塊
          #define LCD((LCD_TypeDef *) LCD_BASE)

          void LCD_WriteReg(u8 LCD_Reg,u16 LCD_RegValue)
          {

          LCD->LCD_REG = LCD_Reg;

          LCD->LCD_RAM = LCD_RegValue;
          }


          u16 LCD_ReadReg(u8 LCD_Reg)
          {

          LCD->LCD_REG = LCD_Reg;

          return (LCD->LCD_RAM);
          }
          當(dāng)然也可以自己操作,完全在于自己。
          --------------------------------------------------------------------------------------------------
          初始化問題:
          1位寬:
          主要是AHB到NOR/PSRAM位寬的,比如如果AHB設(shè)為32位,NOR為16位,他會分兩次傳輸

          2:設(shè)置地址
          手冊是這樣寫的:在NOR/PSRAM模式下HADDR[27:26](HADDR are internal AHB address lines that are translated to external memory)用來片選NOR/PSRAM的四個分區(qū)。A[25:0]是地址線,因?yàn)镠ADDR是字節(jié)地址但是存取其按字編址,所以根據(jù)位寬的不同由以下情況。
          (1)當(dāng)存儲數(shù)據(jù)設(shè)為8位時,地址各位對應(yīng)FSMC_A[25:0],數(shù)據(jù)位對應(yīng)FSMC_D[7:0](存儲大小64MB * 8 = 512MB)
          (2)當(dāng)存儲數(shù)據(jù)設(shè)為16位時,地址各位對應(yīng)FSMC_A[25:1]>>1(即FSMC_A[24:0]),數(shù)據(jù)位對應(yīng)FSMC_D[15:0]
          (存儲大小 (64MB / 2) * 16 = 512MB)
          注意:在16位外部存儲寬度下,F(xiàn)SMC內(nèi)部會用A[25:1]去生成A[24:0]。不論8位或16位的情況,F(xiàn)SMC_A[0]必需連接外部存儲的A[0]。
          --------------------------------------------------------------------------------------------------
          --------------------------------------------------------------------------------------------------
          FSMC的好處就是你一旦設(shè)置好之后,WR、RD、DB0-DB15這些控制線和數(shù)據(jù)線,都是FSMC自動控制的。打個比方,當(dāng)你在程序中寫到:
          (volatile unsigned short int*)(0x60000000)=val;
          那么FSMC就會自動執(zhí)行一個寫的操作,其對應(yīng)的主控芯片的WE、RD這些腳,就會呈現(xiàn)出寫的時序出來(即WE=0,RD=1),數(shù)據(jù)val的值也會通過 DB0-15自動呈現(xiàn)出來(即FSMC-D0:FSMC-D15=val)。地址0x60000000會被呈現(xiàn)在數(shù)據(jù)線上(即A0-A25=0,地址線的對應(yīng)最麻煩,要根據(jù)具體情況來,好好看看FSMC手冊)。
          連接好之后,讀寫時序都會被FSMC自動完成。但是還有一個很關(guān)鍵的問題,就是RS沒有接,CS沒有接。因?yàn)樵贔SMC里面,根本就沒有對應(yīng)RS和CS的腳。怎么辦呢?這個時候,有一個好方法,就是用某一根地址線來接RS。比如我們選擇了A16這根地址線來接,那么當(dāng)我們要寫寄存器的時候,我們需要RS,也就是A16置高。軟件中怎么做呢?也就是將FSMC要寫的地址改成0x60020000,如下:
          (volatile unsigned short int*)(0x60020000)=val;
          這個時候,A16在執(zhí)行其他FSMC的同時會被拉高,因?yàn)锳0-A18要呈現(xiàn)出地址0x60020000。0x60020000里面的Bit17=1,就會導(dǎo)致A16為1。

          上一頁 1 2 下一頁

          關(guān)鍵詞: STM32FSMC學(xué)習(xí)筆

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();