HC32L176 SPI 速度只能达到2M CLK间隔也不一致

SPI 初始化代码

  1. stc_gpio_cfg_t GpioInitStruct;
  2. DDL_ZERO_STRUCT(GpioInitStruct);
  3. Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
  4. ///< SPI0引脚配置:主机
  5. GpioInitStruct.enDrv = GpioDrvH;
  6. GpioInitStruct.enDir = GpioDirOut;
  7. GpioInitStruct.bOutputVal = TRUE;
  8. Gpio_Init(CV520_CS_PORT, CV520_CS_PIN, &GpioInitStruct);
  9. Gpio_Init(CV520_RST_PORT, CV520_RST_PIN, &GpioInitStruct);
  10. Gpio_Init(W25_CS_PORT, W25_CS_PIN, &GpioInitStruct);
  11. Gpio_Init(SPI0_PORT, SPI0_CLK_PIN, &GpioInitStruct);
  12. Gpio_SetAfMode(SPI0_PORT, SPI0_CLK_PIN, GpioAf1);           ///<配置SPI0_SCK
  13. Gpio_Init(SPI0_PORT, SPI0_MOSI_PIN, &GpioInitStruct);
  14. Gpio_SetAfMode(SPI0_PORT, SPI0_MOSI_PIN, GpioAf1);         ///<配置SPI0_MOSI
  15. GpioInitStruct.enDir = GpioDirIn;
  16. GpioInitStruct.enPu = GpioPuEnable;
  17. Gpio_Init(SPI0_PORT, SPI0_MISO_PIN, &GpioInitStruct);
  18. Gpio_SetAfMode(SPI0_PORT, SPI0_MISO_PIN, GpioAf1);         ///<配置SPI0_MISO
  19. stc_spi_cfg_t  SpiInitStruct;
  20. ///< 打开外设时钟
  21. Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi0,TRUE);
  22. ///<复位模块
  23. Reset_RstPeripheral0(ResetMskSpi0);
  24. //SPI0模块配置:主机
  25. SpiInitStruct.enSpiMode = SpiMskMaster;     //配置位主机模式
  26. SpiInitStruct.enPclkDiv = SpiClkMskDiv8;    //波特率:PCLK/2
  27. SpiInitStruct.enCPHA    = SpiMskCphafirst;  //第一边沿采样
  28. SpiInitStruct.enCPOL    = SpiMskcpollow;    //极性为低
  29. Spi_Init(SPI_SPI0, &SpiInitStruct);

复制代码

系统时钟初始化 HCLK48 PCLK 48

  1. ///<请注意根据外部晶振配置宏——[SYSTEM_XTH],如果使用PLL,XTH必须小于24MHz
  2. static void SystemClkInit_PLL48M_byXTH(void)
  3. {
  4. stc_sysctrl_pll_cfg_t stcPLLCfg;
  5. ///< 切换时钟前(根据外部高速晶振)设置XTH频率范围,配置晶振参数,使能目标时钟,此处为SYSTEM_XTH = 8MHz
  6. Sysctrl_SetXTHFreq(SysctrlXthFreq4_8MHz);
  7. Sysctrl_XTHDriverCfg(SysctrlXtalDriver3);
  8. Sysctrl_SetXTHStableTime(SysctrlXthStableCycle16384);
  9. Sysctrl_ClkSourceEnable(SysctrlClkXTH, TRUE);
  10. delay1ms(10);
  11. stcPLLCfg.enInFreq    = SysctrlPllInFreq6_12MHz;    //XTH 8MHz
  12. stcPLLCfg.enOutFreq   = SysctrlPllOutFreq36_48MHz;  //PLL 输出
  13. stcPLLCfg.enPllClkSrc = SysctrlPllXthXtal;          //输入时钟源选择XTH
  14. stcPLLCfg.enPllMul    = SysctrlPllMul6;             //8MHz x 6 = 48MHz
  15. Sysctrl_SetPLLFreq(&stcPLLCfg);
  16. ///< 当使用的时钟源HCLK大于24M:设置FLASH 读等待周期为1 cycle(默认值也为1 cycle)
  17. Flash_WaitCycle(FlashWaitCycle1);
  18. ///< 使能PLL
  19. Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
  20. ///< 时钟切换到PLL
  21. Sysctrl_SysClkSwitch(SysctrlClkPLL);
  22. //    ///PCLK时钟分频4分频 12M
  23. //    Sysctrl_SetPCLKDiv(SysctrlPclkDiv4);
  24. }

复制代码

已解决
逻辑分析仪采样设置的有问题
速度可以达到6M

(0)

相关推荐