HC32L176 SPI 速度只能达到2M CLK间隔也不一致
本帖最后由 迷惘186 于 2020-12-25 13:49 编辑SPI 初始化代码
stc_gpio_cfg_t GpioInitStruct;
DDL_ZERO_STRUCT(GpioInitStruct);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
///< SPI0引脚配置:主机
GpioInitStruct.enDrv = GpioDrvH;
GpioInitStruct.enDir = GpioDirOut;
GpioInitStruct.bOutputVal = TRUE;
Gpio_Init(CV520_CS_PORT, CV520_CS_PIN, &GpioInitStruct);
Gpio_Init(CV520_RST_PORT, CV520_RST_PIN, &GpioInitStruct);
Gpio_Init(W25_CS_PORT, W25_CS_PIN, &GpioInitStruct);
Gpio_Init(SPI0_PORT, SPI0_CLK_PIN, &GpioInitStruct);
Gpio_SetAfMode(SPI0_PORT, SPI0_CLK_PIN, GpioAf1); ///<配置SPI0_SCK
Gpio_Init(SPI0_PORT, SPI0_MOSI_PIN, &GpioInitStruct);
Gpio_SetAfMode(SPI0_PORT, SPI0_MOSI_PIN, GpioAf1); ///<配置SPI0_MOSI
GpioInitStruct.enDir = GpioDirIn;
GpioInitStruct.enPu = GpioPuEnable;
Gpio_Init(SPI0_PORT, SPI0_MISO_PIN, &GpioInitStruct);
Gpio_SetAfMode(SPI0_PORT, SPI0_MISO_PIN, GpioAf1); ///<配置SPI0_MISO
stc_spi_cfg_tSpiInitStruct;
///< 打开外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi0,TRUE);
///<复位模块
Reset_RstPeripheral0(ResetMskSpi0);
//SPI0模块配置:主机
SpiInitStruct.enSpiMode = SpiMskMaster; //配置位主机模式
SpiInitStruct.enPclkDiv = SpiClkMskDiv8; //波特率:PCLK/2
SpiInitStruct.enCPHA = SpiMskCphafirst;//第一边沿采样
SpiInitStruct.enCPOL = SpiMskcpollow; //极性为低
Spi_Init(SPI_SPI0, &SpiInitStruct);
系统时钟初始化 HCLK48 PCLK 48
///<请注意根据外部晶振配置宏——,如果使用PLL,XTH必须小于24MHz
static void SystemClkInit_PLL48M_byXTH(void)
{
stc_sysctrl_pll_cfg_t stcPLLCfg;
///< 切换时钟前(根据外部高速晶振)设置XTH频率范围,配置晶振参数,使能目标时钟,此处为SYSTEM_XTH = 8MHz
Sysctrl_SetXTHFreq(SysctrlXthFreq4_8MHz);
Sysctrl_XTHDriverCfg(SysctrlXtalDriver3);
Sysctrl_SetXTHStableTime(SysctrlXthStableCycle16384);
Sysctrl_ClkSourceEnable(SysctrlClkXTH, TRUE);
delay1ms(10);
stcPLLCfg.enInFreq = SysctrlPllInFreq6_12MHz; //XTH 8MHz
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz;//PLL 输出
stcPLLCfg.enPllClkSrc = SysctrlPllXthXtal; //输入时钟源选择XTH
stcPLLCfg.enPllMul = SysctrlPllMul6; //8MHz x 6 = 48MHz
Sysctrl_SetPLLFreq(&stcPLLCfg);
///< 当使用的时钟源HCLK大于24M:设置FLASH 读等待周期为1 cycle(默认值也为1 cycle)
Flash_WaitCycle(FlashWaitCycle1);
///< 使能PLL
Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
///< 时钟切换到PLL
Sysctrl_SysClkSwitch(SysctrlClkPLL);
// ///PCLK时钟分频4分频 12M
// Sysctrl_SetPCLKDiv(SysctrlPclkDiv4);
}
已解决
逻辑分析仪采样设置的有问题
速度可以达到6M
SpiInitStruct.enPclkDiv = SpiClkMskDiv8; //波特率:PCLK/2
你这个不是PCLK/2的分频吧??? 本帖最后由 迷惘186 于 2020-12-25 11:53 编辑
martinhu 发表于 2020-12-25 11:25
SpiInitStruct.enPclkDiv = SpiClkMskDiv8; //波特率:PCLK/2
你这个不是PCLK/2的分频吧??? ...
8分频
48/8 也有6M
这个也没6M
之前是用的 PCLK 12M
分频是2 SPI理论速度应该是6M
逻辑分析仪采集到的数据也是这样 只有2M 且间隙不一致
迷惘186 发表于 2020-12-25 11:50
8分频
48/8 也有6M
这个也没6M
你这个逻分采集对么?SPI都是1一个字节1个字节发的数据,怎么会有3个CLK一组的…… 本帖最后由 迷惘186 于 2020-12-25 13:50 编辑
martinhu 发表于 2020-12-25 13:00
你这个逻分采集对么?SPI都是1一个字节1个字节发的数据,怎么会有3个CLK一组的…… ...
是一个字节一个字节发的 频率在降低到2M以下时 clk就正常了
是我的逻辑分析仪设置的有问题的 采样率不够
迷惘186 发表于 2020-12-25 13:36
是一个字节一个字节发的 频率在降低到2M以下时 clk就正常了
是我的逻辑分析仪设置的有问题的 采样率不 ...
你把你的逻分的采样率设置高一点,然后试一下刚才的PCLK/8 请问后面解决了吗?我这只能250K。。。
页:
[1]