source: trunk/fw_g473rct/Core/Src/usart.c

Last change on this file was 23, checked in by f.jahn, 4 months ago

modbus via DMA still BETA, aber bautratenumschaltung implementiert

File size: 8.4 KB
Line 
1/* USER CODE BEGIN Header */
2/**
3 ******************************************************************************
4 * @file usart.c
5 * @brief This file provides code for the configuration
6 * of the USART 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 "usart.h"
22
23/* USER CODE BEGIN 0 */
24
25/* USER CODE END 0 */
26
27UART_HandleTypeDef huart1;
28UART_HandleTypeDef huart2;
29DMA_HandleTypeDef hdma_usart2_rx;
30DMA_HandleTypeDef hdma_usart2_tx;
31
32/* USART1 init function */
33
34void MX_USART1_UART_Init(void)
35{
36
37 /* USER CODE BEGIN USART1_Init 0 */
38
39 /* USER CODE END USART1_Init 0 */
40
41 /* USER CODE BEGIN USART1_Init 1 */
42
43 /* USER CODE END USART1_Init 1 */
44 huart1.Instance = USART1;
45 huart1.Init.BaudRate = 19200;
46 huart1.Init.WordLength = UART_WORDLENGTH_8B;
47 huart1.Init.StopBits = UART_STOPBITS_1;
48 huart1.Init.Parity = UART_PARITY_EVEN;
49 huart1.Init.Mode = UART_MODE_TX_RX;
50 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
51 huart1.Init.OverSampling = UART_OVERSAMPLING_16;
52 huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
53 huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
54 huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
55 if (HAL_UART_Init(&huart1) != HAL_OK)
56 {
57 Error_Handler();
58 }
59 if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
60 {
61 Error_Handler();
62 }
63 if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
64 {
65 Error_Handler();
66 }
67 if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
68 {
69 Error_Handler();
70 }
71 /* USER CODE BEGIN USART1_Init 2 */
72
73 /* USER CODE END USART1_Init 2 */
74
75}
76/* USART2 init function */
77
78void MX_USART2_UART_Init(void)
79{
80
81 /* USER CODE BEGIN USART2_Init 0 */
82
83 /* USER CODE END USART2_Init 0 */
84
85 /* USER CODE BEGIN USART2_Init 1 */
86
87 /* USER CODE END USART2_Init 1 */
88 huart2.Instance = USART2;
89 huart2.Init.BaudRate = 19200;
90 huart2.Init.WordLength = UART_WORDLENGTH_9B;
91 huart2.Init.StopBits = UART_STOPBITS_1;
92 huart2.Init.Parity = UART_PARITY_EVEN;
93 huart2.Init.Mode = UART_MODE_TX_RX;
94 huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
95 huart2.Init.OverSampling = UART_OVERSAMPLING_16;
96 huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
97 huart2.Init.ClockPrescaler = UART_PRESCALER_DIV1;
98 huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_SWAP_INIT;
99 huart2.AdvancedInit.Swap = UART_ADVFEATURE_SWAP_ENABLE;
100 if (HAL_UART_Init(&huart2) != HAL_OK)
101 {
102 Error_Handler();
103 }
104 if (HAL_UARTEx_SetTxFifoThreshold(&huart2, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
105 {
106 Error_Handler();
107 }
108 if (HAL_UARTEx_SetRxFifoThreshold(&huart2, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
109 {
110 Error_Handler();
111 }
112 if (HAL_UARTEx_DisableFifoMode(&huart2) != HAL_OK)
113 {
114 Error_Handler();
115 }
116 /* USER CODE BEGIN USART2_Init 2 */
117
118 /* USER CODE END USART2_Init 2 */
119
120}
121
122void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
123{
124
125 GPIO_InitTypeDef GPIO_InitStruct = {0};
126 RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
127 if(uartHandle->Instance==USART1)
128 {
129 /* USER CODE BEGIN USART1_MspInit 0 */
130
131 /* USER CODE END USART1_MspInit 0 */
132
133 /** Initializes the peripherals clocks
134 */
135 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
136 PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
137 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
138 {
139 Error_Handler();
140 }
141
142 /* USART1 clock enable */
143 __HAL_RCC_USART1_CLK_ENABLE();
144
145 __HAL_RCC_GPIOC_CLK_ENABLE();
146 /**USART1 GPIO Configuration
147 PC4 ------> USART1_TX
148 PC5 ------> USART1_RX
149 */
150 GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
151 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
152 GPIO_InitStruct.Pull = GPIO_NOPULL;
153 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
154 GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
155 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
156
157 /* USART1 interrupt Init */
158 HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
159 HAL_NVIC_EnableIRQ(USART1_IRQn);
160 /* USER CODE BEGIN USART1_MspInit 1 */
161
162 /* USER CODE END USART1_MspInit 1 */
163 }
164 else if(uartHandle->Instance==USART2)
165 {
166 /* USER CODE BEGIN USART2_MspInit 0 */
167
168 /* USER CODE END USART2_MspInit 0 */
169
170 /** Initializes the peripherals clocks
171 */
172 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;
173 PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
174 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
175 {
176 Error_Handler();
177 }
178
179 /* USART2 clock enable */
180 __HAL_RCC_USART2_CLK_ENABLE();
181
182 __HAL_RCC_GPIOA_CLK_ENABLE();
183 /**USART2 GPIO Configuration
184 PA2 ------> USART2_TX
185 PA3 ------> USART2_RX
186 */
187 GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
188 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
189 GPIO_InitStruct.Pull = GPIO_NOPULL;
190 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
191 GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
192 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
193
194 /* USART2 DMA Init */
195 /* USART2_RX Init */
196 hdma_usart2_rx.Instance = DMA1_Channel6;
197 hdma_usart2_rx.Init.Request = DMA_REQUEST_USART2_RX;
198 hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
199 hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
200 hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
201 hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
202 hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
203 hdma_usart2_rx.Init.Mode = DMA_NORMAL;
204 hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
205 if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
206 {
207 Error_Handler();
208 }
209
210 __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);
211
212 /* USART2_TX Init */
213 hdma_usart2_tx.Instance = DMA1_Channel7;
214 hdma_usart2_tx.Init.Request = DMA_REQUEST_USART2_TX;
215 hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
216 hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
217 hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
218 hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
219 hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
220 hdma_usart2_tx.Init.Mode = DMA_NORMAL;
221 hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
222 if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
223 {
224 Error_Handler();
225 }
226
227 __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
228
229 /* USART2 interrupt Init */
230 HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
231 HAL_NVIC_EnableIRQ(USART2_IRQn);
232 /* USER CODE BEGIN USART2_MspInit 1 */
233
234 /* USER CODE END USART2_MspInit 1 */
235 }
236}
237
238void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
239{
240
241 if(uartHandle->Instance==USART1)
242 {
243 /* USER CODE BEGIN USART1_MspDeInit 0 */
244
245 /* USER CODE END USART1_MspDeInit 0 */
246 /* Peripheral clock disable */
247 __HAL_RCC_USART1_CLK_DISABLE();
248
249 /**USART1 GPIO Configuration
250 PC4 ------> USART1_TX
251 PC5 ------> USART1_RX
252 */
253 HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4|GPIO_PIN_5);
254
255 /* USART1 interrupt Deinit */
256 HAL_NVIC_DisableIRQ(USART1_IRQn);
257 /* USER CODE BEGIN USART1_MspDeInit 1 */
258
259 /* USER CODE END USART1_MspDeInit 1 */
260 }
261 else if(uartHandle->Instance==USART2)
262 {
263 /* USER CODE BEGIN USART2_MspDeInit 0 */
264
265 /* USER CODE END USART2_MspDeInit 0 */
266 /* Peripheral clock disable */
267 __HAL_RCC_USART2_CLK_DISABLE();
268
269 /**USART2 GPIO Configuration
270 PA2 ------> USART2_TX
271 PA3 ------> USART2_RX
272 */
273 HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
274
275 /* USART2 DMA DeInit */
276 HAL_DMA_DeInit(uartHandle->hdmarx);
277 HAL_DMA_DeInit(uartHandle->hdmatx);
278
279 /* USART2 interrupt Deinit */
280 HAL_NVIC_DisableIRQ(USART2_IRQn);
281 /* USER CODE BEGIN USART2_MspDeInit 1 */
282
283 /* USER CODE END USART2_MspDeInit 1 */
284 }
285}
286
287/* USER CODE BEGIN 1 */
288
289/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.