一.STM32F103系统框架图
SPI控制寄存器 1(SPI_CR1)
SPI1是fPCLK2,SPI2是fPCLK1
系统默认配置:fPCLK2=72MHz,fPCLK1=36MHzSPI1最大能达到72M,SPI2最大能达到36M。
二.硬件SPI结构体
typedef struct
{
uint16_t SPI_Direction; /*设置 SPI 的单双向模式 */
uint16_t SPI_Mode; /*设置 SPI 的主/从机端模式 */
uint16_t SPI_DataSize; /*设置 SPI 的数据帧长度,可选 8/16 位 */
uint16_t SPI_CPOL; /*设置时钟极性 CPOL,可选高/低电平*/
uint16_t SPI_CPHA; /*设置时钟相位,可选奇/偶数边沿采样 */
uint16_t SPI_NSS; /*设置 NSS 引脚由 SPI 硬件控制还是软件控制*/
uint16_t SPI_BaudRatePrescaler; /*设置时钟分频因子,fpclk/分频数=fSCK */
uint16_t SPI_FirstBit; /*设置 MSB/LSB 先行 */
uint16_t SPI_CRCPolynomial; /*设置 CRC 校验的表达式 */
} SPI_InitTypeDef;
标准库中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的SCLK时钟波形应该为8个位
四.SPI-ADS1220 出错处
外部时钟频率 f
(CLK) 标准值为 4.096MHZ。在硬件SPI中我分频值给太大,导致时序错误。
举例,当SPI_BaudRatePrescaler项配置为SPI_BaudRatePrescaler_64,SPI1是1.125MHz,SPI2是0.5625MHz。