目前最快做到了4Mbps,我用示波器看SCLK信号确定的。
CH32L103主频96M, 跟踪总线时钟配置发现PB2总线的PCLK2是不分频,也就是96M
SPI1的时钟设置SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
也就是2分频,应该有48Mbps的速度,但实际只有4Mbps,是还有哪里没有配置好吗?
目前最快做到了4Mbps,我用示波器看SCLK信号确定的。
CH32L103主频96M, 跟踪总线时钟配置发现PB2总线的PCLK2是不分频,也就是96M
SPI1的时钟设置SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
也就是2分频,应该有48Mbps的速度,但实际只有4Mbps,是还有哪里没有配置好吗?
使能这个寄存器SPI1->HSCR|=0x01;顺便用逻辑分析仪抓一下时钟波形,看看时钟是不是48M的,要是时钟是48M的,通信速度上不去只是你的总线利用率低而已。
按照您说的打开了HSCR,用示波器解码SPI观察CLK还是4Mhz
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