From 011d12330c90357cb71672fe56d11652c2293bcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Mon, 17 Feb 2020 14:12:56 +0100 Subject: [PATCH] sensor_sdm120: minor, update GPIO definitions --- lib/sensor_sdm120.c | 31 +++++++++++++++---------------- lib/sensor_sdm120.h | 6 +++--- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/lib/sensor_sdm120.c b/lib/sensor_sdm120.c index 5b1d191..28f54d3 100644 --- a/lib/sensor_sdm120.c +++ b/lib/sensor_sdm120.c @@ -12,10 +12,10 @@ * along with this program. If not, see . * */ -/** library to query measurements from eastron SDM120-ModBus electricity meter (code) - * @file sensor_sdm120.c +/** library to query measurements from eastron SDM120-ModBus electricity meter + * @file * @author King Kévin - * @date 2016 + * @date 2016-2020 * @note peripherals used: USART @ref sensor_sdm120_usart , GPIO @ref sensor_sdm120_gpio , timer @ref sensor_sdm120_timer */ /* standard libraries */ @@ -44,8 +44,7 @@ * @note driver output is enabled on high while receiver output is enabled on low, thus one pin can be used to control both * @{ */ -#define SENSOR_SDM120_REDE_PORT B /**< GPIO port for RS-485 receiver and driver output enable signal */ -#define SENSOR_SDM120_REDE_PIN 12 /**< GPIO pin for RS-485 receiver and driver output enable signal */ +#define SENSOR_SDM120_REDE_PIN PB12 /**< GPIO pin for RS-485 receiver and driver output enable signal */ /** @} */ /** @defgroup sensor_sdm120_timer timer peripheral to enforce waiting time between messages @@ -128,11 +127,11 @@ void sensor_sdm120_setup(uint32_t baudrate) { // enable USART I/O peripheral rcc_periph_clock_enable(RCC_AFIO); // enable pin alternate function (USART) - rcc_periph_clock_enable(USART_PORT_RCC(SENSOR_SDM120_USART)); // enable clock for USART port peripheral - rcc_periph_clock_enable(USART_RCC(SENSOR_SDM120_USART)); // enable clock for USART peripheral - gpio_set_mode(USART_PORT(SENSOR_SDM120_USART), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USART_PIN_TX(SENSOR_SDM120_USART)); // setup GPIO pin USART transmit - gpio_set_mode(USART_PORT(SENSOR_SDM120_USART), GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, USART_PIN_RX(SENSOR_SDM120_USART)); // setup GPIO pin USART receive - gpio_clear(USART_PORT(SENSOR_SDM120_USART), USART_PIN_RX(SENSOR_SDM120_USART)); // pull down to avoid noise when not connected (it will be set low by RS485 chip when RO is enabled) + rcc_periph_clock_enable(RCC_USART_PORT(SENSOR_SDM120_USART)); // enable clock for USART port peripheral + rcc_periph_clock_enable(RCC_USART(SENSOR_SDM120_USART)); // enable clock for USART peripheral + gpio_set_mode(USART_TX_PORT(SENSOR_SDM120_USART), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, USART_TX_PIN(SENSOR_SDM120_USART)); // setup GPIO pin USART transmit + gpio_set_mode(USART_RX_PORT(SENSOR_SDM120_USART), GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, USART_RX_PIN(SENSOR_SDM120_USART)); // setup GPIO pin USART receive + gpio_clear(USART_RX_PORT(SENSOR_SDM120_USART), USART_RX_PIN(SENSOR_SDM120_USART)); // pull down to avoid noise when not connected (it will be set low by RS485 chip when RO is enabled) // setup USART parameters for electricity meter usart_set_baudrate(USART(SENSOR_SDM120_USART), baudrate); // get baud rate by scrolling through the measurements on the electricity meter's screen (default 2400) @@ -147,9 +146,9 @@ void sensor_sdm120_setup(uint32_t baudrate) usart_enable(USART(SENSOR_SDM120_USART)); // enable USART // setup GPIO - rcc_periph_clock_enable(RCC_GPIO(SENSOR_SDM120_REDE_PORT)); // enable clock for GPIO peripheral - gpio_set_mode(GPIO(SENSOR_SDM120_REDE_PORT), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO(SENSOR_SDM120_REDE_PIN)); // setup GPIO pin for receiver and driver output enable pin - gpio_clear(GPIO(SENSOR_SDM120_REDE_PORT),GPIO(SENSOR_SDM120_REDE_PIN)); // disable driver output and enable receive output + rcc_periph_clock_enable(GPIO_RCC(SENSOR_SDM120_REDE_PIN)); // enable clock for GPIO peripheral + gpio_set_mode(GPIO_PORT(SENSOR_SDM120_REDE_PIN), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO_PIN(SENSOR_SDM120_REDE_PIN)); // setup GPIO pin for receiver and driver output enable pin + gpio_clear(GPIO_PORT(SENSOR_SDM120_REDE_PIN),GPIO_PIN(SENSOR_SDM120_REDE_PIN)); // disable driver output and enable receive output // setup timer to wait for minimal time before next transmission rcc_periph_clock_enable(RCC_TIM(SENSOR_SDM120_TIMER)); // enable clock for timer block @@ -224,7 +223,7 @@ static bool sensor_sdm120_transmit_request(uint8_t meter_id, uint8_t function, u while (TIM_CR1(TIM(SENSOR_SDM120_TIMER))&TIM_CR1_CEN) { // timer is already used __WFI(); // wait until something happens (timer is available again) } - gpio_set(GPIO(SENSOR_SDM120_REDE_PORT),GPIO(SENSOR_SDM120_REDE_PIN)); // enable driver output and disable receive output + gpio_set(GPIO_PORT(SENSOR_SDM120_REDE_PIN), GPIO_PIN(SENSOR_SDM120_REDE_PIN)); // enable driver output and disable receive output // start timeout timeout = TIMEOUT_BEGIN; // select time before sending message timer_set_period(TIM(SENSOR_SDM120_TIMER), timeout_times[timeout]); // set corresponding timeout @@ -320,7 +319,7 @@ void USART_ISR(SENSOR_SDM120_USART)(void) timer_enable_counter(TIM(SENSOR_SDM120_TIMER)); // wait } if (usart_get_interrupt_source(USART(SENSOR_SDM120_USART), USART_SR_RXNE)) { // data has been received - if (gpio_get(GPIO(SENSOR_SDM120_REDE_PORT),GPIO(SENSOR_SDM120_REDE_PIN))) { // not in receiver mode + if (gpio_get(GPIO_PORT(SENSOR_SDM120_REDE_PIN),GPIO_PIN(SENSOR_SDM120_REDE_PIN))) { // not in receiver mode USART_SR(USART(SENSOR_SDM120_USART)) &= ~USART_SR_RXNE; // clear flag, ignore received data } else if (rx_used. * */ -/** library to query measurements from eastron SDM120-ModBus electricity meter (API) - * @file sensor_sdm120.h +/** library to query measurements from eastron SDM120-ModBus electricity meter + * @file * @author King Kévin - * @date 2016 + * @date 2016-2020 * @note peripherals used: USART @ref sensor_sdm120_usart , GPIO @ref sensor_sdm120_gpio , timer @ref sensor_sdm120_timer */ #pragma once