source: trunk/firmware/CubeMX/Src/i2c.c@ 4

Last change on this file since 4 was 1, checked in by f.jahn, 3 years ago
File size: 4.8 KB
Line 
1/**
2 ******************************************************************************
3 * File Name : I2C.c
4 * Description : This file provides code for the configuration
5 * of the I2C instances.
6 ******************************************************************************
7 * @attention
8 *
9 * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
10 * All rights reserved.</center></h2>
11 *
12 * This software component is licensed by ST under BSD 3-Clause license,
13 * the "License"; You may not use this file except in compliance with the
14 * License. You may obtain a copy of the License at:
15 * opensource.org/licenses/BSD-3-Clause
16 *
17 ******************************************************************************
18 */
19
20/* Includes ------------------------------------------------------------------*/
21#include "i2c.h"
22
23/* USER CODE BEGIN 0 */
24
25/* USER CODE END 0 */
26
27I2C_HandleTypeDef hi2c1;
28DMA_HandleTypeDef hdma_i2c1_tx;
29DMA_HandleTypeDef hdma_i2c1_rx;
30
31/* I2C1 init function */
32void MX_I2C1_Init(void)
33{
34
35 hi2c1.Instance = I2C1;
36 hi2c1.Init.Timing = 0x10C71026;
37 hi2c1.Init.OwnAddress1 = 254;
38 hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
39 hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
40 hi2c1.Init.OwnAddress2 = 0;
41 hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
42 hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
43 hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
44 if (HAL_I2C_Init(&hi2c1) != HAL_OK)
45 {
46 Error_Handler();
47 }
48 /** Configure Analogue filter
49 */
50 if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
51 {
52 Error_Handler();
53 }
54 /** Configure Digital filter
55 */
56 if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
57 {
58 Error_Handler();
59 }
60
61}
62
63void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
64{
65
66 GPIO_InitTypeDef GPIO_InitStruct = {0};
67 if(i2cHandle->Instance==I2C1)
68 {
69 /* USER CODE BEGIN I2C1_MspInit 0 */
70
71 /* USER CODE END I2C1_MspInit 0 */
72
73 __HAL_RCC_GPIOB_CLK_ENABLE();
74 /**I2C1 GPIO Configuration
75 PB6 ------> I2C1_SCL
76 PB7 ------> I2C1_SDA
77 */
78 GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
79 GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
80 GPIO_InitStruct.Pull = GPIO_PULLUP;
81 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
82 GPIO_InitStruct.Alternate = GPIO_AF6_I2C1;
83 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
84
85 /* I2C1 clock enable */
86 __HAL_RCC_I2C1_CLK_ENABLE();
87
88 /* I2C1 DMA Init */
89 /* I2C1_TX Init */
90 hdma_i2c1_tx.Instance = DMA1_Channel1;
91 hdma_i2c1_tx.Init.Request = DMA_REQUEST_I2C1_TX;
92 hdma_i2c1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
93 hdma_i2c1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
94 hdma_i2c1_tx.Init.MemInc = DMA_MINC_ENABLE;
95 hdma_i2c1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
96 hdma_i2c1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
97 hdma_i2c1_tx.Init.Mode = DMA_NORMAL;
98 hdma_i2c1_tx.Init.Priority = DMA_PRIORITY_LOW;
99 if (HAL_DMA_Init(&hdma_i2c1_tx) != HAL_OK)
100 {
101 Error_Handler();
102 }
103
104 __HAL_LINKDMA(i2cHandle,hdmatx,hdma_i2c1_tx);
105
106 /* I2C1_RX Init */
107 hdma_i2c1_rx.Instance = DMA1_Channel2;
108 hdma_i2c1_rx.Init.Request = DMA_REQUEST_I2C1_RX;
109 hdma_i2c1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
110 hdma_i2c1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
111 hdma_i2c1_rx.Init.MemInc = DMA_MINC_ENABLE;
112 hdma_i2c1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
113 hdma_i2c1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
114 hdma_i2c1_rx.Init.Mode = DMA_NORMAL;
115 hdma_i2c1_rx.Init.Priority = DMA_PRIORITY_HIGH;
116 if (HAL_DMA_Init(&hdma_i2c1_rx) != HAL_OK)
117 {
118 Error_Handler();
119 }
120
121 __HAL_LINKDMA(i2cHandle,hdmarx,hdma_i2c1_rx);
122
123 /* I2C1 interrupt Init */
124 HAL_NVIC_SetPriority(I2C1_IRQn, 0, 0);
125 HAL_NVIC_EnableIRQ(I2C1_IRQn);
126 /* USER CODE BEGIN I2C1_MspInit 1 */
127
128 /* USER CODE END I2C1_MspInit 1 */
129 }
130}
131
132void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
133{
134
135 if(i2cHandle->Instance==I2C1)
136 {
137 /* USER CODE BEGIN I2C1_MspDeInit 0 */
138
139 /* USER CODE END I2C1_MspDeInit 0 */
140 /* Peripheral clock disable */
141 __HAL_RCC_I2C1_CLK_DISABLE();
142
143 /**I2C1 GPIO Configuration
144 PB6 ------> I2C1_SCL
145 PB7 ------> I2C1_SDA
146 */
147 HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6);
148
149 HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7);
150
151 /* I2C1 DMA DeInit */
152 HAL_DMA_DeInit(i2cHandle->hdmatx);
153 HAL_DMA_DeInit(i2cHandle->hdmarx);
154
155 /* I2C1 interrupt Deinit */
156 HAL_NVIC_DisableIRQ(I2C1_IRQn);
157 /* USER CODE BEGIN I2C1_MspDeInit 1 */
158
159 /* USER CODE END I2C1_MspDeInit 1 */
160 }
161}
162
163/* USER CODE BEGIN 1 */
164
165/* USER CODE END 1 */
166
167/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Note: See TracBrowser for help on using the repository browser.