xref: /btstack/port/stm32-f4discovery-cc256x/Src/usart.c (revision 225f4ba4fe806afeda1ee8519bb5f4a8ce540af2)
1 /**
2   ******************************************************************************
3   * File Name          : USART.c
4   * Description        : This file provides code for the configuration
5   *                      of the USART instances.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2019 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 "usart.h"
22 
23 /* USER CODE BEGIN 0 */
24 
25 /* USER CODE END 0 */
26 
27 UART_HandleTypeDef huart2;
28 UART_HandleTypeDef huart3;
29 DMA_HandleTypeDef hdma_usart3_rx;
30 DMA_HandleTypeDef hdma_usart3_tx;
31 
32 /* USART2 init function */
33 
MX_USART2_UART_Init(void)34 void MX_USART2_UART_Init(void)
35 {
36 
37   huart2.Instance = USART2;
38   huart2.Init.BaudRate = 115200;
39   huart2.Init.WordLength = UART_WORDLENGTH_8B;
40   huart2.Init.StopBits = UART_STOPBITS_1;
41   huart2.Init.Parity = UART_PARITY_NONE;
42   huart2.Init.Mode = UART_MODE_TX_RX;
43   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
44   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
45   if (HAL_UART_Init(&huart2) != HAL_OK)
46   {
47     Error_Handler();
48   }
49 
50 }
51 /* USART3 init function */
52 
MX_USART3_UART_Init(void)53 void MX_USART3_UART_Init(void)
54 {
55 
56   huart3.Instance = USART3;
57   huart3.Init.BaudRate = 115200;
58   huart3.Init.WordLength = UART_WORDLENGTH_8B;
59   huart3.Init.StopBits = UART_STOPBITS_1;
60   huart3.Init.Parity = UART_PARITY_NONE;
61   huart3.Init.Mode = UART_MODE_TX_RX;
62   huart3.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
63   huart3.Init.OverSampling = UART_OVERSAMPLING_8;
64   if (HAL_UART_Init(&huart3) != HAL_OK)
65   {
66     Error_Handler();
67   }
68 
69 }
70 
HAL_UART_MspInit(UART_HandleTypeDef * uartHandle)71 void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
72 {
73 
74   GPIO_InitTypeDef GPIO_InitStruct = {0};
75   if(uartHandle->Instance==USART2)
76   {
77   /* USER CODE BEGIN USART2_MspInit 0 */
78 
79   /* USER CODE END USART2_MspInit 0 */
80     /* USART2 clock enable */
81     __HAL_RCC_USART2_CLK_ENABLE();
82 
83     __HAL_RCC_GPIOA_CLK_ENABLE();
84     /**USART2 GPIO Configuration
85     PA2     ------> USART2_TX
86     PA3     ------> USART2_RX
87     */
88     GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
89     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
90     GPIO_InitStruct.Pull = GPIO_PULLUP;
91     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
92     GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
93     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
94 
95     /* USART2 interrupt Init */
96     HAL_NVIC_SetPriority(USART2_IRQn, 15, 0);
97     HAL_NVIC_EnableIRQ(USART2_IRQn);
98   /* USER CODE BEGIN USART2_MspInit 1 */
99 
100   /* USER CODE END USART2_MspInit 1 */
101   }
102   else if(uartHandle->Instance==USART3)
103   {
104   /* USER CODE BEGIN USART3_MspInit 0 */
105 
106   /* USER CODE END USART3_MspInit 0 */
107     /* USART3 clock enable */
108     __HAL_RCC_USART3_CLK_ENABLE();
109 
110     __HAL_RCC_GPIOD_CLK_ENABLE();
111     /**USART3 GPIO Configuration
112     PD8     ------> USART3_TX
113     PD9     ------> USART3_RX
114     PD11     ------> USART3_CTS
115     PD12     ------> USART3_RTS
116     */
117     GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
118     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
119     GPIO_InitStruct.Pull = GPIO_PULLUP;
120     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
121     GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
122     HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
123 
124     GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
125     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
126     GPIO_InitStruct.Pull = GPIO_NOPULL;
127     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
128     GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
129     HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
130 
131     /* USART3 DMA Init */
132     /* USART3_RX Init */
133     hdma_usart3_rx.Instance = DMA1_Stream1;
134     hdma_usart3_rx.Init.Channel = DMA_CHANNEL_4;
135     hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
136     hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
137     hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
138     hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
139     hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
140     hdma_usart3_rx.Init.Mode = DMA_NORMAL;
141     hdma_usart3_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
142     hdma_usart3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
143     if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK)
144     {
145       Error_Handler();
146     }
147 
148     __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx);
149 
150     /* USART3_TX Init */
151     hdma_usart3_tx.Instance = DMA1_Stream4;
152     hdma_usart3_tx.Init.Channel = DMA_CHANNEL_7;
153     hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
154     hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
155     hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
156     hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
157     hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
158     hdma_usart3_tx.Init.Mode = DMA_NORMAL;
159     hdma_usart3_tx.Init.Priority = DMA_PRIORITY_MEDIUM;
160     hdma_usart3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
161     if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK)
162     {
163       Error_Handler();
164     }
165 
166     __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx);
167 
168     /* USART3 interrupt Init */
169     HAL_NVIC_SetPriority(USART3_IRQn, 1, 0);
170     HAL_NVIC_EnableIRQ(USART3_IRQn);
171   /* USER CODE BEGIN USART3_MspInit 1 */
172 
173   /* USER CODE END USART3_MspInit 1 */
174   }
175 }
176 
HAL_UART_MspDeInit(UART_HandleTypeDef * uartHandle)177 void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
178 {
179 
180   if(uartHandle->Instance==USART2)
181   {
182   /* USER CODE BEGIN USART2_MspDeInit 0 */
183 
184   /* USER CODE END USART2_MspDeInit 0 */
185     /* Peripheral clock disable */
186     __HAL_RCC_USART2_CLK_DISABLE();
187 
188     /**USART2 GPIO Configuration
189     PA2     ------> USART2_TX
190     PA3     ------> USART2_RX
191     */
192     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
193 
194     /* USART2 interrupt Deinit */
195     HAL_NVIC_DisableIRQ(USART2_IRQn);
196   /* USER CODE BEGIN USART2_MspDeInit 1 */
197 
198   /* USER CODE END USART2_MspDeInit 1 */
199   }
200   else if(uartHandle->Instance==USART3)
201   {
202   /* USER CODE BEGIN USART3_MspDeInit 0 */
203 
204   /* USER CODE END USART3_MspDeInit 0 */
205     /* Peripheral clock disable */
206     __HAL_RCC_USART3_CLK_DISABLE();
207 
208     /**USART3 GPIO Configuration
209     PD8     ------> USART3_TX
210     PD9     ------> USART3_RX
211     PD11     ------> USART3_CTS
212     PD12     ------> USART3_RTS
213     */
214     HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12);
215 
216     /* USART3 DMA DeInit */
217     HAL_DMA_DeInit(uartHandle->hdmarx);
218     HAL_DMA_DeInit(uartHandle->hdmatx);
219 
220     /* USART3 interrupt Deinit */
221     HAL_NVIC_DisableIRQ(USART3_IRQn);
222   /* USER CODE BEGIN USART3_MspDeInit 1 */
223 
224   /* USER CODE END USART3_MspDeInit 1 */
225   }
226 }
227 
228 /* USER CODE BEGIN 1 */
229 
230 /* USER CODE END 1 */
231 
232 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
233