新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 FSMC總線深入研究

        STM32 FSMC總線深入研究

        作者: 時間:2016-11-27 來源:網絡 收藏

        2. FSMC時序研究

        下圖為FSMC寫命令與數據的時序圖,從中根據上圖可以分析出FSMC可以實現16M的數據寫入。FSMC的信號線翻轉非常快,這使得IC或者FPGA時序設計上得非常嚴謹。FSMC最大實現了72MHz(66.7到100MHz之間,實際為72MHz,HCLK)的翻轉速度,這要求外部器件支持那么高的速率。

        寄存器配置(寄存器+數據)

        連續數據寫入(0xBB:寫數據開始),命令后,RS默認拉低(FSMC和標準不一樣的地方)

        數據建立很快

        寫數據,然后默認RS拉低

        整體的時序可模擬為:

        task task_writecmd;

        input [15:0] cmd;

        begin

        mcu_cs = 0;

        mcu_rs = 0;

        mcu_data = cmd;

        #20;

        mcu_we = 0;

        #20;

        mcu_we = 1;

        #15;

        mcu_rs = 1;

        mcu_cs = 1;

        #20;

        end

        endtask

        task task_writedata;

        input [15:0] data;

        begin

        mcu_cs = 0;

        mcu_rs = 1;

        mcu_data = data;

        #20;

        mcu_we = 0;

        #20;

        mcu_we = 1;

        #15;

        mcu_rs = 1;

        mcu_cs = 1;

        #20;

        end

        endtask

        3. FSMC接口初始化

        根據手冊,相關參數如下表所示。這里我發現所謂最小值還能設置為最小,但實際速度差不多。FSMC協議時間參數如下所示:

        有人跟我說,手冊是保守的;有人跟我說,在小就是默認值了。我不太理解。感覺速度每提升,應該在小就是默認了。不過,反正我追求速度的極限。

        以下是FSMC-SRAM模式下的初始化代碼,分享的同時,希望對你有用。

        typedefstruct{ vu16 LCD_REG; vu16 LCD_RAM; } LCD_TypeDef;#defineLCD_WriteCmd(cmd) LCD->LCD_REG = cmd#defineLCD_WriteData(data) LCD->LCD_RAM = data#defineLCD_BASE ((u32)(0x60000000 | 0x0C000000))#defineLCD ((LCD_TypeDef *) LCD_BASE)voidLCD_FSMCConfig(void) { FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDefp;//標準// p.FSMC_AddressSetupTime = 1;// p.FSMC_AddressHoldTime = 2;// p.FSMC_DataSetupTime = 2;// p.FSMC_BusTurnAroundDuration = 1;// p.FSMC_CLKDivision = 1;// p.FSMC_DataLatency = 2;//超快p.FSMC_AddressSetupTime = 0; p.FSMC_AddressHoldTime = 0; p.FSMC_DataSetupTime = 1; p.FSMC_BusTurnAroundDuration = 0; p.FSMC_CLKDivision = 0; p.FSMC_DataLatency = 0; p.FSMC_AccessMode = FSMC_AccessMode_A; FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4; 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_AsynchronousWait = FSMC_AsynchronousWait_Disable;//2.0FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); }

        上一頁 1 2 下一頁

        關鍵詞: STM32FSMC總

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 荃湾区| 澳门| 南澳县| 焉耆| 西畴县| 手游| 鄂托克前旗| 上林县| 漯河市| 阳西县| 本溪市| 广平县| 万州区| 衡东县| 永年县| 凤山市| 封开县| 克山县| 白河县| 获嘉县| 楚雄市| 安庆市| 平塘县| 应用必备| 武定县| 西宁市| 同江市| 龙岩市| 四川省| 宜州市| 武定县| 钟山县| 津市市| 阜南县| 沈丘县| 淮滨县| 无棣县| 交口县| 邢台县| 邛崃市| 本溪市|