spi_bridge.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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_GPIOA_CLK_ENABLE();
  34. __HAL_RCC_GPIOB_CLK_ENABLE();
  35. // SPI SCK
  36. GPIO_InitStruct.Pin = OLED_SPI_SCK_PIN;
  37. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  38. GPIO_InitStruct.Pull = GPIO_NOPULL;
  39. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  40. GPIO_InitStruct.Alternate = OLED_SPI_SCK_AF;
  41. HAL_GPIO_Init(OLED_SPI_SCK_PORT, &GPIO_InitStruct);
  42. // SPI MOSI
  43. GPIO_InitStruct.Pin = OLED_SPI_MOSI_PIN;
  44. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  45. GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  46. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  47. GPIO_InitStruct.Alternate = OLED_SPI_MOSI_AF;
  48. HAL_GPIO_Init(OLED_SPI_MOSI_PORT, &GPIO_InitStruct);
  49. // SPI MISO
  50. GPIO_InitStruct.Pin = OLED_SPI_MISO_PIN;
  51. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  52. GPIO_InitStruct.Pull = GPIO_NOPULL;
  53. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  54. GPIO_InitStruct.Alternate = OLED_SPI_MISO_AF;
  55. HAL_GPIO_Init(OLED_SPI_MISO_PORT, &GPIO_InitStruct);
  56. // SPI CS
  57. GPIO_InitStruct.Pin = OLED_SPI_CS_PIN;
  58. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  59. GPIO_InitStruct.Pull = GPIO_NOPULL;
  60. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  61. HAL_GPIO_Init(OLED_SPI_CS_PORT, &GPIO_InitStruct);
  62. }
  63. }
  64. //
  65. void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
  66. {
  67. if (spiHandle->Instance == SPI2)
  68. {
  69. __HAL_RCC_SPI2_CLK_DISABLE();
  70. HAL_GPIO_DeInit(OLED_SPI_SCK_PORT, OLED_SPI_SCK_PIN);
  71. HAL_GPIO_DeInit(OLED_SPI_MISO_PORT, OLED_SPI_MISO_PIN);
  72. HAL_GPIO_DeInit(OLED_SPI_MOSI_PORT, OLED_SPI_MOSI_PIN);
  73. HAL_GPIO_DeInit(OLED_SPI_CS_PORT, OLED_SPI_CS_PIN);
  74. }
  75. }