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

Last change on this file was 108, checked in by Zed, 4 months ago

Fixing project.

File size: 9.7 KB
Line 
1/* USER CODE BEGIN Header */
2/**
3  ******************************************************************************
4  * @file    spi.c
5  * @brief   This file provides code for the configuration
6  *          of the SPI instances.
7  ******************************************************************************
8  * @attention
9  *
10  * Copyright (c) 2024 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 "spi.h"
22
23/* USER CODE BEGIN 0 */
24
25/* USER CODE END 0 */
26
27SPI_HandleTypeDef hspi2;
28SPI_HandleTypeDef hspi4;
29DMA_HandleTypeDef hdma_spi2_rx;
30DMA_HandleTypeDef hdma_spi2_tx;
31DMA_HandleTypeDef hdma_spi4_tx;
32
33/* SPI2 init function */
34void MX_SPI2_Init(void)
35{
36
37  /* USER CODE BEGIN SPI2_Init 0 */
38
39  /* USER CODE END SPI2_Init 0 */
40
41  /* USER CODE BEGIN SPI2_Init 1 */
42
43  /* USER CODE END SPI2_Init 1 */
44  hspi2.Instance = SPI2;
45  hspi2.Init.Mode = SPI_MODE_MASTER;
46  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
47  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
48  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
49  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
50  hspi2.Init.NSS = SPI_NSS_SOFT;
51  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
52  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
53  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
54  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
55  hspi2.Init.CRCPolynomial = 0x0;
56  hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
57  hspi2.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
58  hspi2.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
59  hspi2.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
60  hspi2.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
61  hspi2.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
62  hspi2.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_01CYCLE;
63  hspi2.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
64  hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
65  hspi2.Init.IOSwap = SPI_IO_SWAP_DISABLE;
66  if (HAL_SPI_Init(&hspi2) != HAL_OK)
67  {
68    Error_Handler();
69  }
70  /* USER CODE BEGIN SPI2_Init 2 */
71
72  /* USER CODE END SPI2_Init 2 */
73
74}
75/* SPI4 init function */
76void MX_SPI4_Init(void)
77{
78
79  /* USER CODE BEGIN SPI4_Init 0 */
80
81  // This SPI module is used to control the Display
82
83  /* USER CODE END SPI4_Init 0 */
84
85  /* USER CODE BEGIN SPI4_Init 1 */
86
87  /* USER CODE END SPI4_Init 1 */
88  hspi4.Instance = SPI4;
89  hspi4.Init.Mode = SPI_MODE_MASTER;
90  hspi4.Init.Direction = SPI_DIRECTION_1LINE;
91  hspi4.Init.DataSize = SPI_DATASIZE_9BIT;
92  hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
93  hspi4.Init.CLKPhase = SPI_PHASE_1EDGE;
94  hspi4.Init.NSS = SPI_NSS_HARD_OUTPUT;
95  hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
96  hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
97  hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
98  hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
99  hspi4.Init.CRCPolynomial = 0x0;
100  hspi4.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
101  hspi4.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
102  hspi4.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
103  hspi4.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
104  hspi4.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
105  hspi4.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
106  hspi4.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_02CYCLE;
107  hspi4.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
108  hspi4.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
109  hspi4.Init.IOSwap = SPI_IO_SWAP_DISABLE;
110  if (HAL_SPI_Init(&hspi4) != HAL_OK)
111  {
112    Error_Handler();
113  }
114  /* USER CODE BEGIN SPI4_Init 2 */
115
116  /* USER CODE END SPI4_Init 2 */
117
118}
119
120void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
121{
122
123  GPIO_InitTypeDef GPIO_InitStruct = {0};
124  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
125  if(spiHandle->Instance==SPI2)
126  {
127  /* USER CODE BEGIN SPI2_MspInit 0 */
128
129  /* USER CODE END SPI2_MspInit 0 */
130
131    /* SPI2 clock enable */
132    __HAL_RCC_SPI2_CLK_ENABLE();
133
134    __HAL_RCC_GPIOB_CLK_ENABLE();
135    /**SPI2 GPIO Configuration
136    PB10     ------> SPI2_SCK
137    PB14     ------> SPI2_MISO
138    PB15     ------> SPI2_MOSI
139    */
140    GPIO_InitStruct.Pin = ETH_SPI_SCK_Pin|ETH_SPI_MISO_Pin|ETH_SPI_MOSI_Pin;
141    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
142    GPIO_InitStruct.Pull = GPIO_NOPULL;
143    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
144    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
145    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
146
147    /* SPI2 DMA Init */
148    /* SPI2_RX Init */
149    hdma_spi2_rx.Instance = DMA1_Stream3;
150    hdma_spi2_rx.Init.Request = DMA_REQUEST_SPI2_RX;
151    hdma_spi2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
152    hdma_spi2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
153    hdma_spi2_rx.Init.MemInc = DMA_MINC_ENABLE;
154    hdma_spi2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
155    hdma_spi2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
156    hdma_spi2_rx.Init.Mode = DMA_NORMAL;
157    hdma_spi2_rx.Init.Priority = DMA_PRIORITY_HIGH;
158    hdma_spi2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
159    if (HAL_DMA_Init(&hdma_spi2_rx) != HAL_OK)
160    {
161      Error_Handler();
162    }
163
164    __HAL_LINKDMA(spiHandle,hdmarx,hdma_spi2_rx);
165
166    /* SPI2_TX Init */
167    hdma_spi2_tx.Instance = DMA1_Stream4;
168    hdma_spi2_tx.Init.Request = DMA_REQUEST_SPI2_TX;
169    hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
170    hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
171    hdma_spi2_tx.Init.MemInc = DMA_MINC_ENABLE;
172    hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
173    hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
174    hdma_spi2_tx.Init.Mode = DMA_NORMAL;
175    hdma_spi2_tx.Init.Priority = DMA_PRIORITY_HIGH;
176    hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
177    if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK)
178    {
179      Error_Handler();
180    }
181
182    __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi2_tx);
183
184    /* SPI2 interrupt Init */
185    HAL_NVIC_SetPriority(SPI2_IRQn, 5, 0);
186    HAL_NVIC_EnableIRQ(SPI2_IRQn);
187  /* USER CODE BEGIN SPI2_MspInit 1 */
188
189  /* USER CODE END SPI2_MspInit 1 */
190  }
191  else if(spiHandle->Instance==SPI4)
192  {
193  /* USER CODE BEGIN SPI4_MspInit 0 */
194
195  /* USER CODE END SPI4_MspInit 0 */
196
197  /** Initializes the peripherals clock
198  */
199    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI4;
200    PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_HSE;
201    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
202    {
203      Error_Handler();
204    }
205
206    /* SPI4 clock enable */
207    __HAL_RCC_SPI4_CLK_ENABLE();
208
209    __HAL_RCC_GPIOE_CLK_ENABLE();
210    /**SPI4 GPIO Configuration
211    PE11     ------> SPI4_NSS
212    PE12     ------> SPI4_SCK
213    PE14     ------> SPI4_MOSI
214    */
215    GPIO_InitStruct.Pin = DISPLAY_SPI_CS_Pin|DISPLAY_SPI_SCK_Pin|DISPLAY_SPI_MOSI_Pin;
216    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
217    GPIO_InitStruct.Pull = GPIO_NOPULL;
218    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
219    GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;
220    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
221
222    /* SPI4 DMA Init */
223    /* SPI4_TX Init */
224    hdma_spi4_tx.Instance = DMA1_Stream0;
225    hdma_spi4_tx.Init.Request = DMA_REQUEST_SPI4_TX;
226    hdma_spi4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
227    hdma_spi4_tx.Init.PeriphInc = DMA_PINC_DISABLE;
228    hdma_spi4_tx.Init.MemInc = DMA_MINC_ENABLE;
229    hdma_spi4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
230    hdma_spi4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
231    hdma_spi4_tx.Init.Mode = DMA_NORMAL;
232    hdma_spi4_tx.Init.Priority = DMA_PRIORITY_LOW;
233    hdma_spi4_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
234    if (HAL_DMA_Init(&hdma_spi4_tx) != HAL_OK)
235    {
236      Error_Handler();
237    }
238
239    __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi4_tx);
240
241    /* SPI4 interrupt Init */
242    HAL_NVIC_SetPriority(SPI4_IRQn, 5, 0);
243    HAL_NVIC_EnableIRQ(SPI4_IRQn);
244  /* USER CODE BEGIN SPI4_MspInit 1 */
245
246  /* USER CODE END SPI4_MspInit 1 */
247  }
248}
249
250void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
251{
252
253  if(spiHandle->Instance==SPI2)
254  {
255  /* USER CODE BEGIN SPI2_MspDeInit 0 */
256
257  /* USER CODE END SPI2_MspDeInit 0 */
258    /* Peripheral clock disable */
259    __HAL_RCC_SPI2_CLK_DISABLE();
260
261    /**SPI2 GPIO Configuration
262    PB10     ------> SPI2_SCK
263    PB14     ------> SPI2_MISO
264    PB15     ------> SPI2_MOSI
265    */
266    HAL_GPIO_DeInit(GPIOB, ETH_SPI_SCK_Pin|ETH_SPI_MISO_Pin|ETH_SPI_MOSI_Pin);
267
268    /* SPI2 DMA DeInit */
269    HAL_DMA_DeInit(spiHandle->hdmarx);
270    HAL_DMA_DeInit(spiHandle->hdmatx);
271
272    /* SPI2 interrupt Deinit */
273    HAL_NVIC_DisableIRQ(SPI2_IRQn);
274  /* USER CODE BEGIN SPI2_MspDeInit 1 */
275
276  /* USER CODE END SPI2_MspDeInit 1 */
277  }
278  else if(spiHandle->Instance==SPI4)
279  {
280  /* USER CODE BEGIN SPI4_MspDeInit 0 */
281
282  /* USER CODE END SPI4_MspDeInit 0 */
283    /* Peripheral clock disable */
284    __HAL_RCC_SPI4_CLK_DISABLE();
285
286    /**SPI4 GPIO Configuration
287    PE11     ------> SPI4_NSS
288    PE12     ------> SPI4_SCK
289    PE14     ------> SPI4_MOSI
290    */
291    HAL_GPIO_DeInit(GPIOE, DISPLAY_SPI_CS_Pin|DISPLAY_SPI_SCK_Pin|DISPLAY_SPI_MOSI_Pin);
292
293    /* SPI4 DMA DeInit */
294    HAL_DMA_DeInit(spiHandle->hdmatx);
295
296    /* SPI4 interrupt Deinit */
297    HAL_NVIC_DisableIRQ(SPI4_IRQn);
298  /* USER CODE BEGIN SPI4_MspDeInit 1 */
299
300  /* USER CODE END SPI4_MspDeInit 1 */
301  }
302}
303
304/* USER CODE BEGIN 1 */
305
306/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.