i2c.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #ifndef I2C_H
  2. #define I2C_H
  3. #include "stm32f2xx.h"
  4. /* Exported constants --------------------------------------------------------*/
  5. #define SR1_AF_Set ((uint16_t)0x0400)
  6. #define SR1_ARLO_Set ((uint16_t)0x0200)
  7. #define SR1_BERR_Set ((uint16_t)0x0100)
  8. #define SR1_ADDR_Set ((uint16_t)0x0002)
  9. #define SR1_SB_Set ((uint16_t)0x0001)
  10. #define SR2_BUSY ((uint16_t)0x0002)
  11. #define SR2_MSL ((uint16_t)0x0001)
  12. #define CR1_SWRST_Set ((uint16_t)0x8000)
  13. /* I2C SPE mask */
  14. #define CR1_PE_Set ((uint16_t)0x0001)
  15. #define CR1_PE_Reset ((uint16_t)0xFFFE)
  16. /* I2C START mask */
  17. #define CR1_START_Set ((uint16_t)0x0100)
  18. #define CR1_START_Reset ((uint16_t)0xFEFF)
  19. #define CR1_POS_Set ((uint16_t)0x0800)
  20. #define CR1_POS_Reset ((uint16_t)0xF7FF)
  21. /* I2C STOP mask */
  22. #define CR1_STOP_Set ((uint16_t)0x0200)
  23. #define CR1_STOP_Reset ((uint16_t)0xFDFF)
  24. /* I2C ACK mask */
  25. #define CR1_ACK_Set ((uint16_t)0x0400)
  26. #define CR1_ACK_Reset ((uint16_t)0xFBFF)
  27. /* I2C ENARP mask */
  28. #define CR1_ENARP_Set ((uint16_t)0x0010)
  29. #define CR1_ENARP_Reset ((uint16_t)0xFFEF)
  30. /* I2C NOSTRETCH mask */
  31. #define CR1_NOSTRETCH_Set ((uint16_t)0x0080)
  32. #define CR1_NOSTRETCH_Reset ((uint16_t)0xFF7F)
  33. /* I2C registers Masks */
  34. #define CR1_CLEAR_Mask ((uint16_t)0xFBF5)
  35. /* I2C DMAEN mask */
  36. #define CR2_DMAEN_Set ((uint16_t)0x0800)
  37. #define CR2_DMAEN_Reset ((uint16_t)0xF7FF)
  38. /* I2C LAST mask */
  39. #define CR2_LAST_Set ((uint16_t)0x1000)
  40. #define CR2_LAST_Reset ((uint16_t)0xEFFF)
  41. /* I2C FREQ mask */
  42. #define CR2_FREQ_Reset ((uint16_t)0xFFC0)
  43. /* I2C ADD0 mask */
  44. #define OAR1_ADD0_Set ((uint16_t)0x0001)
  45. #define OAR1_ADD0_Reset ((uint16_t)0xFFFE)
  46. /* I2C ENDUAL mask */
  47. #define OAR2_ENDUAL_Set ((uint16_t)0x0001)
  48. #define OAR2_ENDUAL_Reset ((uint16_t)0xFFFE)
  49. /* I2C ADD2 mask */
  50. #define OAR2_ADD2_Reset ((uint16_t)0xFF01)
  51. /* I2C F/S mask */
  52. #define CCR_FS_Set ((uint16_t)0x8000)
  53. /* I2C CCR mask */
  54. #define CCR_CCR_Set ((uint16_t)0x0FFF)
  55. /* I2C FLAG mask */
  56. #define FLAG_Mask ((uint32_t)0x00FFFFFF)
  57. /* I2C Interrupt Enable mask */
  58. #define ITEN_Mask ((uint32_t)0x07000000)
  59. #define I2C_IT_BUF ((uint16_t)0x0400)
  60. #define I2C_IT_EVT ((uint16_t)0x0200)
  61. #define I2C_IT_ERR ((uint16_t)0x0100)
  62. #define ClockSpeed 400000
  63. #define I2C_DIRECTION_TX 0
  64. #define I2C_DIRECTION_RX 1
  65. #define OwnAddress1 0x28
  66. #define OwnAddress2 0x30
  67. #define I2C1_DMA_CHANNEL_TX DMA1_Stream6
  68. #define I2C1_DMA_CHANNEL_RX DMA1_Stream0
  69. #define I2C1_DMA_TX_IRQn DMA1_Stream6_IRQn
  70. #define I2C1_DMA_RX_IRQn DMA1_Stream0_IRQn
  71. #define I2C2_DMA_CHANNEL_TX DMA1_Stream2
  72. #define I2C2_DMA_CHANNEL_RX DMA1_Stream7
  73. #define I2C2_DMA_TX_IRQn DMA1_Stream2_IRQn
  74. #define I2C2_DMA_RX_IRQn DMA1_Stream7_IRQn
  75. #define I2C1_DR_Address 0x40005410
  76. #define I2C2_DR_Address 0x40005810
  77. #define I2C1_SDA_PIN GPIO_Pin_7
  78. #define I2C1_SCL_PIN GPIO_Pin_6
  79. #define I2C1_SDA_SOURCE GPIO_PinSource7
  80. #define I2C1_SCL_SOURCE GPIO_PinSource6
  81. #define I2C1_GPIO_PORT GPIOB
  82. #define I2C1_GPIO_CLK RCC_AHB1Periph_GPIOB
  83. #define I2C1_CLK RCC_APB1Periph_I2C1
  84. #define I2C2_SDA_PIN GPIO_Pin_11
  85. #define I2C2_SCL_PIN GPIO_Pin_10
  86. #define I2C2_SDA_SOURCE GPIO_PinSource11
  87. #define I2C2_SCL_SOURCE GPIO_PinSource10
  88. #define I2C2_GPIO_PORT GPIOB
  89. #define I2C2_GPIO_CLK RCC_AHB1Periph_GPIOB
  90. #define I2C2_CLK RCC_APB1Periph_I2C1
  91. #define I2C_MEM_1Byte 1
  92. #define I2C_MEM_2Bytes 2
  93. typedef enum
  94. {
  95. Error = 0,
  96. Success = !Error
  97. }Status;
  98. typedef enum
  99. {
  100. Polling = 0x00,
  101. Interrupt = 0x01,
  102. DMA = 0x02
  103. } I2C_ProgrammingModel;
  104. void I2C1_INIT();
  105. Status I2C_AcknowledgePolling(I2C_TypeDef* I2Cx ,uint8_t Addr);
  106. Status I2C_IORW(I2C_TypeDef* I2Cx, uint8_t* pBuffer, uint32_t NumByteToRead, uint16_t memAddr, uint8_t SlaveAddress , uint8_t MemType );
  107. #endif