|
|
|
@ -1,17 +1,38 @@
|
|
|
|
|
#include "pin.h"
|
|
|
|
|
|
|
|
|
|
#define MODER_IN 0x0UL
|
|
|
|
|
#define MODER_OUT 0x1UL
|
|
|
|
|
#define MODER_ALTERNATE 0x2UL
|
|
|
|
|
#define MODER_ANALOG 0x3UL
|
|
|
|
|
|
|
|
|
|
#define OSPEEDR_LOW 0x0UL
|
|
|
|
|
#define OSPEEDR_MEDIUM 0x1UL
|
|
|
|
|
#define OSPEEDR_HIGH 0x3UL
|
|
|
|
|
|
|
|
|
|
#define PUPDR_NO_PULL 0x0UL
|
|
|
|
|
#define PUPDR_PULL_UP 0x1UL
|
|
|
|
|
#define PUPDR_PULL_DOWN 0x2UL
|
|
|
|
|
|
|
|
|
|
const uint32_t moderMode[4] = {
|
|
|
|
|
MODER_ANALOG,
|
|
|
|
|
MODER_IN,
|
|
|
|
|
MODER_OUT,
|
|
|
|
|
MODER_ANALOG,
|
|
|
|
|
MODER_ALTERNATE
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void setMode(pinNo_t pinNo, mode mode)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
init(pinNo);
|
|
|
|
|
//Clear entry.
|
|
|
|
|
((GPIO_TypeDef *)(pinNo&~0xFF))->MODER &=~ (MODER_ANALOG << ((pinNo & 0xFF) * 2));
|
|
|
|
|
//Set to corresponding mode.
|
|
|
|
|
((GPIO_TypeDef *)(pinNo&~0xFF))->MODER |= (moderMode[mode] << ((pinNo & 0xFF) * 2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void setOutputState(pinNo_t pinNo, state state)
|
|
|
|
|
{
|
|
|
|
|
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
|
|
|
|
|
// Set PIN 3 of port B as Output
|
|
|
|
|
GPIOB->MODER |= GPIO_MODER_MODER3_0;
|
|
|
|
|
GPIOB->MODER &=~ GPIO_MODER_MODER3_1;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void setPullUpDonw(pinNo_t pinNo, pullUpDown resistance)
|
|
|
|
@ -50,9 +71,10 @@ void set(pinNo_t pinNo, uint8_t state)
|
|
|
|
|
GPIOB->BSRR |= GPIO_BSRR_BR_3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Enable the pin port's clock
|
|
|
|
|
void init(pinNo_t pinNo)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void deInit(pinNo_t pinNo)
|
|
|
|
|