当前位置:   article > 正文

STM32-SPI基础_stm32 spi初始化

stm32 spi初始化

在之前的笔记中我们已经介绍了SPI通信方式了,详见以下链接:http://t.csdn.cn/zc3P9

首先我们先介绍一些SPI相关的HAL库函数:

1、__HAL_RCC_SSPIx_CLK_ENABLE():使能SPI时钟;

2、HAL_SPI_Init():用SPI句柄初始化SPI;

3、HAL_SPI_MspInit():初始化SPI回调;

4、HAL_SPI_Transmit():SPI发送消息;

5、HAL_SPI_Receive():SPI接受消息;

6、HAL_SPI_TransmitReceive():SPI收发消息;

7、__HAL_SPI_ENABLE():使能SPI外设;

8、__HAL_SPI_DISABLE():失能SPI外设;

接下来介绍SPI初始化句柄 SPI_HandleTypeDef 的一些比较重要的成员参数:g_spi_handle

1、g_spi_handle.Instance:选用SPI的基地址;

2、g_spi_handle.Init.Mode:SPI模式(主机/从机);

3、g_spi_handle.Init.Direction:工作方式(全双工);

4、g_spi_handle.Init.DataSize:帧格式(8/16位);

5、g_spi_handle.Init.CLKPolarity:时钟极性(0代表高电平有效,1代表低电平有效);

6、g_spi_handle.Init.CLKPhase:时钟相位(0代表上升沿触发,1代表下降沿触发);

7、g_spi_handle.Init.NSS:SS片选控制方式(软件控制);

8、g_spi_handle.Init.BaudRatePrescaler:SPI波特率预分频器;

9、g_spi_handle.Init.FirstBit:数据传输顺序(MSB);

10、g_spi_handle.Init.TIMode:帧格式motorola;

11、g_spi_handle.Init.CRCCalculation:设置硬件CRC校验;

12、g_spi_handle.Init.CRCPolynomial:设置CRC校验多项式;、

接下来我们编写SPI实验的库:

首先我们编写函数文件spi.c:

  1. #include "./BSP/SPI/spi.h"
  2. SPI_HandleTypeDef g_spi2_handle;
  3. void spi2_init(void){
  4. g_spi2_handle.Instance = SPI2_SPI;
  5. g_spi2_handle.Init.Mode = SPI_MODE_MASTER;
  6. g_spi2_handle.Init.Direction = SPI_DIRECTION_2LINE;
  7. g_spi2_handle.Init.DataSize = SPI_DATASIZE_8BIT;
  8. g_spi2_handle.Init.CLKPolarity = SPI_POLARITY_HIGH;
  9. g_spi2_handle.Init.CLKPhase = SPI_PHASE_2EDGE;
  10. g_spi2_handle.Init.NSS = SPI_NSS_SOFT;
  11. g_spi2_handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  12. g_spi2_handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
  13. g_spi2_handle.Init.TIMode = SPI_TIMODE_DISABLE;
  14. g_spi2_handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  15. g_spi2_handle.Init.CRCPolynomial = 7;
  16. HAL_SPI_Init(&g_spi2_handle);
  17. }
  18. void _HAL_SPI_MspInit(SPI_HandleTypeDef *hspi){
  19. GPIO_InitTypeDef gpio_init_struct;
  20. if(g_spi2_handle.Instance == SPI2_SPI){
  21. SPI2_SPI_CLK_ENABLE();
  22. SPI2_MISO_GPIO_CLK_ENABLE();
  23. SPI2_MOSI_GPIO_CLK_ENABLE();
  24. gpio_init_struct.Pin = SPI2_SCK_GPIO_PIN;
  25. gpio_init_struct.Mode = GPIO_MODE_AF_PP;
  26. gpio_init_struct.Pull = GPIO_PULLUP;
  27. gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
  28. HAL_GPIO_Init(SPI2_SCK_GPIO_PORT, &gpio_init_struct);
  29. gpio_init_struct.Pin = SPI2_MISO_GPIO_PIN;
  30. HAL_GPIO_Init(SPI2_MISO_GPIO_PORT, &gpio_init_struct);
  31. gpio_init_struct.Pin = SPI2_MOSI_GPIO_PIN;
  32. HAL_GPIO_Init(SPI2_MOSI_GPIO_PORT, &gpio_init_struct);
  33. }
  34. }
  35. uint8_t spi2_read_write_byte(uint8_t data){
  36. uint8_t rec_data = 0;
  37. HAL_SPI_TransmitReceive(&g_spi2_handle, data, rec_data, 1, 1000);
  38. return rec_data;
  39. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50715
推荐阅读
相关标签
  

闽ICP备14008679号