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.

649 lines
17 KiB

2 years ago
  1. #include "gpio.hpp"
  2. #define TAG "GPIO"
  3. namespace iflytop {
  4. /*******************************************************************************
  5. * LISTENER *
  6. *******************************************************************************/
  7. static STM32_GPIO *s_irqGPIO[20];
  8. int s_irqGPIO_num = 0;
  9. extern "C" {
  10. /**
  11. * @brief This function handles EXTI line3 interrupt.
  12. */
  13. void EXTI0_IRQHandler() { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); }
  14. void EXTI1_IRQHandler() { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); }
  15. void EXTI2_IRQHandler() { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2); }
  16. void EXTI3_IRQHandler() { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3); }
  17. void EXTI4_IRQHandler() { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); }
  18. void EXTI9_5_IRQHandler(void) {
  19. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
  20. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6);
  21. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7);
  22. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
  23. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
  24. }
  25. void EXTI15_10_IRQHandler(void) {
  26. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
  27. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
  28. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
  29. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
  30. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
  31. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
  32. }
  33. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  34. for (int i = 0; i < s_irqGPIO_num; i++) {
  35. s_irqGPIO[i]->tryTriggerIRQ(GPIO_Pin);
  36. }
  37. }
  38. }
  39. void STM32_GPIO::regListener(STM32_GPIO_LISTENER *listener) { m_listener = listener; }
  40. /*******************************************************************************
  41. * GPIOIMPL *
  42. *******************************************************************************/
  43. /*******************************************************************************
  44. * BASE_FUNC *
  45. *******************************************************************************/
  46. bool STM32_GPIO::enableClock() {
  47. #ifdef GPIOA
  48. if (m_gpio == GPIOA) {
  49. __HAL_RCC_GPIOA_CLK_ENABLE();
  50. return true;
  51. }
  52. #endif
  53. #ifdef GPIOB
  54. if (m_gpio == GPIOB) {
  55. __HAL_RCC_GPIOB_CLK_ENABLE();
  56. return true;
  57. }
  58. #endif
  59. #ifdef GPIOC
  60. if (m_gpio == GPIOC) {
  61. __HAL_RCC_GPIOC_CLK_ENABLE();
  62. return true;
  63. }
  64. #endif
  65. #ifdef GPIOD
  66. if (m_gpio == GPIOD) {
  67. __HAL_RCC_GPIOD_CLK_ENABLE();
  68. return true;
  69. }
  70. #endif
  71. #ifdef GPIOE
  72. if (m_gpio == GPIOE) {
  73. __HAL_RCC_GPIOE_CLK_ENABLE();
  74. return true;
  75. }
  76. #endif
  77. #ifdef GPIOF
  78. if (m_gpio == GPIOF) {
  79. __HAL_RCC_GPIOF_CLK_ENABLE();
  80. return true;
  81. }
  82. #endif
  83. #ifdef GPIOG
  84. if (m_gpio == GPIOG) {
  85. __HAL_RCC_GPIOG_CLK_ENABLE();
  86. return true;
  87. }
  88. #endif
  89. #ifdef GPIOH
  90. if (m_gpio == GPIOH) {
  91. __HAL_RCC_GPIOH_CLK_ENABLE();
  92. return true;
  93. }
  94. #endif
  95. #ifdef GPIOI
  96. if (m_gpio == GPIOI) {
  97. __HAL_RCC_GPIOI_CLK_ENABLE();
  98. return true;
  99. }
  100. #endif
  101. #ifdef GPIOJ
  102. if (m_gpio == GPIOJ) {
  103. __HAL_RCC_GPIOJ_CLK_ENABLE();
  104. return true;
  105. }
  106. #endif
  107. #ifdef GPIOK
  108. if (m_gpio == GPIOK) {
  109. __HAL_RCC_GPIOK_CLK_ENABLE();
  110. return true;
  111. }
  112. #endif
  113. return false;
  114. }
  115. void regIRQGPIO(STM32_GPIO *gpio) {
  116. for (int i = 0; i < s_irqGPIO_num; i++) {
  117. if (s_irqGPIO[i] == gpio) {
  118. return;
  119. }
  120. }
  121. ZASSERT((s_irqGPIO_num + 1) < (int)ZARRAY_SIZE(s_irqGPIO));
  122. s_irqGPIO[s_irqGPIO_num] = gpio;
  123. s_irqGPIO_num++;
  124. }
  125. bool STM32_GPIO::isMirror() { return m_mirror; }
  126. void STM32_GPIO::initAsOutput(GPIOMode_t gpiomode, bool mirror, bool initLevel) {
  127. ZASSERT(gpiomode == kOutput_nopull || gpiomode == kOutput_pullup || gpiomode == kOutput_pulldown || gpiomode == kOutput_od);
  128. init(gpiomode, mirror, initLevel);
  129. }
  130. void STM32_GPIO::initAsOutput(bool initLevel) { initAsOutput(kOutput_nopull, false, initLevel); }
  131. void STM32_GPIO::initAsInput(GPIOMode_t gpiomode, bool mirror) {
  132. ZASSERT(gpiomode == kInput_noIrq || gpiomode == kInput_risingIrq || gpiomode == kInput_fallingIrq || gpiomode == kInput_risingAndFallingIrq);
  133. init(gpiomode, mirror, false);
  134. }
  135. void STM32_GPIO::initAsInput() { initAsInput(kInput_noIrq, false); }
  136. void STM32_GPIO::initAsMirrorInput() { init(kInput_noIrq, true, false); }
  137. void STM32_GPIO::init(GPIOMode_t gpiomode, bool mirror, bool initLevel) {
  138. m_mirror = mirror;
  139. m_mode = gpiomode;
  140. enableClock();
  141. GPIO_InitTypeDef m_GPIO_InitStruct = {0};
  142. initLevel = m_mirror ? !initLevel : initLevel;
  143. GPIO_PinState pinState = initLevel ? GPIO_PIN_SET : GPIO_PIN_RESET;
  144. if (m_mode == kOutput_nopull || m_mode == kOutput_pullup || m_mode == kOutput_pulldown || m_mode == kOutput_od) {
  145. HAL_GPIO_WritePin(m_gpio, m_pin, pinState);
  146. }
  147. if (m_mode == kOutput_nopull) {
  148. m_GPIO_InitStruct.Pin = m_pin;
  149. m_GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  150. m_GPIO_InitStruct.Pull = GPIO_NOPULL;
  151. m_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  152. } else if (m_mode == kOutput_pullup) {
  153. m_GPIO_InitStruct.Pin = m_pin;
  154. m_GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  155. m_GPIO_InitStruct.Pull = GPIO_PULLUP;
  156. m_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  157. } else if (m_mode == kOutput_pulldown) {
  158. m_GPIO_InitStruct.Pin = m_pin;
  159. m_GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  160. m_GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  161. m_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  162. } else if (m_mode == kOutput_od) {
  163. m_GPIO_InitStruct.Pin = m_pin;
  164. m_GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  165. m_GPIO_InitStruct.Pull = 0;
  166. m_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  167. } else if (m_mode == kInput_noIrq) {
  168. m_GPIO_InitStruct.Pin = m_pin;
  169. m_GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  170. m_GPIO_InitStruct.Pull = 0;
  171. m_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  172. } else if (m_mode == kInput_risingIrq) {
  173. m_GPIO_InitStruct.Pin = m_pin;
  174. m_GPIO_InitStruct.Mode = m_mirror ? GPIO_MODE_IT_FALLING : GPIO_MODE_IT_RISING;
  175. m_GPIO_InitStruct.Pull = 0;
  176. m_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  177. } else if (m_mode == kInput_fallingIrq) {
  178. m_GPIO_InitStruct.Pin = m_pin;
  179. m_GPIO_InitStruct.Mode = !m_mirror ? GPIO_MODE_IT_FALLING : GPIO_MODE_IT_RISING;
  180. m_GPIO_InitStruct.Pull = 0;
  181. m_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  182. } else if (m_mode == kInput_risingAndFallingIrq) {
  183. m_GPIO_InitStruct.Pin = m_pin;
  184. m_GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  185. m_GPIO_InitStruct.Pull = 0;
  186. m_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  187. }
  188. HAL_GPIO_Init(m_gpio, &m_GPIO_InitStruct);
  189. if (m_mode == kInput_risingIrq || m_mode == kInput_fallingIrq || m_mode == kInput_risingAndFallingIrq) {
  190. regIRQGPIO(this);
  191. lastLevel = getState();
  192. HAL_NVIC_SetPriority(getEXTIIRQn(), 0, 0);
  193. HAL_NVIC_EnableIRQ(getEXTIIRQn());
  194. }
  195. return;
  196. }
  197. bool STM32_GPIO::isItRisingEXITGPIO() { return m_mode == kInput_risingIrq; }
  198. bool STM32_GPIO::isItFallingEXITGPIO() { return m_mode == kInput_fallingIrq; }
  199. bool STM32_GPIO::isItRisingAndItFallingEXITGPIO() { return m_mode == kInput_risingAndFallingIrq; }
  200. /*******************************************************************************
  201. * EXT FUNC *
  202. *******************************************************************************/
  203. /**
  204. * @brief
  205. *
  206. * @param checkloop
  207. * @param GPIO_Pin
  208. * @return true
  209. * @return false
  210. *
  211. * STM32的GPIO中断线是共用的GPIO的即时状态判断是否是这个引脚产生的中断
  212. *
  213. * :
  214. * GPIO_MODE_IT_RISING GPIO_MODE_IT_FALLING
  215. * GPIO_MODE_IT_RISING_FALLING true
  216. */
  217. bool STM32_GPIO::tryTriggerIRQ(uint16_t GPIO_Pin) {
  218. bool ret = false;
  219. bool nostate = false;
  220. if (GPIO_Pin != m_pin) return false;
  221. if (!(isItRisingEXITGPIO() || isItFallingEXITGPIO() || isItRisingAndItFallingEXITGPIO())) {
  222. return false;
  223. }
  224. nostate = getState();
  225. if (isItRisingEXITGPIO()) {
  226. if (nostate) {
  227. ret = true;
  228. if (m_listener) {
  229. m_listener->STM32_GPIO_onIRQ(this, kRisingIrqEvent);
  230. }
  231. }
  232. } else if (isItFallingEXITGPIO()) {
  233. if (!nostate) {
  234. ret = true;
  235. if (m_listener) {
  236. m_listener->STM32_GPIO_onIRQ(this, kFallingIrqEvent);
  237. }
  238. }
  239. } else {
  240. if (lastLevel != nostate) {
  241. ret = true;
  242. if (m_listener) {
  243. if (lastLevel)
  244. m_listener->STM32_GPIO_onIRQ(this, kRisingIrqEvent);
  245. else
  246. m_listener->STM32_GPIO_onIRQ(this, kFallingIrqEvent);
  247. }
  248. }
  249. }
  250. lastLevel = nostate;
  251. return ret;
  252. }
  253. void STM32_GPIO::toggleState() { HAL_GPIO_TogglePin(m_gpio, m_pin); }
  254. uint32_t STM32_GPIO::getStateUint32() {
  255. if (getState())
  256. return 1;
  257. else
  258. return 0;
  259. }
  260. bool STM32_GPIO::getState() {
  261. bool ret = false;
  262. if (HAL_GPIO_ReadPin(m_gpio, m_pin) == GPIO_PIN_SET) {
  263. ret = true;
  264. } else {
  265. ret = false;
  266. }
  267. if (m_mirror) ret = !ret;
  268. return ret;
  269. }
  270. bool STM32_GPIO::setState(bool state) {
  271. if (m_mirror) state = !state;
  272. if (state) {
  273. HAL_GPIO_WritePin(m_gpio, m_pin, GPIO_PIN_SET);
  274. } else {
  275. HAL_GPIO_WritePin(m_gpio, m_pin, GPIO_PIN_RESET);
  276. }
  277. return true;
  278. }
  279. IRQn_Type STM32_GPIO::getEXTIIRQn() {
  280. switch (m_pin) {
  281. case GPIO_PIN_0:
  282. return EXTI0_IRQn;
  283. case GPIO_PIN_1:
  284. return EXTI1_IRQn;
  285. case GPIO_PIN_2:
  286. return EXTI2_IRQn;
  287. case GPIO_PIN_3:
  288. return EXTI3_IRQn;
  289. case GPIO_PIN_4:
  290. return EXTI4_IRQn;
  291. case GPIO_PIN_5:
  292. case GPIO_PIN_6:
  293. case GPIO_PIN_7:
  294. case GPIO_PIN_8:
  295. case GPIO_PIN_9:
  296. return EXTI9_5_IRQn;
  297. case GPIO_PIN_10:
  298. case GPIO_PIN_11:
  299. case GPIO_PIN_12:
  300. case GPIO_PIN_13:
  301. case GPIO_PIN_14:
  302. case GPIO_PIN_15:
  303. return EXTI15_10_IRQn;
  304. default:
  305. ZASSERT(0);
  306. }
  307. return EXTI0_IRQn;
  308. }
  309. /**
  310. * @brief GPIO为中断模式
  311. *
  312. * @param pull GPIO_NOPULL, GPIO_PULLUP, GPIO_PULLDOWN
  313. * @param mode GPIO_MODE_IT_RISING, GPIO_MODE_IT_FALLING, GPIO_MODE_IT_RISING_FALLING
  314. * @return true
  315. * @return false
  316. */
  317. #ifdef GPIOA
  318. #ifdef GPIO_PIN_0
  319. STM32_GPIO PA0("PA0", GPIOA, GPIO_PIN_0);
  320. #endif
  321. #ifdef GPIO_PIN_1
  322. STM32_GPIO PA1("PA1", GPIOA, GPIO_PIN_1);
  323. #endif
  324. #ifdef GPIO_PIN_2
  325. STM32_GPIO PA2("PA2", GPIOA, GPIO_PIN_2);
  326. #endif
  327. #ifdef GPIO_PIN_3
  328. STM32_GPIO PA3("PA3", GPIOA, GPIO_PIN_3);
  329. #endif
  330. #ifdef GPIO_PIN_4
  331. STM32_GPIO PA4("PA4", GPIOA, GPIO_PIN_4);
  332. #endif
  333. #ifdef GPIO_PIN_5
  334. STM32_GPIO PA5("PA5", GPIOA, GPIO_PIN_5);
  335. #endif
  336. #ifdef GPIO_PIN_6
  337. STM32_GPIO PA6("PA6", GPIOA, GPIO_PIN_6);
  338. #endif
  339. #ifdef GPIO_PIN_7
  340. STM32_GPIO PA7("PA7", GPIOA, GPIO_PIN_7);
  341. #endif
  342. #ifdef GPIO_PIN_8
  343. STM32_GPIO PA8("PA8", GPIOA, GPIO_PIN_8);
  344. #endif
  345. #ifdef GPIO_PIN_9
  346. STM32_GPIO PA9("PA9", GPIOA, GPIO_PIN_9);
  347. #endif
  348. #ifdef GPIO_PIN_10
  349. STM32_GPIO PA10("PA10", GPIOA, GPIO_PIN_10);
  350. #endif
  351. #ifdef GPIO_PIN_11
  352. STM32_GPIO PA11("PA11", GPIOA, GPIO_PIN_11);
  353. #endif
  354. #ifdef GPIO_PIN_12
  355. STM32_GPIO PA12("PA12", GPIOA, GPIO_PIN_12);
  356. #endif
  357. #ifdef GPIO_PIN_13
  358. STM32_GPIO PA13("PA13", GPIOA, GPIO_PIN_13);
  359. #endif
  360. #ifdef GPIO_PIN_14
  361. STM32_GPIO PA14("PA14", GPIOA, GPIO_PIN_14);
  362. #endif
  363. #ifdef GPIO_PIN_15
  364. STM32_GPIO PA15("PA15", GPIOA, GPIO_PIN_15);
  365. #endif
  366. #endif
  367. #ifdef GPIOB
  368. #ifdef GPIO_PIN_0
  369. STM32_GPIO PB0("PB0", GPIOB, GPIO_PIN_0);
  370. #endif
  371. #ifdef GPIO_PIN_1
  372. STM32_GPIO PB1("PB1", GPIOB, GPIO_PIN_1);
  373. #endif
  374. #ifdef GPIO_PIN_2
  375. STM32_GPIO PB2("PB2", GPIOB, GPIO_PIN_2);
  376. #endif
  377. #ifdef GPIO_PIN_3
  378. STM32_GPIO PB3("PB3", GPIOB, GPIO_PIN_3);
  379. #endif
  380. #ifdef GPIO_PIN_4
  381. STM32_GPIO PB4("PB4", GPIOB, GPIO_PIN_4);
  382. #endif
  383. #ifdef GPIO_PIN_5
  384. STM32_GPIO PB5("PB5", GPIOB, GPIO_PIN_5);
  385. #endif
  386. #ifdef GPIO_PIN_6
  387. STM32_GPIO PB6("PB6", GPIOB, GPIO_PIN_6);
  388. #endif
  389. #ifdef GPIO_PIN_7
  390. STM32_GPIO PB7("PB7", GPIOB, GPIO_PIN_7);
  391. #endif
  392. #ifdef GPIO_PIN_8
  393. STM32_GPIO PB8("PB8", GPIOB, GPIO_PIN_8);
  394. #endif
  395. #ifdef GPIO_PIN_9
  396. STM32_GPIO PB9("PB9", GPIOB, GPIO_PIN_9);
  397. #endif
  398. #ifdef GPIO_PIN_10
  399. STM32_GPIO PB10("PB10", GPIOB, GPIO_PIN_10);
  400. #endif
  401. #ifdef GPIO_PIN_11
  402. STM32_GPIO PB11("PB11", GPIOB, GPIO_PIN_11);
  403. #endif
  404. #ifdef GPIO_PIN_12
  405. STM32_GPIO PB12("PB12", GPIOB, GPIO_PIN_12);
  406. #endif
  407. #ifdef GPIO_PIN_13
  408. STM32_GPIO PB13("PB13", GPIOB, GPIO_PIN_13);
  409. #endif
  410. #ifdef GPIO_PIN_14
  411. STM32_GPIO PB14("PB14", GPIOB, GPIO_PIN_14);
  412. #endif
  413. #ifdef GPIO_PIN_15
  414. STM32_GPIO PB15("PB15", GPIOB, GPIO_PIN_15);
  415. #endif
  416. #endif
  417. #ifdef GPIOC
  418. #ifdef GPIO_PIN_0
  419. STM32_GPIO PC0("PC0", GPIOC, GPIO_PIN_0);
  420. #endif
  421. #ifdef GPIO_PIN_1
  422. STM32_GPIO PC1("PC1", GPIOC, GPIO_PIN_1);
  423. #endif
  424. #ifdef GPIO_PIN_2
  425. STM32_GPIO PC2("PC2", GPIOC, GPIO_PIN_2);
  426. #endif
  427. #ifdef GPIO_PIN_3
  428. STM32_GPIO PC3("PC3", GPIOC, GPIO_PIN_3);
  429. #endif
  430. #ifdef GPIO_PIN_4
  431. STM32_GPIO PC4("PC4", GPIOC, GPIO_PIN_4);
  432. #endif
  433. #ifdef GPIO_PIN_5
  434. STM32_GPIO PC5("PC5", GPIOC, GPIO_PIN_5);
  435. #endif
  436. #ifdef GPIO_PIN_6
  437. STM32_GPIO PC6("PC6", GPIOC, GPIO_PIN_6);
  438. #endif
  439. #ifdef GPIO_PIN_7
  440. STM32_GPIO PC7("PC7", GPIOC, GPIO_PIN_7);
  441. #endif
  442. #ifdef GPIO_PIN_8
  443. STM32_GPIO PC8("PC8", GPIOC, GPIO_PIN_8);
  444. #endif
  445. #ifdef GPIO_PIN_9
  446. STM32_GPIO PC9("PC9", GPIOC, GPIO_PIN_9);
  447. #endif
  448. #ifdef GPIO_PIN_10
  449. STM32_GPIO PC10("PC10", GPIOC, GPIO_PIN_10);
  450. #endif
  451. #ifdef GPIO_PIN_11
  452. STM32_GPIO PC11("PC11", GPIOC, GPIO_PIN_11);
  453. #endif
  454. #ifdef GPIO_PIN_12
  455. STM32_GPIO PC12("PC12", GPIOC, GPIO_PIN_12);
  456. #endif
  457. #ifdef GPIO_PIN_13
  458. STM32_GPIO PC13("PC13", GPIOC, GPIO_PIN_13);
  459. #endif
  460. #ifdef GPIO_PIN_14
  461. STM32_GPIO PC14("PC14", GPIOC, GPIO_PIN_14);
  462. #endif
  463. #ifdef GPIO_PIN_15
  464. STM32_GPIO PC15("PC15", GPIOC, GPIO_PIN_15);
  465. #endif
  466. #endif
  467. #ifdef GPIOD
  468. #ifdef GPIO_PIN_0
  469. STM32_GPIO PD0("PD0", GPIOD, GPIO_PIN_0);
  470. #endif
  471. #ifdef GPIO_PIN_1
  472. STM32_GPIO PD1("PD1", GPIOD, GPIO_PIN_1);
  473. #endif
  474. #ifdef GPIO_PIN_2
  475. STM32_GPIO PD2("PD2", GPIOD, GPIO_PIN_2);
  476. #endif
  477. #ifdef GPIO_PIN_3
  478. STM32_GPIO PD3("PD3", GPIOD, GPIO_PIN_3);
  479. #endif
  480. #ifdef GPIO_PIN_4
  481. STM32_GPIO PD4("PD4", GPIOD, GPIO_PIN_4);
  482. #endif
  483. #ifdef GPIO_PIN_5
  484. STM32_GPIO PD5("PD5", GPIOD, GPIO_PIN_5);
  485. #endif
  486. #ifdef GPIO_PIN_6
  487. STM32_GPIO PD6("PD6", GPIOD, GPIO_PIN_6);
  488. #endif
  489. #ifdef GPIO_PIN_7
  490. STM32_GPIO PD7("PD7", GPIOD, GPIO_PIN_7);
  491. #endif
  492. #ifdef GPIO_PIN_8
  493. STM32_GPIO PD8("PD8", GPIOD, GPIO_PIN_8);
  494. #endif
  495. #ifdef GPIO_PIN_9
  496. STM32_GPIO PD9("PD9", GPIOD, GPIO_PIN_9);
  497. #endif
  498. #ifdef GPIO_PIN_10
  499. STM32_GPIO PD10("PD10", GPIOD, GPIO_PIN_10);
  500. #endif
  501. #ifdef GPIO_PIN_11
  502. STM32_GPIO PD11("PD11", GPIOD, GPIO_PIN_11);
  503. #endif
  504. #ifdef GPIO_PIN_12
  505. STM32_GPIO PD12("PD12", GPIOD, GPIO_PIN_12);
  506. #endif
  507. #ifdef GPIO_PIN_13
  508. STM32_GPIO PD13("PD13", GPIOD, GPIO_PIN_13);
  509. #endif
  510. #ifdef GPIO_PIN_14
  511. STM32_GPIO PD14("PD14", GPIOD, GPIO_PIN_14);
  512. #endif
  513. #ifdef GPIO_PIN_15
  514. STM32_GPIO PD15("PD15", GPIOD, GPIO_PIN_15);
  515. #endif
  516. #endif
  517. #ifdef GPIOE
  518. #ifdef GPIO_PIN_0
  519. STM32_GPIO PE0("PE0", GPIOE, GPIO_PIN_0);
  520. #endif
  521. #ifdef GPIO_PIN_1
  522. STM32_GPIO PE1("PE1", GPIOE, GPIO_PIN_1);
  523. #endif
  524. #ifdef GPIO_PIN_2
  525. STM32_GPIO PE2("PE2", GPIOE, GPIO_PIN_2);
  526. #endif
  527. #ifdef GPIO_PIN_3
  528. STM32_GPIO PE3("PE3", GPIOE, GPIO_PIN_3);
  529. #endif
  530. #ifdef GPIO_PIN_4
  531. STM32_GPIO PE4("PE4", GPIOE, GPIO_PIN_4);
  532. #endif
  533. #ifdef GPIO_PIN_5
  534. STM32_GPIO PE5("PE5", GPIOE, GPIO_PIN_5);
  535. #endif
  536. #ifdef GPIO_PIN_6
  537. STM32_GPIO PE6("PE6", GPIOE, GPIO_PIN_6);
  538. #endif
  539. #ifdef GPIO_PIN_7
  540. STM32_GPIO PE7("PE7", GPIOE, GPIO_PIN_7);
  541. #endif
  542. #ifdef GPIO_PIN_8
  543. STM32_GPIO PE8("PE8", GPIOE, GPIO_PIN_8);
  544. #endif
  545. #ifdef GPIO_PIN_9
  546. STM32_GPIO PE9("PE9", GPIOE, GPIO_PIN_9);
  547. #endif
  548. #ifdef GPIO_PIN_10
  549. STM32_GPIO PE10("PE10", GPIOE, GPIO_PIN_10);
  550. #endif
  551. #ifdef GPIO_PIN_11
  552. STM32_GPIO PE11("PE11", GPIOE, GPIO_PIN_11);
  553. #endif
  554. #ifdef GPIO_PIN_12
  555. STM32_GPIO PE12("PE12", GPIOE, GPIO_PIN_12);
  556. #endif
  557. #ifdef GPIO_PIN_13
  558. STM32_GPIO PE13("PE13", GPIOE, GPIO_PIN_13);
  559. #endif
  560. #ifdef GPIO_PIN_14
  561. STM32_GPIO PE14("PE14", GPIOE, GPIO_PIN_14);
  562. #endif
  563. #ifdef GPIO_PIN_15
  564. STM32_GPIO PE15("PE15", GPIOE, GPIO_PIN_15);
  565. #endif
  566. #endif
  567. #ifdef GPIOF
  568. #ifdef GPIO_PIN_0
  569. STM32_GPIO PF0("PF0", GPIOF, GPIO_PIN_0);
  570. #endif
  571. #ifdef GPIO_PIN_1
  572. STM32_GPIO PF1("PF1", GPIOF, GPIO_PIN_1);
  573. #endif
  574. #ifdef GPIO_PIN_2
  575. STM32_GPIO PF2("PF2", GPIOF, GPIO_PIN_2);
  576. #endif
  577. #ifdef GPIO_PIN_3
  578. STM32_GPIO PF3("PF3", GPIOF, GPIO_PIN_3);
  579. #endif
  580. #ifdef GPIO_PIN_4
  581. STM32_GPIO PF4("PF4", GPIOF, GPIO_PIN_4);
  582. #endif
  583. #ifdef GPIO_PIN_5
  584. STM32_GPIO PF5("PF5", GPIOF, GPIO_PIN_5);
  585. #endif
  586. #ifdef GPIO_PIN_6
  587. STM32_GPIO PF6("PF6", GPIOF, GPIO_PIN_6);
  588. #endif
  589. #ifdef GPIO_PIN_7
  590. STM32_GPIO PF7("PF7", GPIOF, GPIO_PIN_7);
  591. #endif
  592. #ifdef GPIO_PIN_8
  593. STM32_GPIO PF8("PF8", GPIOF, GPIO_PIN_8);
  594. #endif
  595. #ifdef GPIO_PIN_9
  596. STM32_GPIO PF9("PF9", GPIOF, GPIO_PIN_9);
  597. #endif
  598. #ifdef GPIO_PIN_10
  599. STM32_GPIO PF10("PF10", GPIOF, GPIO_PIN_10);
  600. #endif
  601. #ifdef GPIO_PIN_11
  602. STM32_GPIO PF11("PF11", GPIOF, GPIO_PIN_11);
  603. #endif
  604. #ifdef GPIO_PIN_12
  605. STM32_GPIO PF12("PF12", GPIOF, GPIO_PIN_12);
  606. #endif
  607. #ifdef GPIO_PIN_13
  608. STM32_GPIO PF13("PF13", GPIOF, GPIO_PIN_13);
  609. #endif
  610. #ifdef GPIO_PIN_14
  611. STM32_GPIO PF14("PF14", GPIOF, GPIO_PIN_14);
  612. #endif
  613. #ifdef GPIO_PIN_15
  614. STM32_GPIO PF15("PF15", GPIOF, GPIO_PIN_15);
  615. #endif
  616. #endif
  617. } // namespace iflytop