目前最快做到了4Mbps,我用示波器看SCLK信號確定的。
CH32L103主頻96M, 跟蹤總線時鐘配置發(fā)現(xiàn)PB2總線的PCLK2是不分頻,也就是96M
SPI1的時鐘設(shè)置SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
也就是2分頻,應(yīng)該有48Mbps的速度,但實際只有4Mbps,是還有哪里沒有配置好嗎?
目前最快做到了4Mbps,我用示波器看SCLK信號確定的。
CH32L103主頻96M, 跟蹤總線時鐘配置發(fā)現(xiàn)PB2總線的PCLK2是不分頻,也就是96M
SPI1的時鐘設(shè)置SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
也就是2分頻,應(yīng)該有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