You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

651 lines
37 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32h7xx_hal_irda_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of IRDA HAL Extended module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2017 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. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef STM32H7xx_HAL_IRDA_EX_H
  21. #define STM32H7xx_HAL_IRDA_EX_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /* Includes ------------------------------------------------------------------*/
  26. #include "stm32h7xx_hal_def.h"
  27. /** @addtogroup STM32H7xx_HAL_Driver
  28. * @{
  29. */
  30. /** @defgroup IRDAEx IRDAEx
  31. * @brief IRDA Extended HAL module driver
  32. * @{
  33. */
  34. /* Exported types ------------------------------------------------------------*/
  35. /* Exported constants --------------------------------------------------------*/
  36. /** @defgroup IRDAEx_Extended_Exported_Constants IRDAEx Extended Exported Constants
  37. * @{
  38. */
  39. /** @defgroup IRDAEx_Word_Length IRDAEx Word Length
  40. * @{
  41. */
  42. #define IRDA_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long frame */
  43. #define IRDA_WORDLENGTH_8B 0x00000000U /*!< 8-bit long frame */
  44. #define IRDA_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long frame */
  45. /**
  46. * @}
  47. */
  48. /**
  49. * @}
  50. */
  51. /* Exported macros -----------------------------------------------------------*/
  52. /* Private macros ------------------------------------------------------------*/
  53. /** @defgroup IRDAEx_Private_Macros IRDAEx Private Macros
  54. * @{
  55. */
  56. /** @brief Report the IRDA clock source.
  57. * @param __HANDLE__ specifies the IRDA Handle.
  58. * @param __CLOCKSOURCE__ output variable.
  59. * @retval IRDA clocking source, written in __CLOCKSOURCE__.
  60. */
  61. #if defined(UART9) && defined(USART10)
  62. #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  63. do { \
  64. if((__HANDLE__)->Instance == USART1) \
  65. { \
  66. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  67. { \
  68. case RCC_USART1CLKSOURCE_D2PCLK2: \
  69. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2; \
  70. break; \
  71. case RCC_USART1CLKSOURCE_PLL2: \
  72. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  73. break; \
  74. case RCC_USART1CLKSOURCE_PLL3: \
  75. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  76. break; \
  77. case RCC_USART1CLKSOURCE_HSI: \
  78. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  79. break; \
  80. case RCC_USART1CLKSOURCE_CSI: \
  81. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  82. break; \
  83. case RCC_USART1CLKSOURCE_LSE: \
  84. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  85. break; \
  86. default: \
  87. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  88. break; \
  89. } \
  90. } \
  91. else if((__HANDLE__)->Instance == USART2) \
  92. { \
  93. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  94. { \
  95. case RCC_USART2CLKSOURCE_D2PCLK1: \
  96. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  97. break; \
  98. case RCC_USART2CLKSOURCE_PLL2: \
  99. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  100. break; \
  101. case RCC_USART2CLKSOURCE_PLL3: \
  102. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  103. break; \
  104. case RCC_USART2CLKSOURCE_HSI: \
  105. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  106. break; \
  107. case RCC_USART2CLKSOURCE_CSI: \
  108. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  109. break; \
  110. case RCC_USART2CLKSOURCE_LSE: \
  111. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  112. break; \
  113. default: \
  114. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  115. break; \
  116. } \
  117. } \
  118. else if((__HANDLE__)->Instance == USART3) \
  119. { \
  120. switch(__HAL_RCC_GET_USART3_SOURCE()) \
  121. { \
  122. case RCC_USART3CLKSOURCE_D2PCLK1: \
  123. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  124. break; \
  125. case RCC_USART3CLKSOURCE_PLL2: \
  126. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  127. break; \
  128. case RCC_USART3CLKSOURCE_PLL3: \
  129. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  130. break; \
  131. case RCC_USART3CLKSOURCE_HSI: \
  132. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  133. break; \
  134. case RCC_USART3CLKSOURCE_CSI: \
  135. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  136. break; \
  137. case RCC_USART3CLKSOURCE_LSE: \
  138. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  139. break; \
  140. default: \
  141. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  142. break; \
  143. } \
  144. } \
  145. else if((__HANDLE__)->Instance == UART4) \
  146. { \
  147. switch(__HAL_RCC_GET_UART4_SOURCE()) \
  148. { \
  149. case RCC_UART4CLKSOURCE_D2PCLK1: \
  150. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  151. break; \
  152. case RCC_UART4CLKSOURCE_PLL2: \
  153. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  154. break; \
  155. case RCC_UART4CLKSOURCE_PLL3: \
  156. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  157. break; \
  158. case RCC_UART4CLKSOURCE_HSI: \
  159. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  160. break; \
  161. case RCC_UART4CLKSOURCE_CSI: \
  162. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  163. break; \
  164. case RCC_UART4CLKSOURCE_LSE: \
  165. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  166. break; \
  167. default: \
  168. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  169. break; \
  170. } \
  171. } \
  172. else if ((__HANDLE__)->Instance == UART5) \
  173. { \
  174. switch(__HAL_RCC_GET_UART5_SOURCE()) \
  175. { \
  176. case RCC_UART5CLKSOURCE_D2PCLK1: \
  177. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  178. break; \
  179. case RCC_UART5CLKSOURCE_PLL2: \
  180. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  181. break; \
  182. case RCC_UART5CLKSOURCE_PLL3: \
  183. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  184. break; \
  185. case RCC_UART5CLKSOURCE_HSI: \
  186. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  187. break; \
  188. case RCC_UART5CLKSOURCE_CSI: \
  189. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  190. break; \
  191. case RCC_UART5CLKSOURCE_LSE: \
  192. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  193. break; \
  194. default: \
  195. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  196. break; \
  197. } \
  198. } \
  199. else if((__HANDLE__)->Instance == USART6) \
  200. { \
  201. switch(__HAL_RCC_GET_USART6_SOURCE()) \
  202. { \
  203. case RCC_USART6CLKSOURCE_D2PCLK2: \
  204. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2; \
  205. break; \
  206. case RCC_USART6CLKSOURCE_PLL2: \
  207. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  208. break; \
  209. case RCC_USART6CLKSOURCE_PLL3: \
  210. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  211. break; \
  212. case RCC_USART6CLKSOURCE_HSI: \
  213. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  214. break; \
  215. case RCC_USART6CLKSOURCE_CSI: \
  216. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  217. break; \
  218. case RCC_USART6CLKSOURCE_LSE: \
  219. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  220. break; \
  221. default: \
  222. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  223. break; \
  224. } \
  225. } \
  226. else if((__HANDLE__)->Instance == UART7) \
  227. { \
  228. switch(__HAL_RCC_GET_UART7_SOURCE()) \
  229. { \
  230. case RCC_UART7CLKSOURCE_D2PCLK1: \
  231. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  232. break; \
  233. case RCC_UART7CLKSOURCE_PLL2: \
  234. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  235. break; \
  236. case RCC_UART7CLKSOURCE_PLL3: \
  237. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  238. break; \
  239. case RCC_UART7CLKSOURCE_HSI: \
  240. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  241. break; \
  242. case RCC_UART7CLKSOURCE_CSI: \
  243. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  244. break; \
  245. case RCC_UART7CLKSOURCE_LSE: \
  246. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  247. break; \
  248. default: \
  249. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  250. break; \
  251. } \
  252. } \
  253. else if((__HANDLE__)->Instance == UART8) \
  254. { \
  255. switch(__HAL_RCC_GET_UART8_SOURCE()) \
  256. { \
  257. case RCC_UART8CLKSOURCE_D2PCLK1: \
  258. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  259. break; \
  260. case RCC_UART8CLKSOURCE_PLL2: \
  261. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  262. break; \
  263. case RCC_UART8CLKSOURCE_PLL3: \
  264. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  265. break; \
  266. case RCC_UART8CLKSOURCE_HSI: \
  267. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  268. break; \
  269. case RCC_UART8CLKSOURCE_CSI: \
  270. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  271. break; \
  272. case RCC_UART8CLKSOURCE_LSE: \
  273. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  274. break; \
  275. default: \
  276. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  277. break; \
  278. } \
  279. } \
  280. else if((__HANDLE__)->Instance == UART9) \
  281. { \
  282. switch(__HAL_RCC_GET_UART9_SOURCE()) \
  283. { \
  284. case RCC_UART9CLKSOURCE_D2PCLK2: \
  285. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2; \
  286. break; \
  287. case RCC_UART9CLKSOURCE_PLL2: \
  288. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  289. break; \
  290. case RCC_UART9CLKSOURCE_PLL3: \
  291. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  292. break; \
  293. case RCC_UART9CLKSOURCE_HSI: \
  294. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  295. break; \
  296. case RCC_UART9CLKSOURCE_CSI: \
  297. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  298. break; \
  299. case RCC_UART9CLKSOURCE_LSE: \
  300. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  301. break; \
  302. default: \
  303. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  304. break; \
  305. } \
  306. } \
  307. else if((__HANDLE__)->Instance == USART10) \
  308. { \
  309. switch(__HAL_RCC_GET_USART10_SOURCE()) \
  310. { \
  311. case RCC_USART10CLKSOURCE_D2PCLK2: \
  312. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2; \
  313. break; \
  314. case RCC_USART10CLKSOURCE_PLL2: \
  315. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  316. break; \
  317. case RCC_USART10CLKSOURCE_PLL3: \
  318. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  319. break; \
  320. case RCC_USART10CLKSOURCE_HSI: \
  321. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  322. break; \
  323. case RCC_USART10CLKSOURCE_CSI: \
  324. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  325. break; \
  326. case RCC_USART10CLKSOURCE_LSE: \
  327. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  328. break; \
  329. default: \
  330. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  331. break; \
  332. } \
  333. } \
  334. else \
  335. { \
  336. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  337. } \
  338. } while(0U)
  339. #else
  340. #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  341. do { \
  342. if((__HANDLE__)->Instance == USART1) \
  343. { \
  344. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  345. { \
  346. case RCC_USART1CLKSOURCE_D2PCLK2: \
  347. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2; \
  348. break; \
  349. case RCC_USART1CLKSOURCE_PLL2: \
  350. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  351. break; \
  352. case RCC_USART1CLKSOURCE_PLL3: \
  353. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  354. break; \
  355. case RCC_USART1CLKSOURCE_HSI: \
  356. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  357. break; \
  358. case RCC_USART1CLKSOURCE_CSI: \
  359. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  360. break; \
  361. case RCC_USART1CLKSOURCE_LSE: \
  362. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  363. break; \
  364. default: \
  365. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  366. break; \
  367. } \
  368. } \
  369. else if((__HANDLE__)->Instance == USART2) \
  370. { \
  371. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  372. { \
  373. case RCC_USART2CLKSOURCE_D2PCLK1: \
  374. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  375. break; \
  376. case RCC_USART2CLKSOURCE_PLL2: \
  377. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  378. break; \
  379. case RCC_USART2CLKSOURCE_PLL3: \
  380. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  381. break; \
  382. case RCC_USART2CLKSOURCE_HSI: \
  383. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  384. break; \
  385. case RCC_USART2CLKSOURCE_CSI: \
  386. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  387. break; \
  388. case RCC_USART2CLKSOURCE_LSE: \
  389. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  390. break; \
  391. default: \
  392. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  393. break; \
  394. } \
  395. } \
  396. else if((__HANDLE__)->Instance == USART3) \
  397. { \
  398. switch(__HAL_RCC_GET_USART3_SOURCE()) \
  399. { \
  400. case RCC_USART3CLKSOURCE_D2PCLK1: \
  401. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  402. break; \
  403. case RCC_USART3CLKSOURCE_PLL2: \
  404. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  405. break; \
  406. case RCC_USART3CLKSOURCE_PLL3: \
  407. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  408. break; \
  409. case RCC_USART3CLKSOURCE_HSI: \
  410. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  411. break; \
  412. case RCC_USART3CLKSOURCE_CSI: \
  413. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  414. break; \
  415. case RCC_USART3CLKSOURCE_LSE: \
  416. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  417. break; \
  418. default: \
  419. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  420. break; \
  421. } \
  422. } \
  423. else if((__HANDLE__)->Instance == UART4) \
  424. { \
  425. switch(__HAL_RCC_GET_UART4_SOURCE()) \
  426. { \
  427. case RCC_UART4CLKSOURCE_D2PCLK1: \
  428. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  429. break; \
  430. case RCC_UART4CLKSOURCE_PLL2: \
  431. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  432. break; \
  433. case RCC_UART4CLKSOURCE_PLL3: \
  434. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  435. break; \
  436. case RCC_UART4CLKSOURCE_HSI: \
  437. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  438. break; \
  439. case RCC_UART4CLKSOURCE_CSI: \
  440. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  441. break; \
  442. case RCC_UART4CLKSOURCE_LSE: \
  443. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  444. break; \
  445. default: \
  446. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  447. break; \
  448. } \
  449. } \
  450. else if ((__HANDLE__)->Instance == UART5) \
  451. { \
  452. switch(__HAL_RCC_GET_UART5_SOURCE()) \
  453. { \
  454. case RCC_UART5CLKSOURCE_D2PCLK1: \
  455. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  456. break; \
  457. case RCC_UART5CLKSOURCE_PLL2: \
  458. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  459. break; \
  460. case RCC_UART5CLKSOURCE_PLL3: \
  461. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  462. break; \
  463. case RCC_UART5CLKSOURCE_HSI: \
  464. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  465. break; \
  466. case RCC_UART5CLKSOURCE_CSI: \
  467. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  468. break; \
  469. case RCC_UART5CLKSOURCE_LSE: \
  470. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  471. break; \
  472. default: \
  473. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  474. break; \
  475. } \
  476. } \
  477. else if((__HANDLE__)->Instance == USART6) \
  478. { \
  479. switch(__HAL_RCC_GET_USART6_SOURCE()) \
  480. { \
  481. case RCC_USART6CLKSOURCE_D2PCLK2: \
  482. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2; \
  483. break; \
  484. case RCC_USART6CLKSOURCE_PLL2: \
  485. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  486. break; \
  487. case RCC_USART6CLKSOURCE_PLL3: \
  488. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  489. break; \
  490. case RCC_USART6CLKSOURCE_HSI: \
  491. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  492. break; \
  493. case RCC_USART6CLKSOURCE_CSI: \
  494. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  495. break; \
  496. case RCC_USART6CLKSOURCE_LSE: \
  497. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  498. break; \
  499. default: \
  500. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  501. break; \
  502. } \
  503. } \
  504. else if((__HANDLE__)->Instance == UART7) \
  505. { \
  506. switch(__HAL_RCC_GET_UART7_SOURCE()) \
  507. { \
  508. case RCC_UART7CLKSOURCE_D2PCLK1: \
  509. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  510. break; \
  511. case RCC_UART7CLKSOURCE_PLL2: \
  512. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  513. break; \
  514. case RCC_UART7CLKSOURCE_PLL3: \
  515. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  516. break; \
  517. case RCC_UART7CLKSOURCE_HSI: \
  518. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  519. break; \
  520. case RCC_UART7CLKSOURCE_CSI: \
  521. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  522. break; \
  523. case RCC_UART7CLKSOURCE_LSE: \
  524. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  525. break; \
  526. default: \
  527. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  528. break; \
  529. } \
  530. } \
  531. else if((__HANDLE__)->Instance == UART8) \
  532. { \
  533. switch(__HAL_RCC_GET_UART8_SOURCE()) \
  534. { \
  535. case RCC_UART8CLKSOURCE_D2PCLK1: \
  536. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1; \
  537. break; \
  538. case RCC_UART8CLKSOURCE_PLL2: \
  539. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q; \
  540. break; \
  541. case RCC_UART8CLKSOURCE_PLL3: \
  542. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q; \
  543. break; \
  544. case RCC_UART8CLKSOURCE_HSI: \
  545. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  546. break; \
  547. case RCC_UART8CLKSOURCE_CSI: \
  548. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI; \
  549. break; \
  550. case RCC_UART8CLKSOURCE_LSE: \
  551. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  552. break; \
  553. default: \
  554. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  555. break; \
  556. } \
  557. } \
  558. else \
  559. { \
  560. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  561. } \
  562. } while(0U)
  563. #endif /* UART9 && USART10 */
  564. /** @brief Compute the mask to apply to retrieve the received data
  565. * according to the word length and to the parity bits activation.
  566. * @param __HANDLE__ specifies the IRDA Handle.
  567. * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field.
  568. */
  569. #define IRDA_MASK_COMPUTATION(__HANDLE__) \
  570. do { \
  571. if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B) \
  572. { \
  573. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  574. { \
  575. (__HANDLE__)->Mask = 0x01FFU ; \
  576. } \
  577. else \
  578. { \
  579. (__HANDLE__)->Mask = 0x00FFU ; \
  580. } \
  581. } \
  582. else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B) \
  583. { \
  584. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  585. { \
  586. (__HANDLE__)->Mask = 0x00FFU ; \
  587. } \
  588. else \
  589. { \
  590. (__HANDLE__)->Mask = 0x007FU ; \
  591. } \
  592. } \
  593. else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B) \
  594. { \
  595. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  596. { \
  597. (__HANDLE__)->Mask = 0x007FU ; \
  598. } \
  599. else \
  600. { \
  601. (__HANDLE__)->Mask = 0x003FU ; \
  602. } \
  603. } \
  604. else \
  605. { \
  606. (__HANDLE__)->Mask = 0x0000U; \
  607. } \
  608. } while(0U)
  609. /** @brief Ensure that IRDA frame length is valid.
  610. * @param __LENGTH__ IRDA frame length.
  611. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
  612. */
  613. #define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \
  614. ((__LENGTH__) == IRDA_WORDLENGTH_8B) || \
  615. ((__LENGTH__) == IRDA_WORDLENGTH_9B))
  616. /**
  617. * @}
  618. */
  619. /* Exported functions --------------------------------------------------------*/
  620. /**
  621. * @}
  622. */
  623. /**
  624. * @}
  625. */
  626. #ifdef __cplusplus
  627. }
  628. #endif
  629. #endif /* STM32H7xx_HAL_IRDA_EX_H */
  630. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/