STM32使用FSMC驅動8080時序CH395的一些問題
阿新 • • 發佈:2018-12-18
CH395L是帶並口的版本,支援串列埠、SPI、並口三種模式,網絡卡類似於內建TCP協議的W5500,使用者只需讀取一些引數設定socket就可以完成網路通訊。CH395具有並口模式,這是個特色,在對速度要求高的場合,並口比SPI等序列方式快很多,在使用stm32f103以fsmc硬體並口驅動ch395時參考秉火和戰艦的驅動LCD的例程,因為都是8080時序的裝置,方法相似。
在配置過程中,發現在以杜邦線連線ch395模組的情況下,
readWriteTiming.FSMC_AddressSetupTime = 0x03; readWriteTiming.FSMC_DataSetupTime = 0x08;
這兩個值不能再小於此數值,整個讀寫週期達到 (3+1 +8+1)*1/72MHz = 182ns,沒達到手冊的寫模式極限值41ns
值改小的話讀出的資料會重複 出錯,只能調大,原因可能是杜邦線的穩定性問題,波形奇醜:
與LCD配置不同的是,需要加上以下:FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
同步等待需要關閉,之前測試失敗是因為讀寫週期不一致,示波器觀察 寫週期太短,週期與寫不一致,FSMC_AccessMode_B下,寫週期的引數似乎不受控制,週期過短,切換為FSMC_AccessMode_A ,讀寫分別配置,示波器檢視 讀寫週期一致,驅動成功。沒有再深入研究,具體配置如下:
readWriteTiming.FSMC_AddressSetupTime = 0x03;
readWriteTiming.FSMC_DataSetupTime = 0x08;
readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;
readWriteTiming.FSMC_AddressHoldTime = 0x00;
readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
readWriteTiming.FSMC_CLKDivision = 0x00;
readWriteTiming.FSMC_DataLatency = 0x00;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAMx;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
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 = &readWriteTiming;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming;
此外參考ch395官方demo--exam0,移植了stm32平臺下串列埠、硬體SPI、模擬並口、硬體FSMC並口的驅動程式,4個Socket分別工作在TCP 客戶端、伺服器、UDP、IPRAW模式。資源下載: