stm32g4xx_hal_irda_ex.h 36 KB

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