spi_bridge.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "spi_bridge.h"
  2. #include "oled_config.h"
  3. SPI_HandleTypeDef hspi2;
  4. //
  5. void spi_bridge_init(void)
  6. {
  7. hspi2.Instance = SPI2;
  8. hspi2.Init.Mode = SPI_MODE_MASTER;
  9. hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  10. hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  11. hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  12. hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  13. hspi2.Init.NSS = SPI_NSS_SOFT;
  14. hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
  15. hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  16. hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  17. hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  18. hspi2.Init.CRCPolynomial = 10;
  19. HAL_SPI_Init(&hspi2);
  20. }
  21. //
  22. SPI_HandleTypeDef *spi_get_bridge(void)
  23. {
  24. return &hspi2;
  25. }
  26. //
  27. void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
  28. {
  29. GPIO_InitTypeDef GPIO_InitStruct = {0};
  30. if (hspi->Instance == SPI2)
  31. {
  32. __HAL_RCC_SPI2_CLK_ENABLE();
  33. __HAL_RCC_GPIOB_CLK_ENABLE();
  34. // SPI SCK
  35. GPIO_InitStruct.Pin = OLED_SPI_SCK_PIN;
  36. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  37. GPIO_InitStruct.Pull = GPIO_NOPULL;
  38. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  39. GPIO_InitStruct.Alternate = OLED_SPI_SCK_AF;
  40. HAL_GPIO_Init(OLED_SPI_SCK_PORT, &GPIO_InitStruct);
  41. // SPI MOSI
  42. GPIO_InitStruct.Pin = OLED_SPI_MOSI_PIN;
  43. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  44. GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  45. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  46. GPIO_InitStruct.Alternate = OLED_SPI_MOSI_AF;
  47. HAL_GPIO_Init(OLED_SPI_MOSI_PORT, &GPIO_InitStruct);
  48. // SPI MISO
  49. GPIO_InitStruct.Pin = OLED_SPI_MISO_PIN;
  50. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  51. GPIO_InitStruct.Pull = GPIO_NOPULL;
  52. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  53. GPIO_InitStruct.Alternate = OLED_SPI_MISO_AF;
  54. HAL_GPIO_Init(OLED_SPI_MISO_PORT, &GPIO_InitStruct);
  55. // SPI CS
  56. GPIO_InitStruct.Pin = OLED_SPI_CS_PIN;
  57. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  58. GPIO_InitStruct.Pull = GPIO_NOPULL;
  59. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  60. HAL_GPIO_Init(OLED_SPI_CS_PORT, &GPIO_InitStruct);
  61. }
  62. }
  63. //
  64. void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
  65. {
  66. if (spiHandle->Instance == SPI2)
  67. {
  68. __HAL_RCC_SPI2_CLK_DISABLE();
  69. HAL_GPIO_DeInit(OLED_SPI_SCK_PORT, OLED_SPI_SCK_PIN);
  70. HAL_GPIO_DeInit(OLED_SPI_MISO_PORT, OLED_SPI_MISO_PIN);
  71. HAL_GPIO_DeInit(OLED_SPI_MOSI_PORT, OLED_SPI_MOSI_PIN);
  72. }
  73. }