创建SPI总线之前,我们需要指导怎样才算总线初始化成功了可用呢,系统提供了list device命令可以打印出当前设备列表:
接下来就是如何真正的初始化SPI控制器了,其实很简单按照如下步骤走就可以:
1.打开SPI设备框架,该部分位于系统设置的组件选项卡里面,使用SPI总线/设备驱动程序。
这一步只是打开了纯粹的软件设备框架,一般MCU会有多个SPI控制器,接下来需要打开你需要的那个SPI控制器
2.定义关联真实SPI控制器的宏,位于board.h文件中,默认是被注释状态,打开即可:
3.需要借助cubemx软件对SPI的gpio部分完成初始化,首先配置对应的SPI控制器,完成之后就是需要电机生成代码来生成对应的控制器代码,生成的代码为void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)函数,这个函数位于stm32f4xx_hal_msp.c文件中,把他复制到board.c文件中,生成的代码如下:
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(hspi->Instance==SPI2)
{
/* 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
PB13 ------> SPI2_SCK
PB14 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN SPI2_MspInit 1 */
/* USER CODE END SPI2_MspInit 1 */
}
}
4.代码移植完以后,还需要打开SPI控制器hal库的支持宏:
到这里就完成了SPI的移植的所有工作,接下来就是编译整个工程,检查没有错误后,通过仿真器下载到硬件里面,打开终端串口,输入list device命令,我们从列表里面如果可以看到SPI设备的话就是初始化成功了:
本篇到这里就结束了,感谢阅读!