From 0d24c3f69657824b392c3afdb56d1a342bdd35ec Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 16:47:59 +0700 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20=D0=BC?= =?UTF-8?q?=D0=B5=D0=B6=D0=B4=D1=83=20=D0=904=20=D0=B8=20=D0=905=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BD=D0=B5=D1=81=D0=BB=D0=B0=20=D0=B2=20=D0=B6=D0=B5?= =?UTF-8?q?=D0=BB=D0=BB=D0=B5=D0=B7=D0=BE=D0=B7=D0=B0=D0=B2=D0=B8=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D1=8B=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B8.=20=D0=A3=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D1=82=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=B7=D0=B0=D0=B3=D0=BB=D1=83=D1=88=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_analog.c | 14 ++------------ cores/arduino/wiring_digital.c | 19 +------------------ variants/elbear_ace_uno/pins_arduino.h | 2 ++ variants/elbear_ace_uno/variant.c | 17 +++++++++++++++++ variants/start/pins_arduino.h | 2 ++ 5 files changed, 24 insertions(+), 30 deletions(-) diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c index c7e5c35..343ecbd 100644 --- a/cores/arduino/wiring_analog.c +++ b/cores/arduino/wiring_analog.c @@ -42,18 +42,8 @@ uint32_t analogRead(uint32_t PinNumber) uint32_t adcChannel = analogInputToChannelNumber(PinNumber); if (adcChannel != NC) { - // if we use pin A5, we need to set SELA45 (1.15) to 1 to switch the output from A4 to A5 - if (PinNumber == A5) - { - HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_15, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_HIGH); - } - else if(PinNumber == A4) - { - // return the switch to A4 in case A5 was previously read - HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_15, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_LOW); - } + additionalPinsInit(PinNumber); + // init channel hadc.Init.Sel = adcChannel; HAL_ADC_Init(&hadc); diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index 1894c4f..66b3428 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -74,24 +74,7 @@ void pinMode(uint32_t PinNumber, uint32_t PinMode) // init pin HAL_GPIO_Init(GPIO_addr, &GPIO_InitStruct); - - // if we use pin A5, we need to set SELA45 (1.15) to 1 to switch the output from A4 to A5 - if (PinNumber == A5) - { - GPIO_InitStruct.Pin = GPIO_PIN_15; - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_OUTPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - HAL_GPIO_Init(GPIO_1, &GPIO_InitStruct); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_HIGH); - } - else if(PinNumber == A4) - { - GPIO_InitStruct.Pin = GPIO_PIN_15; - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_OUTPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - HAL_GPIO_Init(GPIO_1, &GPIO_InitStruct); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_LOW); - } + additionalPinsInit(PinNumber); } } diff --git a/variants/elbear_ace_uno/pins_arduino.h b/variants/elbear_ace_uno/pins_arduino.h index 404f7da..b01aee9 100644 --- a/variants/elbear_ace_uno/pins_arduino.h +++ b/variants/elbear_ace_uno/pins_arduino.h @@ -65,6 +65,8 @@ uint16_t pinCommonQty(void); volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); // the function returns a reference to the STATE address of the GPIO register volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); +// the function initializes additional MCU pins depending on the specified pin number +void additionalPinsInit(uint32_t PinNumber); // UART // available uarts quantity diff --git a/variants/elbear_ace_uno/variant.c b/variants/elbear_ace_uno/variant.c index a54ee4d..a928028 100644 --- a/variants/elbear_ace_uno/variant.c +++ b/variants/elbear_ace_uno/variant.c @@ -100,6 +100,23 @@ volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x) return &GPIO_x->STATE; } +// the function initializes additional MCU pins depending on the specified pin number +void additionalPinsInit(uint32_t PinNumber) +{ + // if we use pin A5, we need to set SELA45 (1.15) to 1 to switch the output from A4 to A5 + if (PinNumber == A5) + { + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_15, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_HIGH); + } + else if(PinNumber == A4) + { + // return the switch to A4 in case A5 was previously read + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_15, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_LOW); + } +} + // ---------------------- ADC ---------------------- // // determines the ADC channel number by the board pin number uint32_t analogInputToChannelNumber(uint32_t PinNumber) diff --git a/variants/start/pins_arduino.h b/variants/start/pins_arduino.h index d94d831..ada97f0 100644 --- a/variants/start/pins_arduino.h +++ b/variants/start/pins_arduino.h @@ -112,6 +112,8 @@ uint16_t pinCommonQty(void); volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); // the function returns a reference to the STATE address of the GPIO register volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); +// the function is needed for compatibility with other boards +static inline void additionalPinsInit(uint32_t PinNumber) {} // UART // available uarts quantity