Working inplementation of pin setMode function

interrupts
key 4 years ago
parent 9f59a942ef
commit 7e49cf6a33

@ -13,34 +13,34 @@ extern "C" {
#include "../stm32f042/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f042x6.h" #include "../stm32f042/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f042x6.h"
typedef enum typedef enum
{ {
pinA0 = GPIOA_BASE || 0, pinA0 = GPIOA_BASE | 0,
pinA1 = GPIOA_BASE || 1, pinA1 = GPIOA_BASE | 1,
pinA2 = GPIOA_BASE || 2, pinA2 = GPIOA_BASE | 2,
pinA3 = GPIOA_BASE || 3, pinA3 = GPIOA_BASE | 3,
pinA4 = GPIOA_BASE || 4, pinA4 = GPIOA_BASE | 4,
pinA5 = GPIOA_BASE || 5, pinA5 = GPIOA_BASE | 5,
pinA6 = GPIOA_BASE || 6, pinA6 = GPIOA_BASE | 6,
pinA7 = GPIOA_BASE || 7, pinA7 = GPIOA_BASE | 7,
pinA8 = GPIOA_BASE || 8, pinA8 = GPIOA_BASE | 8,
pinA9 = GPIOA_BASE || 9, pinA9 = GPIOA_BASE | 9,
pinA10 = GPIOA_BASE || 10, pinA10 = GPIOA_BASE | 10,
pinA11 = GPIOA_BASE || 11, pinA11 = GPIOA_BASE | 11,
pinA12 = GPIOA_BASE || 12, pinA12 = GPIOA_BASE | 12,
pinA13 = GPIOA_BASE || 13, pinA13 = GPIOA_BASE | 13,
pinA14 = GPIOA_BASE || 14, pinA14 = GPIOA_BASE | 14,
pinA15 = GPIOA_BASE || 15, pinA15 = GPIOA_BASE | 15,
pinB0 = GPIOB_BASE || 0, pinB0 = GPIOB_BASE | 0,
pinB1 = GPIOB_BASE || 1, pinB1 = GPIOB_BASE | 1,
pinB3 = GPIOB_BASE || 3, pinB3 = GPIOB_BASE | 3,
pinB4 = GPIOB_BASE || 4, pinB4 = GPIOB_BASE | 4,
pinB5 = GPIOB_BASE || 5, pinB5 = GPIOB_BASE | 5,
pinB6 = GPIOB_BASE || 6, pinB6 = GPIOB_BASE | 6,
pinB7 = GPIOB_BASE || 7, pinB7 = GPIOB_BASE | 7,
pinB8 = GPIOB_BASE || 8, pinB8 = GPIOB_BASE | 8,
pinF0 = GPIOF_BASE || 0, pinF0 = GPIOF_BASE | 0,
pinF1 = GPIOF_BASE || 1 pinF1 = GPIOF_BASE | 1
}pinNo_t; }pinNo_t;
#endif #endif

@ -1,17 +1,38 @@
#include "pin.h" #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) 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) 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) 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; GPIOB->BSRR |= GPIO_BSRR_BR_3;
} }
//Enable the pin port's clock
void init(pinNo_t pinNo) void init(pinNo_t pinNo)
{ {
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
} }
void deInit(pinNo_t pinNo) void deInit(pinNo_t pinNo)

@ -1,5 +1,5 @@
#include "bsl_nucleo_f042k6.hpp" #include "bsl_nucleo_f042k6.hpp"
//#include"bsl/csl/interfaces/delay.hpp"
Nucleo_f042k6::Nucleo_f042k6() Nucleo_f042k6::Nucleo_f042k6()
{ {

@ -1,13 +1,15 @@
#include"main.hpp" #include"main.hpp"
#include"bsl/csl/interfaces/delay.hpp" #include"bsl/csl/interfaces/delay.hpp"
//#include"bsl/csl/interfaces/pin.h" #include"stm32f0xx_csl.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
Delay delay; Delay delay;
stmStart();
setMode(pinB3,output); setMode(pinB3,output);
throwError();
while(1) while(1)
{ {
set(pinB3,1); set(pinB3,1);

Loading…
Cancel
Save