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.

391 lines
6.9 KiB

2 years ago
  1. #pragma once
  2. #include "../chip/iflytop_no_os.h"
  3. namespace iflytop {
  4. #define STM32_GPIO_LISTENER_NUM 10
  5. class STM32_GPIO;
  6. class STM32_GPIO_LISTENER;
  7. class STM32_GPIO {
  8. public:
  9. typedef enum {
  10. kRisingIrqEvent,
  11. kFallingIrqEvent,
  12. } IrqTypeEvent_t;
  13. typedef enum {
  14. kOutput_nopull,
  15. kOutput_pullup,
  16. kOutput_pulldown,
  17. kOutput_od,
  18. kInput_noIrq,
  19. kInput_risingIrq,
  20. kInput_fallingIrq,
  21. kInput_risingAndFallingIrq,
  22. } GPIOMode_t;
  23. private:
  24. const char *m_name;
  25. GPIO_TypeDef *m_gpio;
  26. uint16_t m_pin;
  27. GPIOMode_t m_mode;
  28. bool m_mirror;
  29. bool lastLevel;
  30. STM32_GPIO_LISTENER *m_listener;
  31. private:
  32. void init(GPIOMode_t gpiomode, bool mirror, bool initLevel);
  33. public:
  34. STM32_GPIO(const char *name, GPIO_TypeDef *gpio, uint16_t pin) : m_name(name), m_gpio(gpio), m_pin(pin) { m_mirror = false; }
  35. void initAsOutput(GPIOMode_t gpiomode, bool mirror, bool initLevel);
  36. void initAsOutput(bool initLevel);
  37. void initAsInput(GPIOMode_t gpiomode, bool mirror);
  38. void initAsInput();
  39. void initAsMirrorInput();
  40. void regListener(STM32_GPIO_LISTENER *listener);
  41. bool isMirror();
  42. bool isItRisingEXITGPIO();
  43. bool isItFallingEXITGPIO();
  44. bool isItRisingAndItFallingEXITGPIO();
  45. /*******************************************************************************
  46. * *
  47. *******************************************************************************/
  48. bool getState();
  49. uint32_t getStateUint32();
  50. bool setState(bool state);
  51. void toggleState();
  52. /*******************************************************************************
  53. * *
  54. *******************************************************************************/
  55. IRQn_Type getEXTIIRQn();
  56. GPIO_TypeDef *getPort() { return m_gpio; }
  57. uint16_t getPin() { return m_pin; }
  58. bool tryTriggerIRQ(uint16_t GPIO_Pin);
  59. private:
  60. bool enableClock();
  61. };
  62. class STM32_GPIO_LISTENER {
  63. public:
  64. virtual void STM32_GPIO_onIRQ(STM32_GPIO *GPIO_Pin, STM32_GPIO::IrqTypeEvent_t irqevent) {}
  65. };
  66. #ifdef GPIOA
  67. #ifdef GPIO_PIN_0
  68. extern STM32_GPIO PA0;
  69. #endif
  70. #ifdef GPIO_PIN_1
  71. extern STM32_GPIO PA1;
  72. #endif
  73. #ifdef GPIO_PIN_2
  74. extern STM32_GPIO PA2;
  75. #endif
  76. #ifdef GPIO_PIN_3
  77. extern STM32_GPIO PA3;
  78. #endif
  79. #ifdef GPIO_PIN_4
  80. extern STM32_GPIO PA4;
  81. #endif
  82. #ifdef GPIO_PIN_5
  83. extern STM32_GPIO PA5;
  84. #endif
  85. #ifdef GPIO_PIN_6
  86. extern STM32_GPIO PA6;
  87. #endif
  88. #ifdef GPIO_PIN_7
  89. extern STM32_GPIO PA7;
  90. #endif
  91. #ifdef GPIO_PIN_8
  92. extern STM32_GPIO PA8;
  93. #endif
  94. #ifdef GPIO_PIN_9
  95. extern STM32_GPIO PA9;
  96. #endif
  97. #ifdef GPIO_PIN_10
  98. extern STM32_GPIO PA10;
  99. #endif
  100. #ifdef GPIO_PIN_11
  101. extern STM32_GPIO PA11;
  102. #endif
  103. #ifdef GPIO_PIN_12
  104. extern STM32_GPIO PA12;
  105. #endif
  106. #ifdef GPIO_PIN_13
  107. extern STM32_GPIO PA13;
  108. #endif
  109. #ifdef GPIO_PIN_14
  110. extern STM32_GPIO PA14;
  111. #endif
  112. #ifdef GPIO_PIN_15
  113. extern STM32_GPIO PA15;
  114. #endif
  115. #endif
  116. #ifdef GPIOB
  117. #ifdef GPIO_PIN_0
  118. extern STM32_GPIO PB0;
  119. #endif
  120. #ifdef GPIO_PIN_1
  121. extern STM32_GPIO PB1;
  122. #endif
  123. #ifdef GPIO_PIN_2
  124. extern STM32_GPIO PB2;
  125. #endif
  126. #ifdef GPIO_PIN_3
  127. extern STM32_GPIO PB3;
  128. #endif
  129. #ifdef GPIO_PIN_4
  130. extern STM32_GPIO PB4;
  131. #endif
  132. #ifdef GPIO_PIN_5
  133. extern STM32_GPIO PB5;
  134. #endif
  135. #ifdef GPIO_PIN_6
  136. extern STM32_GPIO PB6;
  137. #endif
  138. #ifdef GPIO_PIN_7
  139. extern STM32_GPIO PB7;
  140. #endif
  141. #ifdef GPIO_PIN_8
  142. extern STM32_GPIO PB8;
  143. #endif
  144. #ifdef GPIO_PIN_9
  145. extern STM32_GPIO PB9;
  146. #endif
  147. #ifdef GPIO_PIN_10
  148. extern STM32_GPIO PB10;
  149. #endif
  150. #ifdef GPIO_PIN_11
  151. extern STM32_GPIO PB11;
  152. #endif
  153. #ifdef GPIO_PIN_12
  154. extern STM32_GPIO PB12;
  155. #endif
  156. #ifdef GPIO_PIN_13
  157. extern STM32_GPIO PB13;
  158. #endif
  159. #ifdef GPIO_PIN_14
  160. extern STM32_GPIO PB14;
  161. #endif
  162. #ifdef GPIO_PIN_15
  163. extern STM32_GPIO PB15;
  164. #endif
  165. #endif
  166. #ifdef GPIOC
  167. #ifdef GPIO_PIN_0
  168. extern STM32_GPIO PC0;
  169. #endif
  170. #ifdef GPIO_PIN_1
  171. extern STM32_GPIO PC1;
  172. #endif
  173. #ifdef GPIO_PIN_2
  174. extern STM32_GPIO PC2;
  175. #endif
  176. #ifdef GPIO_PIN_3
  177. extern STM32_GPIO PC3;
  178. #endif
  179. #ifdef GPIO_PIN_4
  180. extern STM32_GPIO PC4;
  181. #endif
  182. #ifdef GPIO_PIN_5
  183. extern STM32_GPIO PC5;
  184. #endif
  185. #ifdef GPIO_PIN_6
  186. extern STM32_GPIO PC6;
  187. #endif
  188. #ifdef GPIO_PIN_7
  189. extern STM32_GPIO PC7;
  190. #endif
  191. #ifdef GPIO_PIN_8
  192. extern STM32_GPIO PC8;
  193. #endif
  194. #ifdef GPIO_PIN_9
  195. extern STM32_GPIO PC9;
  196. #endif
  197. #ifdef GPIO_PIN_10
  198. extern STM32_GPIO PC10;
  199. #endif
  200. #ifdef GPIO_PIN_11
  201. extern STM32_GPIO PC11;
  202. #endif
  203. #ifdef GPIO_PIN_12
  204. extern STM32_GPIO PC12;
  205. #endif
  206. #ifdef GPIO_PIN_13
  207. extern STM32_GPIO PC13;
  208. #endif
  209. #ifdef GPIO_PIN_14
  210. extern STM32_GPIO PC14;
  211. #endif
  212. #ifdef GPIO_PIN_15
  213. extern STM32_GPIO PC15;
  214. #endif
  215. #endif
  216. #ifdef GPIOD
  217. #ifdef GPIO_PIN_0
  218. extern STM32_GPIO PD0;
  219. #endif
  220. #ifdef GPIO_PIN_1
  221. extern STM32_GPIO PD1;
  222. #endif
  223. #ifdef GPIO_PIN_2
  224. extern STM32_GPIO PD2;
  225. #endif
  226. #ifdef GPIO_PIN_3
  227. extern STM32_GPIO PD3;
  228. #endif
  229. #ifdef GPIO_PIN_4
  230. extern STM32_GPIO PD4;
  231. #endif
  232. #ifdef GPIO_PIN_5
  233. extern STM32_GPIO PD5;
  234. #endif
  235. #ifdef GPIO_PIN_6
  236. extern STM32_GPIO PD6;
  237. #endif
  238. #ifdef GPIO_PIN_7
  239. extern STM32_GPIO PD7;
  240. #endif
  241. #ifdef GPIO_PIN_8
  242. extern STM32_GPIO PD8;
  243. #endif
  244. #ifdef GPIO_PIN_9
  245. extern STM32_GPIO PD9;
  246. #endif
  247. #ifdef GPIO_PIN_10
  248. extern STM32_GPIO PD10;
  249. #endif
  250. #ifdef GPIO_PIN_11
  251. extern STM32_GPIO PD11;
  252. #endif
  253. #ifdef GPIO_PIN_12
  254. extern STM32_GPIO PD12;
  255. #endif
  256. #ifdef GPIO_PIN_13
  257. extern STM32_GPIO PD13;
  258. #endif
  259. #ifdef GPIO_PIN_14
  260. extern STM32_GPIO PD14;
  261. #endif
  262. #ifdef GPIO_PIN_15
  263. extern STM32_GPIO PD15;
  264. #endif
  265. #endif
  266. #ifdef GPIOE
  267. #ifdef GPIO_PIN_0
  268. extern STM32_GPIO PE0;
  269. #endif
  270. #ifdef GPIO_PIN_1
  271. extern STM32_GPIO PE1;
  272. #endif
  273. #ifdef GPIO_PIN_2
  274. extern STM32_GPIO PE2;
  275. #endif
  276. #ifdef GPIO_PIN_3
  277. extern STM32_GPIO PE3;
  278. #endif
  279. #ifdef GPIO_PIN_4
  280. extern STM32_GPIO PE4;
  281. #endif
  282. #ifdef GPIO_PIN_5
  283. extern STM32_GPIO PE5;
  284. #endif
  285. #ifdef GPIO_PIN_6
  286. extern STM32_GPIO PE6;
  287. #endif
  288. #ifdef GPIO_PIN_7
  289. extern STM32_GPIO PE7;
  290. #endif
  291. #ifdef GPIO_PIN_8
  292. extern STM32_GPIO PE8;
  293. #endif
  294. #ifdef GPIO_PIN_9
  295. extern STM32_GPIO PE9;
  296. #endif
  297. #ifdef GPIO_PIN_10
  298. extern STM32_GPIO PE10;
  299. #endif
  300. #ifdef GPIO_PIN_11
  301. extern STM32_GPIO PE11;
  302. #endif
  303. #ifdef GPIO_PIN_12
  304. extern STM32_GPIO PE12;
  305. #endif
  306. #ifdef GPIO_PIN_13
  307. extern STM32_GPIO PE13;
  308. #endif
  309. #ifdef GPIO_PIN_14
  310. extern STM32_GPIO PE14;
  311. #endif
  312. #ifdef GPIO_PIN_15
  313. extern STM32_GPIO PE15;
  314. #endif
  315. #endif
  316. #ifdef GPIOF
  317. #ifdef GPIO_PIN_0
  318. extern STM32_GPIO PF0;
  319. #endif
  320. #ifdef GPIO_PIN_1
  321. extern STM32_GPIO PF1;
  322. #endif
  323. #ifdef GPIO_PIN_2
  324. extern STM32_GPIO PF2;
  325. #endif
  326. #ifdef GPIO_PIN_3
  327. extern STM32_GPIO PF3;
  328. #endif
  329. #ifdef GPIO_PIN_4
  330. extern STM32_GPIO PF4;
  331. #endif
  332. #ifdef GPIO_PIN_5
  333. extern STM32_GPIO PF5;
  334. #endif
  335. #ifdef GPIO_PIN_6
  336. extern STM32_GPIO PF6;
  337. #endif
  338. #ifdef GPIO_PIN_7
  339. extern STM32_GPIO PF7;
  340. #endif
  341. #ifdef GPIO_PIN_8
  342. extern STM32_GPIO PF8;
  343. #endif
  344. #ifdef GPIO_PIN_9
  345. extern STM32_GPIO PF9;
  346. #endif
  347. #ifdef GPIO_PIN_10
  348. extern STM32_GPIO PF10;
  349. #endif
  350. #ifdef GPIO_PIN_11
  351. extern STM32_GPIO PF11;
  352. #endif
  353. #ifdef GPIO_PIN_12
  354. extern STM32_GPIO PF12;
  355. #endif
  356. #ifdef GPIO_PIN_13
  357. extern STM32_GPIO PF13;
  358. #endif
  359. #ifdef GPIO_PIN_14
  360. extern STM32_GPIO PF14;
  361. #endif
  362. #ifdef GPIO_PIN_15
  363. extern STM32_GPIO PF15;
  364. #endif
  365. #endif
  366. } // namespace iflytop