24 SEMF_INFO(
"set pin %u on port %p", m_pin, m_port);
25 HAL_GPIO_WritePin(m_port, m_pin, GPIO_PIN_SET);
30 SEMF_INFO(
"reset pin %u on port %p", m_pin, m_port);
31 HAL_GPIO_WritePin(m_port, m_pin, GPIO_PIN_RESET);
36 auto state = HAL_GPIO_ReadPin(m_port, m_pin);
37 if (
state == GPIO_PIN_SET)
39 SEMF_INFO(
"pin %u on port %p is high", m_pin, m_port);
44 SEMF_INFO(
"pin %u on port %p is low", m_pin, m_port);
53 if (((m_port->MODER >> ioPos * 2) & 0x03) == 0)
55 else if (((m_port->OTYPER >> ioPos) & 0x01) == 0)
66 uint32_t moder = m_port->MODER;
67 uint32_t otyper = m_port->OTYPER;
68 moder &= ~(0x03 << (ioPos * 2));
72 SEMF_INFO(
"set output pushpull: pin %u on port %p", m_pin, m_port);
73 moder |= (1 << (ioPos * 2));
74 otyper &= ~(1 << ioPos);
77 SEMF_INFO(
"set output opendrain: pin %u on port %p", m_pin, m_port);
78 moder |= (1 << (ioPos * 2));
79 otyper |= (1 << ioPos);
82 SEMF_INFO(
"set input: pin %u on port %p", m_pin, m_port);
87 m_port->MODER = moder;
88 m_port->OTYPER = otyper;
97 switch ((m_port->PUPDR >> (ioPos * 2)) & 0x03)
116 uint32_t pupdr = m_port->PUPDR;
117 pupdr &= ~(0x03 << (ioPos * 2));
121 SEMF_INFO(
"set pullup: pin %u on port %p", m_pin, m_port);
122 pupdr |= (0x01 << (ioPos * 2));
125 SEMF_INFO(
"set pulldown: pin %u on port %p", m_pin, m_port);
126 pupdr |= (0x02 << (ioPos * 2));
129 SEMF_INFO(
"set no pullup / pulldown: pin %u on port %p", m_pin, m_port);
134 m_port->PUPDR = pupdr;
155 for (uint16_t pos = 0; pos < 16; pos++)
157 if (
pin == (1 << pos))
GPIO_TypeDef * port() const
Returns the GPIO handler.
uint16_t pinNumberToIOPosition(uint16_t pin) const
Returns the io position based on the pin number.
Stm32Gpio(GPIO_TypeDef *port, uint16_t pin)
Constructor.
void setPullUpPullDown(PullUpPullDown pullUpPullDown) override
Sets the pullup or pulldown setting of a GPIO.
PullUpPullDown pullUpPullDown() const override
Returns the pullup or pulldown setting of a GPIO.
uint16_t pin() const
Returns pin number.
bool state() const override
Returns the current state of the pin.
Direction direction() const override
Returns the direction setting of a GPIO.
void setDirection(Direction direction) override
Sets the direction of a GPIO.