ciu32f003_std_spi(3).c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /************************************************************************************************/
  2. /**
  3. * @file ciu32f003_std_spi.c
  4. * @author MCU Ecosystem Development Team
  5. * @brief SPI STD库驱动。
  6. * 实现SPI初始化等API。
  7. *
  8. *
  9. **************************************************************************************************
  10. * @attention
  11. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  12. *
  13. **************************************************************************************************
  14. */
  15. /************************************************************************************************/
  16. /**
  17. * @addtogroup CIU32F003_STD_Driver
  18. * @{
  19. */
  20. /**
  21. * @addtogroup SPI
  22. * @{
  23. *
  24. */
  25. /************************************************************************************************/
  26. /*------------------------------------------includes--------------------------------------------*/
  27. #include "ciu32f003_std.h"
  28. #ifdef STD_SPI_PERIPHERAL_USED
  29. /*-------------------------------------------functions------------------------------------------*/
  30. /************************************************************************************************/
  31. /**
  32. * @addtogroup SPI_External_Functions
  33. * @{
  34. *
  35. */
  36. /************************************************************************************************/
  37. /**
  38. * @brief SPI初始化
  39. * @param spi_init_param SPI初始化结构体
  40. * @retval 无
  41. */
  42. void std_spi_init(std_spi_init_t *spi_init_param)
  43. {
  44. /* SPI初始化:
  45. - 配置SPI通信速率
  46. - 配置SPI时钟极性
  47. - 配置SPI时钟相位
  48. - 配置SPI数据大小端
  49. */
  50. MODIFY_REG(SPI1->CR1, (SPI_CR1_BR | SPI_CR1_CPOL | SPI_CR1_CPHA | SPI_CR1_LSBFIRST),
  51. (spi_init_param->baud_rate_prescaler
  52. | spi_init_param->clk_polarity
  53. | spi_init_param->clk_phase
  54. | spi_init_param->bitorder));
  55. /* 配置SPI主从模式 */
  56. MODIFY_REG(SPI1->CR1, SPI_CR1_MSTR, spi_init_param->mode);
  57. }
  58. /**
  59. * @brief SPI去初始化
  60. * @retval 无
  61. */
  62. void std_spi_deinit(void)
  63. {
  64. std_rcc_apb2_reset(RCC_PERIPH_RESET_SPI1);
  65. }
  66. /**
  67. * @brief SPI结构体初始化
  68. * @param spi_init_struct SPI初始化结构体
  69. * @retval 无
  70. */
  71. void std_spi_struct_init(std_spi_init_t *spi_init_struct)
  72. {
  73. spi_init_struct->mode = SPI_MODE_MASTER;
  74. spi_init_struct->baud_rate_prescaler = SPI_BAUD_PCLKDIV_128;
  75. spi_init_struct->clk_polarity = SPI_POLARITY_LOW;
  76. spi_init_struct->clk_phase = SPI_PHASE_1EDGE;
  77. spi_init_struct->bitorder = SPI_FIRSTBIT_MSB;
  78. }
  79. /**
  80. * @}
  81. */
  82. #endif /* STD_SPI_PERIPHERAL_USED */
  83. /**
  84. * @}
  85. */
  86. /**
  87. * @}
  88. */