怎么才能让CH32L103的SPI1更快一点呢

目前最快做到了4Mbps,我用示波器看SCLK信号确定的。

CH32L103主频96M, 跟踪总线时钟配置发现PB2总线的PCLK2是不分频,也就是96M

SPI1的时钟设置SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;

也就是2分频,应该有48Mbps的速度,但实际只有4Mbps,是还有哪里没有配置好吗?

image.png使能这个寄存器SPI1->HSCR|=0x01;顺便用逻辑分析仪抓一下时钟波形,看看时钟是不是48M的,要是时钟是48M的,通信速度上不去只是你的总线利用率低而已。


按照您说的打开了HSCR,用示波器解码SPI观察CLK还是4Mhz

1715400390141165.png



SPI初始化代码如下

void SPI_1Lines_HalfDuplex_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure={0};

    SPI_InitTypeDef SPI_InitStructure={0};


    RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOA | RCC_PB2Periph_SPI1, ENABLE );


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init( GPIOA, &GPIO_InitStructure );


    SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;

    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;

    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;

    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;

    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

    SPI_InitStructure.SPI_CRCPolynomial = 0;

    SPI_Init( SPI1, &SPI_InitStructure );

    SPI_HighSpeedRead_Cmd(SPI1, ENABLE);    //打开高速读模式

    SPI_Cmd( SPI1, ENABLE );

}



你好,这个看着是你没有使用外部晶振,而使能了外部晶振的宏了。如果没有外接外部晶振,请将这个宏改为以下带HSI的宏

//#define SYSCLK_FREQ_48MHz_HSI  48000000

//#define SYSCLK_FREQ_56MHz_HSI  56000000

//#define SYSCLK_FREQ_72MHz_HSI  72000000

#define SYSCLK_FREQ_96MHz_HSI  96000000

image.png


问题解决了,感谢Wch_Zdg 的热情支持答复!


我估计是好多处修改,不知道哪里乱了,

重新从EVT的DEMO代码复制过来再试,就没有问题了,

波特率可以按我自己的需求调整了

image.png


只有登录才能回复,可以选择微信账号登录