gpio.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #pragma once
  2. #ifndef _GPIO_H
  3. #define _GPIO_H
  4. #include "stm32g0xx.h"
  5. /* x = A to F */
  6. /* GPIO port mode register (GPIOx_MODER) */
  7. #define GPIO_MODE_IN 0x0
  8. #define GPIO_MODE_OUT 0x1
  9. #define GPIO_MODE_AFF 0x2
  10. #define GPIO_MODE_ANL 0x3
  11. /* GPIO port output type register (GPIOx_OTYPER) */
  12. #define GPIO_OTYPE_PP 0x0
  13. #define GPIO_OTYPE_OD 0x1
  14. /* GPIO port output speed register (GPIOx_OSPEEDR) */
  15. #define GPIO_OSPEED_VL 0x0
  16. #define GPIO_OSPEED_LW 0x1
  17. #define GPIO_OSPEED_HI 0x2
  18. #define GPIO_OSPEED_VH 0x3
  19. /* GPIO port pull-up/pull-down register (GPIOx_PUPDR) */
  20. #define GPIO_PUPDR_NO 0x0
  21. #define GPIO_PUPDR_UP 0x1
  22. #define GPIO_PUPDR_DW 0x2
  23. #define GPIO_PUPDR_NN 0x3
  24. /* GPIO port input data register (GPIOx_IDR) */
  25. /* GPIO port output data register (GPIOx_ODR) */
  26. /* GPIO port bit set/reset register (GPIOx_BSRR) */
  27. /* GPIO port bit reset register (GPIOx_BRR) (x = A to F) */
  28. /* GPIO port configuration lock register (GPIOx_LCKR) */
  29. /* GPIO alternate function high/low register (GPIOx_AFRL/GPIOx_AFRH) for pin 0..7/8..15 */
  30. #define GPIO_AF_0 0x0
  31. #define GPIO_AF_1 0x1
  32. #define GPIO_AF_2 0x2
  33. #define GPIO_AF_3 0x3
  34. #define GPIO_AF_4 0x4
  35. #define GPIO_AF_5 0x5
  36. #define GPIO_AF_6 0x6
  37. #define GPIO_AF_7 0x7
  38. /* PORT = GPIOA..GPIOF, PIN = (1<<0..15) */
  39. #define GPIO_PIN_SET(PORT, PIN) ((PORT->BSRR) = (PIN))
  40. #define GPIO_PIN_RES(PORT, PIN) ((PORT->BRR) = (PIN))
  41. /* Bits definition for GPIO PINs */
  42. #define GPIO_PIN_0 0x0001
  43. #define GPIO_PIN_1 0x0002
  44. #define GPIO_PIN_2 0x0004
  45. #define GPIO_PIN_3 0x0008
  46. #define GPIO_PIN_4 0x0010
  47. #define GPIO_PIN_5 0x0020
  48. #define GPIO_PIN_6 0x0040
  49. #define GPIO_PIN_7 0x0080
  50. #define GPIO_PIN_8 0x0100
  51. #define GPIO_PIN_9 0x0200
  52. #define GPIO_PIN_10 0x0400
  53. #define GPIO_PIN_11 0x0800
  54. #define GPIO_PIN_12 0x1000
  55. #define GPIO_PIN_13 0x2000
  56. #define GPIO_PIN_14 0x4000
  57. #define GPIO_PIN_15 0x8000
  58. /* functions from stm32g0xx_ll_gpio.h */
  59. static inline void GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode) {
  60. MODIFY_REG(GPIOx->MODER, ((Pin * Pin) * GPIO_MODER_MODE0), ((Pin * Pin) * Mode));
  61. }
  62. static inline void GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType) {
  63. MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
  64. }
  65. static inline void GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Speed) {
  66. MODIFY_REG(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEED0), ((Pin * Pin) * Speed));
  67. }
  68. static inline void GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull) {
  69. MODIFY_REG(GPIOx->PUPDR, ((Pin * Pin) * GPIO_PUPDR_PUPD0), ((Pin * Pin) * Pull));
  70. }
  71. static inline void GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate) {
  72. MODIFY_REG(GPIOx->AFR[0], ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0),
  73. ((((Pin * Pin) * Pin) * Pin) * Alternate));
  74. }
  75. static inline void GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate) {
  76. MODIFY_REG(GPIOx->AFR[1], (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8),
  77. (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * Alternate));
  78. }
  79. #endif