RT-Thread驱动之路: Studio初始化SPI总线③

      创建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设备的话就是初始化成功了:

      本篇到这里就结束了,感谢阅读!

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 3
收藏 4
关注 139
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧