1. 程式人生 > >STM32使用FSMC驅動8080時序CH395的一些問題

STM32使用FSMC驅動8080時序CH395的一些問題

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模式。資源下載: 

STM32分別以串列埠,硬體SPI,模擬並口驅動CH395,4個socket連線

  STM32以FSMC硬體並口驅動CH395,4個socket連線