pin_defs_stm32.c 947 B

12345678910111213141516171819202122232425262728293031
  1. #include "py/obj.h"
  2. #include "pin.h"
  3. // Returns the pin mode. This value returned by this macro should be one of:
  4. // GPIO_MODE_INPUT, GPIO_MODE_OUTPUT_PP, GPIO_MODE_OUTPUT_OD,
  5. // GPIO_MODE_AF_PP, GPIO_MODE_AF_OD, or GPIO_MODE_ANALOG.
  6. uint32_t pin_get_mode(const pin_obj_t *pin) {
  7. GPIO_TypeDef *gpio = pin->gpio;
  8. uint32_t mode = (gpio->MODER >> (pin->pin * 2)) & 3;
  9. if (mode != GPIO_MODE_ANALOG) {
  10. if (gpio->OTYPER & pin->pin_mask) {
  11. mode |= 1 << 4;
  12. }
  13. }
  14. return mode;
  15. }
  16. // Returns the pin pullup/pulldown. The value returned by this macro should
  17. // be one of GPIO_NOPULL, GPIO_PULLUP, or GPIO_PULLDOWN.
  18. uint32_t pin_get_pull(const pin_obj_t *pin) {
  19. return (pin->gpio->PUPDR >> (pin->pin * 2)) & 3;
  20. }
  21. // Returns the af (alternate function) index currently set for a pin.
  22. uint32_t pin_get_af(const pin_obj_t *pin) {
  23. return (pin->gpio->AFR[pin->pin >> 3] >> ((pin->pin & 7) * 4)) & 0xf;
  24. }