source: ctrl/firmware/Main/CubeMX/Core/Src/i2c.c

Last change on this file was 89, checked in by Zed, 3 months ago

Added basic I2C EEPROM support.

File size: 6.3 KB
Line 
1/* USER CODE BEGIN Header */
2/**
3  ******************************************************************************
4  * @file    i2c.c
5  * @brief   This file provides code for the configuration
6  *          of the I2C instances.
7  ******************************************************************************
8  * @attention
9  *
10  * Copyright (c) 2025 STMicroelectronics.
11  * All rights reserved.
12  *
13  * This software is licensed under terms that can be found in the LICENSE file
14  * in the root directory of this software component.
15  * If no LICENSE file comes with this software, it is provided AS-IS.
16  *
17  ******************************************************************************
18  */
19/* USER CODE END Header */
20/* Includes ------------------------------------------------------------------*/
21#include "i2c.h"
22
23/* USER CODE BEGIN 0 */
24
25/* USER CODE END 0 */
26
27I2C_HandleTypeDef hi2c1;
28I2C_HandleTypeDef hi2c2;
29
30/* I2C1 init function */
31void MX_I2C1_Init(void)
32{
33
34  /* USER CODE BEGIN I2C1_Init 0 */
35
36  /* USER CODE END I2C1_Init 0 */
37
38  /* USER CODE BEGIN I2C1_Init 1 */
39
40  /* USER CODE END I2C1_Init 1 */
41  hi2c1.Instance = I2C1;
42  hi2c1.Init.Timing = 0x10707DBC;
43  hi2c1.Init.OwnAddress1 = 0;
44  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
45  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
46  hi2c1.Init.OwnAddress2 = 0;
47  hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
48  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
49  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
50  if (HAL_I2C_Init(&hi2c1) != HAL_OK)
51  {
52    Error_Handler();
53  }
54
55  /** Configure Analogue filter
56  */
57  if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
58  {
59    Error_Handler();
60  }
61
62  /** Configure Digital filter
63  */
64  if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
65  {
66    Error_Handler();
67  }
68  /* USER CODE BEGIN I2C1_Init 2 */
69
70  /* USER CODE END I2C1_Init 2 */
71
72}
73/* I2C2 init function */
74void MX_I2C2_Init(void)
75{
76
77  /* USER CODE BEGIN I2C2_Init 0 */
78
79  /* USER CODE END I2C2_Init 0 */
80
81  /* USER CODE BEGIN I2C2_Init 1 */
82
83  /* USER CODE END I2C2_Init 1 */
84  hi2c2.Instance = I2C2;
85  hi2c2.Init.Timing = 0x00300B29;
86  hi2c2.Init.OwnAddress1 = 0;
87  hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
88  hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
89  hi2c2.Init.OwnAddress2 = 0;
90  hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
91  hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
92  hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
93  if (HAL_I2C_Init(&hi2c2) != HAL_OK)
94  {
95    Error_Handler();
96  }
97
98  /** Configure Analogue filter
99  */
100  if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
101  {
102    Error_Handler();
103  }
104
105  /** Configure Digital filter
106  */
107  if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)
108  {
109    Error_Handler();
110  }
111
112  /** I2C Enable Fast Mode Plus
113  */
114  HAL_I2CEx_EnableFastModePlus(I2C_FASTMODEPLUS_I2C2);
115  /* USER CODE BEGIN I2C2_Init 2 */
116
117  /* USER CODE END I2C2_Init 2 */
118
119}
120
121void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
122{
123
124  GPIO_InitTypeDef GPIO_InitStruct = {0};
125  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
126  if(i2cHandle->Instance==I2C1)
127  {
128  /* USER CODE BEGIN I2C1_MspInit 0 */
129
130  /* USER CODE END I2C1_MspInit 0 */
131
132  /** Initializes the peripherals clock
133  */
134    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C1;
135    PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C1235CLKSOURCE_HSI;
136    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
137    {
138      Error_Handler();
139    }
140
141    __HAL_RCC_GPIOB_CLK_ENABLE();
142    /**I2C1 GPIO Configuration
143    PB6     ------> I2C1_SCL
144    PB7     ------> I2C1_SDA
145    */
146    GPIO_InitStruct.Pin = BME_I2C_SCL_Pin|BME_I2C_SDA_Pin;
147    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
148    GPIO_InitStruct.Pull = GPIO_NOPULL;
149    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
150    GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
151    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
152
153    /* I2C1 clock enable */
154    __HAL_RCC_I2C1_CLK_ENABLE();
155  /* USER CODE BEGIN I2C1_MspInit 1 */
156
157  /* USER CODE END I2C1_MspInit 1 */
158  }
159  else if(i2cHandle->Instance==I2C2)
160  {
161  /* USER CODE BEGIN I2C2_MspInit 0 */
162
163  /* USER CODE END I2C2_MspInit 0 */
164
165  /** Initializes the peripherals clock
166  */
167    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C2;
168    PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C1235CLKSOURCE_HSI;
169    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
170    {
171      Error_Handler();
172    }
173
174    __HAL_RCC_GPIOF_CLK_ENABLE();
175    /**I2C2 GPIO Configuration
176    PF0     ------> I2C2_SDA
177    PF1     ------> I2C2_SCL
178    */
179    GPIO_InitStruct.Pin = EEPROM_I2C_SDA_Pin|EEPROM_I2C_SCL_Pin;
180    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
181    GPIO_InitStruct.Pull = GPIO_NOPULL;
182    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
183    GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;
184    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
185
186    /* I2C2 clock enable */
187    __HAL_RCC_I2C2_CLK_ENABLE();
188  /* USER CODE BEGIN I2C2_MspInit 1 */
189
190  /* USER CODE END I2C2_MspInit 1 */
191  }
192}
193
194void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
195{
196
197  if(i2cHandle->Instance==I2C1)
198  {
199  /* USER CODE BEGIN I2C1_MspDeInit 0 */
200
201  /* USER CODE END I2C1_MspDeInit 0 */
202    /* Peripheral clock disable */
203    __HAL_RCC_I2C1_CLK_DISABLE();
204
205    /**I2C1 GPIO Configuration
206    PB6     ------> I2C1_SCL
207    PB7     ------> I2C1_SDA
208    */
209    HAL_GPIO_DeInit(BME_I2C_SCL_GPIO_Port, BME_I2C_SCL_Pin);
210
211    HAL_GPIO_DeInit(BME_I2C_SDA_GPIO_Port, BME_I2C_SDA_Pin);
212
213  /* USER CODE BEGIN I2C1_MspDeInit 1 */
214
215  /* USER CODE END I2C1_MspDeInit 1 */
216  }
217  else if(i2cHandle->Instance==I2C2)
218  {
219  /* USER CODE BEGIN I2C2_MspDeInit 0 */
220
221  /* USER CODE END I2C2_MspDeInit 0 */
222    /* Peripheral clock disable */
223    __HAL_RCC_I2C2_CLK_DISABLE();
224
225    /**I2C2 GPIO Configuration
226    PF0     ------> I2C2_SDA
227    PF1     ------> I2C2_SCL
228    */
229    HAL_GPIO_DeInit(EEPROM_I2C_SDA_GPIO_Port, EEPROM_I2C_SDA_Pin);
230
231    HAL_GPIO_DeInit(EEPROM_I2C_SCL_GPIO_Port, EEPROM_I2C_SCL_Pin);
232
233  /* USER CODE BEGIN I2C2_MspDeInit 1 */
234
235  /* USER CODE END I2C2_MspDeInit 1 */
236  }
237}
238
239/* USER CODE BEGIN 1 */
240
241/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.