前两天发现STM32CubeMX项目SPI2 CLK信号丢失问题
1、使用引脚
PB2 ------> SPI2_MISO
PB11 ------> SPI2_MOSI
PB12 ------> SPI2_NSS
PB13 ------> SPI2_SCK
2、生成GPIO的代码如下:
/* USER CODE BEGIN SPI2_MspInit 0 */
/* USER CODE END SPI2_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_SPI2_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**SPI2 GPIO Configuration
PB2 ------> SPI2_MISO
PB11 ------> SPI2_MOSI
PB12 ------> SPI2_NSS
PB13 ------> SPI2_SCK
*/
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF0_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF0_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN SPI2_MspInit 1 */
/* USER CODE END SPI2_MspInit 1 */
2、错误原因
经检查,在配置PB13 ------> SPI2_SCK时钟引脚的时候,复用功能使用错了。
PB13 并没有GPIO_AF1_SPI2这种复用功能,应该将其改为 GPIO_InitStruct.Alternate = GPIO_AF0_SPI2;
手册中的复用功能:
3、使用STM32CubeMX版本如下