2 ******************************************************************************
3 * @file stm32f3xx_hal_irda_ex.h
4 * @author MCD Application Team
7 * @brief Header file of IRDA HAL Extended module.
8 ******************************************************************************
11 * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
13 * Redistribution and use in source and binary forms, with or without modification,
14 * are permitted provided that the following conditions are met:
15 * 1. Redistributions of source code must retain the above copyright notice,
16 * this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright notice,
18 * this list of conditions and the following disclaimer in the documentation
19 * and/or other materials provided with the distribution.
20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 ******************************************************************************
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F3xx_HAL_IRDA_EX_H
40 #define __STM32F3xx_HAL_IRDA_EX_H
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f3xx_hal_def.h"
49 /** @addtogroup STM32F3xx_HAL_Driver
53 /** @addtogroup IRDAEx IRDA Extended HAL module driver
57 /* Exported types ------------------------------------------------------------*/
58 /* Exported constants --------------------------------------------------------*/
59 /** @defgroup IRDAEx_Exported_Constants IRDA Extended Exported Constants
63 /** @defgroup IRDAEx_Word_Length IRDA Extended Word Length
66 #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || \
67 defined(STM32F334x8) || \
68 defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
69 #define IRDA_WORDLENGTH_7B ((uint32_t)USART_CR1_M1)
70 #define IRDA_WORDLENGTH_8B ((uint32_t)0x00000000)
71 #define IRDA_WORDLENGTH_9B ((uint32_t)USART_CR1_M0)
72 #define IS_IRDA_WORD_LENGTH(LENGTH) (((LENGTH) == IRDA_WORDLENGTH_7B) || \
73 ((LENGTH) == IRDA_WORDLENGTH_8B) || \
74 ((LENGTH) == IRDA_WORDLENGTH_9B))
76 #define IRDA_WORDLENGTH_8B ((uint32_t)0x00000000)
77 #define IRDA_WORDLENGTH_9B ((uint32_t)USART_CR1_M)
78 #define IS_IRDA_WORD_LENGTH(LENGTH) (((LENGTH) == IRDA_WORDLENGTH_8B) || \
79 ((LENGTH) == IRDA_WORDLENGTH_9B))
80 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
82 /* STM32F301x8 || STM32F302x8 || STM32F318xx */
92 /* Exported macros -----------------------------------------------------------*/
94 /** @defgroup IRDAEx_Exported_Macros IRDA Extended Exported Macros
98 /** @brief Reports the IRDA clock source.
99 * @param __HANDLE__: specifies the IRDA Handle
100 * @param __CLOCKSOURCE__ : output variable
101 * @retval IRDA clocking source, written in __CLOCKSOURCE__.
103 #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || \
104 defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)
105 #define __HAL_IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
107 if((__HANDLE__)->Instance == USART1) \
109 switch(__HAL_RCC_GET_USART1_SOURCE()) \
111 case RCC_USART1CLKSOURCE_PCLK2: \
112 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2; \
114 case RCC_USART1CLKSOURCE_HSI: \
115 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
117 case RCC_USART1CLKSOURCE_SYSCLK: \
118 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
120 case RCC_USART1CLKSOURCE_LSE: \
121 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
125 else if((__HANDLE__)->Instance == USART2) \
127 switch(__HAL_RCC_GET_USART2_SOURCE()) \
129 case RCC_USART2CLKSOURCE_PCLK1: \
130 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
132 case RCC_USART2CLKSOURCE_HSI: \
133 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
135 case RCC_USART2CLKSOURCE_SYSCLK: \
136 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
138 case RCC_USART2CLKSOURCE_LSE: \
139 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
143 else if((__HANDLE__)->Instance == USART3) \
145 switch(__HAL_RCC_GET_USART3_SOURCE()) \
147 case RCC_USART3CLKSOURCE_PCLK1: \
148 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
150 case RCC_USART3CLKSOURCE_HSI: \
151 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
153 case RCC_USART3CLKSOURCE_SYSCLK: \
154 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
156 case RCC_USART3CLKSOURCE_LSE: \
157 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
161 else if((__HANDLE__)->Instance == UART4) \
163 switch(__HAL_RCC_GET_UART4_SOURCE()) \
165 case RCC_UART4CLKSOURCE_PCLK1: \
166 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
168 case RCC_UART4CLKSOURCE_HSI: \
169 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
171 case RCC_UART4CLKSOURCE_SYSCLK: \
172 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
174 case RCC_UART4CLKSOURCE_LSE: \
175 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
179 else if ((__HANDLE__)->Instance == UART5) \
181 switch(__HAL_RCC_GET_UART5_SOURCE()) \
183 case RCC_UART5CLKSOURCE_PCLK1: \
184 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
186 case RCC_UART5CLKSOURCE_HSI: \
187 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
189 case RCC_UART5CLKSOURCE_SYSCLK: \
190 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
192 case RCC_UART5CLKSOURCE_LSE: \
193 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
198 #elif defined(STM32F303x8) || defined(STM32F334x8) ||defined(STM32F328xx)
199 #define __HAL_IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
201 if((__HANDLE__)->Instance == USART1) \
203 switch(__HAL_RCC_GET_USART1_SOURCE()) \
205 case RCC_USART1CLKSOURCE_PCLK1: \
206 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
208 case RCC_USART1CLKSOURCE_HSI: \
209 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
211 case RCC_USART1CLKSOURCE_SYSCLK: \
212 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
214 case RCC_USART1CLKSOURCE_LSE: \
215 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
219 else if((__HANDLE__)->Instance == USART2) \
221 switch(__HAL_RCC_GET_USART2_SOURCE()) \
223 case RCC_USART2CLKSOURCE_PCLK1: \
224 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
226 case RCC_USART2CLKSOURCE_HSI: \
227 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
229 case RCC_USART2CLKSOURCE_SYSCLK: \
230 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
232 case RCC_USART2CLKSOURCE_LSE: \
233 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
237 else if((__HANDLE__)->Instance == USART3) \
239 switch(__HAL_RCC_GET_USART3_SOURCE()) \
241 case RCC_USART3CLKSOURCE_PCLK1: \
242 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
244 case RCC_USART3CLKSOURCE_HSI: \
245 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
247 case RCC_USART3CLKSOURCE_SYSCLK: \
248 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
250 case RCC_USART3CLKSOURCE_LSE: \
251 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
257 #define __HAL_IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
259 if((__HANDLE__)->Instance == USART1) \
261 switch(__HAL_RCC_GET_USART1_SOURCE()) \
263 case RCC_USART1CLKSOURCE_PCLK2: \
264 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2; \
266 case RCC_USART1CLKSOURCE_HSI: \
267 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
269 case RCC_USART1CLKSOURCE_SYSCLK: \
270 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
272 case RCC_USART1CLKSOURCE_LSE: \
273 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
277 else if((__HANDLE__)->Instance == USART2) \
279 switch(__HAL_RCC_GET_USART2_SOURCE()) \
281 case RCC_USART2CLKSOURCE_PCLK1: \
282 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
284 case RCC_USART2CLKSOURCE_HSI: \
285 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
287 case RCC_USART2CLKSOURCE_SYSCLK: \
288 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
290 case RCC_USART2CLKSOURCE_LSE: \
291 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
295 else if((__HANDLE__)->Instance == USART3) \
297 switch(__HAL_RCC_GET_USART3_SOURCE()) \
299 case RCC_USART3CLKSOURCE_PCLK1: \
300 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
302 case RCC_USART3CLKSOURCE_HSI: \
303 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
305 case RCC_USART3CLKSOURCE_SYSCLK: \
306 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
308 case RCC_USART3CLKSOURCE_LSE: \
309 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
314 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
315 /* STM32F302xC || STM32F303xC || STM32F358xx || */
318 /** @brief Computes the mask to apply to retrieve the received data
319 * according to the word length and to the parity bits activation.
320 * @param __HANDLE__: specifies the IRDA Handle
323 #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || \
324 defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || \
326 #define __HAL_IRDA_MASK_COMPUTATION(__HANDLE__) \
328 if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B) \
330 if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
332 (__HANDLE__)->Mask = 0x01FF ; \
336 (__HANDLE__)->Mask = 0x00FF ; \
339 else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B) \
341 if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
343 (__HANDLE__)->Mask = 0x00FF ; \
347 (__HANDLE__)->Mask = 0x007F ; \
350 else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B) \
352 if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
354 (__HANDLE__)->Mask = 0x007F ; \
358 (__HANDLE__)->Mask = 0x003F ; \
363 #define __HAL_IRDA_MASK_COMPUTATION(__HANDLE__) \
365 if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B) \
367 if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
369 (__HANDLE__)->Mask = 0x01FF ; \
373 (__HANDLE__)->Mask = 0x00FF ; \
376 else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B) \
378 if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
380 (__HANDLE__)->Mask = 0x00FF ; \
384 (__HANDLE__)->Mask = 0x007F ; \
388 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
389 /* STM32F301x8 || STM32F302x8 || STM32F318xx || */
395 /* Exported functions --------------------------------------------------------*/
396 /* Initialization and de-initialization functions ****************************/
397 /* IO operation functions *****************************************************/
398 /* Peripheral Control functions ***********************************************/
399 /* Peripheral State and Error functions ***************************************/
413 #endif /* __STM32F3xx_HAL_IRDA_EX_H */
415 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/