在做STM32F42XX系列STM32 SPI通讯时,SPI3的SCK引脚时钟无法看到时钟波形,工程是从SPI5的工程改的,初始化配置代码如下:
SPI_HandleTypeDef SPI3_Handler; //SPI¾ä±ú
void SPI3_Init(void)
{
SPI3_Handler.Instance=SPI3; //SP3
SPI3_Handler.Init.Mode=SPI_MODE_MASTER;
SPI3_Handler.Init.Direction=SPI_DIRECTION_2LINES;
SPI3_Handler.Init.DataSize=SPI_DATASIZE_16BIT;
SPI3_Handler.Init.CLKPolarity=SPI_POLARITY_LOW;
SPI3_Handler.Init.CLKPhase=SPI_PHASE_2EDGE;
SPI3_Handler.Init.NSS=SPI_NSS_SOFT;
SPI3_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;
SPI3_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB;
SPI3_Handler.Init.TIMode=SPI_TIMODE_DISABLE;
SPI3_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;
SPI3_Handler.Init.CRCPolynomial=7;
HAL_SPI_Init(&SPI3_Handler);
__HAL_SPI_ENABLE(&SPI3_Handler);
}
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_SPI3_CLK_ENABLE();
//PC10,11,12
GPIO_Initure.Pin=GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
GPIO_Initure.Mode=GPIO_MODE_AF_PP;
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_FAST;
GPIO_Initure.Alternate=GPIO_AF5_SPI3;
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
}
看起来配置没有问题,百思不得其解!
经过查阅资料发现引脚的复用错了,GPIO_AF5_SPI3这里有问题,映射表如下:
细心的可以发现,有GPIO_AF5_SPI3、GPIO_AF6_SPI3两种映射,到底使用哪一种才正确呢?查阅STM32F4XX中文手册,找到180页GPIO映射表,如下:
很明显SPI3使用的是AF6,所以此处改为GPIO_AF6_SPI3,这样就可以正确的输出了!