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连接

猜你喜欢

转载自blog.csdn.net/qinkun1994/article/details/84931306