i2c_bridge.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "i2c_bridge.h"
  2. #include "oled_config.h"
  3. I2C_HandleTypeDef hi2c2;
  4. //
  5. void i2c_bridge_init(void)
  6. {
  7. #if 0
  8. // This template from lib
  9. hi2c2.Instance = I2C2;
  10. hi2c2.Init.ClockSpeed = 100000;
  11. hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
  12. hi2c2.Init.OwnAddress1 = 0;
  13. hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  14. hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  15. hi2c2.Init.OwnAddress2 = 0;
  16. hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  17. hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  18. HAL_I2C_Init(&hi2c2);
  19. #endif
  20. hi2c2.Instance = I2C2;
  21. hi2c2.Init.Timing = 0x00303D5B;
  22. hi2c2.Init.OwnAddress1 = 0;
  23. hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  24. hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  25. hi2c2.Init.OwnAddress2 = 0;
  26. hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  27. hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  28. hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  29. HAL_I2C_Init(&hi2c2);
  30. HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE);
  31. HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0);
  32. // TODO Разобраться
  33. HAL_I2CEx_EnableFastModePlus(I2C_FASTMODEPLUS_I2C2);
  34. }
  35. //
  36. I2C_HandleTypeDef *i2c_get_bridge(void)
  37. {
  38. return &hi2c2;
  39. }
  40. //
  41. void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
  42. {
  43. GPIO_InitTypeDef GPIO_InitStruct = {0};
  44. HAL_I2C_DeInit(i2cHandle);
  45. if(i2cHandle->Instance==I2C2)
  46. {
  47. __HAL_RCC_GPIOA_CLK_ENABLE();
  48. __HAL_RCC_GPIOC_CLK_ENABLE();
  49. GPIO_InitStruct.Pin = GPIO_PIN_8;
  50. GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  51. GPIO_InitStruct.Pull = GPIO_PULLUP;
  52. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  53. GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;
  54. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  55. GPIO_InitStruct.Pin = GPIO_PIN_4;
  56. GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;
  57. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  58. __HAL_RCC_I2C2_CLK_ENABLE();
  59. }
  60. }
  61. //
  62. void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
  63. {
  64. if(i2cHandle->Instance==I2C2)
  65. {
  66. __HAL_RCC_I2C2_CLK_DISABLE();
  67. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_8);
  68. HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4);
  69. }
  70. }