i2c_bridge.cpp 2.2 KB

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