以STM32F103为例,
经过system_stm32f10x.c文件中的SystemInit()函数之后,这里是指的默认时钟配置如下图所示:
STM32F103的系统框架图如下所示:
可见:SPI1是在挂APB2上的,SPI2是挂在APB1上的。
SPI的波特率控制有8种分频可选
SPI控制寄存器 1(SPI_CR1)
上述的fPCLK对于SPI1来说是fPCLK2,对于SPI2来说是fPCLK1。
系统默认配置是fPCLK2=72MHz,fPCLK1=36MHz。
标准库中SPI_BaudRatePrescaler配置项可选如下:
#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000)
#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008)
#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010)
#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018)
#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020)
#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028)
#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030)
#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038)
SPI最大能达到的速率是fPCLK/2,也就是SPI1最大能达到36M,SPI2最大能达到18M。
举例,当SPI_BaudRatePrescaler项配置为SPI_BaudRatePrescaler_64,SPI1是1.125MHz,SPI2是0.5625MHz。该结论已实验,通过示波器量取SCK信号验证。