i2c_bridge.cpp 2.1 KB

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