Parcourir la source

[iap]rewrite config pinout (use common board)

balbekova il y a 5 ans
Parent
commit
9a17b78f82
9 fichiers modifiés avec 295 ajouts et 177 suppressions
  1. 137 0
      iap/Modules/gpio.c
  2. 125 0
      iap/Modules/gpio.h
  3. 3 25
      iap/Modules/gpio_io.c
  4. 0 5
      iap/Modules/gpio_io.h
  5. 17 71
      iap/Modules/led.c
  6. 4 33
      iap/Modules/led.h
  7. 0 12
      iap/Modules/usart.c
  8. 4 27
      iap/Modules/wdg.c
  9. 5 4
      iap/User/main.c

+ 137 - 0
iap/Modules/gpio.c

@@ -0,0 +1,137 @@
+#include "gpio.h"
+
+gpio_pindef_t gpio_pins[] = {
+	GPIO_TABLE(EXPAND_AS_DEFS)
+};
+
+void gpio_hw_config_pin(GPIO_TypeDef *port, uint8_t pin, uint16_t conf) {
+	uint8_t shift;
+	shift = pin * 2;
+
+	port->MODER &= ~(GPIO_MODER_MASK << shift);
+	port->MODER |= (uint32_t)((conf >> GPIO_MODE_CFG_SHIFT) & GPIO_MODER_MASK) << shift;
+	port->OTYPER &= ~(GPIO_TYPER_MASK << pin);
+	port->OTYPER |= (uint32_t)((conf >> GPIO_TYPE_CFG_SHIFT) & GPIO_TYPER_MASK) << pin;
+	port->OSPEEDR &= ~(GPIO_SPEEDR_MASK << shift);
+	port->OSPEEDR |= (uint32_t)((conf >> GPIO_SPEED_CFG_SHIFT) & GPIO_SPEEDR_MASK) << shift;
+	port->PUPDR &= ~(GPIO_PUPDR_MASK << shift);
+	port->PUPDR |= (uint32_t)((conf >> GPIO_PUPD_CFG_SHIFT) & GPIO_PUPDR_MASK) << shift;
+}
+
+void gpio_connect_af(gpio_t id, uint8_t af_n) {
+	gpio_pindef_t *pin = &gpio_pins[id];
+	uint8_t shift;
+	if (pin->pin < 8) {
+		shift = pin->pin * 4;
+		pin->port->AFR[0] &= ~((uint32_t)GPIO_AFR_MASK << shift);
+		pin->port->AFR[0] |= af_n << shift;
+	}
+	else {
+		shift = (pin->pin - 8) * 4;
+		pin->port->AFR[1] &= ~((uint32_t)GPIO_AFR_MASK << shift);
+		pin->port->AFR[1] |= af_n << shift;
+	}
+}
+
+/*
+ * TODO add analog flag and setup ADC pins in a proper way
+ */
+static void gpio_set_config(gpio_t id) {
+	gpio_pindef_t *pin = &gpio_pins[id];
+	if (pin->flags & GPIO_AF) {
+		uint8_t af_n = (uint8_t)(pin->flags >> _GPIO_AF_SHIFT);
+		gpio_connect_af(id, af_n);
+		gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_AF_CFG | 
+				GPIO_SPEED_HIGH_CFG);
+	}
+	else if (pin->flags & GPIO_IN)
+		gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_IN_CFG | 
+				GPIO_SPEED_HIGH_CFG);
+	else if (pin->flags & GPIO_IN_PU) {
+		gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_IN_CFG | GPIO_PU_CFG |
+				GPIO_SPEED_HIGH_CFG);
+		gpio_set(id, pin->flags & GPIO_SET);
+	}
+	else if (pin->flags & GPIO_OUT) {
+		gpio_hw_config_pin(pin->port, pin->pin, GPIO_MODE_OUT_CFG |
+				((pin->flags & GPIO_OD) ? 
+				 GPIO_TYPE_OD_CFG : GPIO_TYPE_PP_CFG) |
+				GPIO_SPEED_HIGH_CFG);
+		gpio_set(id, pin->flags & GPIO_SET);
+	}
+}
+
+void gpio_init(void) {
+	uint32_t i;
+
+	GPIO_DeInit(GPIOA);
+	GPIO_DeInit(GPIOB);
+	GPIO_DeInit(GPIOC);
+	GPIO_DeInit(GPIOD);
+	GPIO_DeInit(GPIOE);
+
+	// configure clocks
+	RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN |
+			RCC_AHB1ENR_GPIOCEN | RCC_AHB1ENR_GPIODEN |
+			RCC_AHB1ENR_GPIOEEN;
+
+	// configure gpios
+	for (i = 0; i < GPIO_TOTAL_COUNT; i++) {
+		if (gpio_pins[i].flags & GPIO_NOINIT)
+			continue;
+		else {
+			gpio_set_config(i);
+		}
+	}
+}
+
+void gpio_set(gpio_t pin, bool value) {
+	if (gpio_pins[pin].flags & GPIO_INV)
+		value = !value;
+	if (value)
+		gpio_pins[pin].port->BSRRL = 1 << gpio_pins[pin].pin;
+	else
+		gpio_pins[pin].port->BSRRH = 1 << gpio_pins[pin].pin;
+}
+
+void gpio_invert_output(gpio_t pin) {
+
+	gpio_pins[pin].port->ODR ^= 1 << gpio_pins[pin].pin;
+}
+
+bool gpio_get(gpio_t pin) {
+	bool value;
+	if (gpio_pins[pin].flags & GPIO_NOINIT) {
+		return false;
+	}
+	else {
+		value = (gpio_pins[pin].port->IDR & (1 << gpio_pins[pin].pin)) >> gpio_pins[pin].pin;
+		return (gpio_pins[pin].flags & GPIO_INV) ? !value : value;
+	}
+}
+
+bool gpio_is_output(gpio_t pin) {
+	return (gpio_pins[pin].flags & GPIO_OUT) ? true : false;
+}
+
+void gpio_set_direction(gpio_t pin, bool out) {
+	if (out) {
+		gpio_pins[pin].flags &= ~(GPIO_IN | GPIO_IN_PU);
+		gpio_pins[pin].flags |= GPIO_OUT;
+	}
+	else {
+		gpio_pins[pin].flags &= ~(GPIO_OUT | GPIO_OD);
+		gpio_pins[pin].flags |= GPIO_IN;
+	}
+	gpio_set_config(pin);
+}
+
+void gpio_test() {
+
+}
+
+typedef struct {
+	gpio_pindef_t *gpio;
+	void (*handler)(void);
+} exti_handler_t;
+

+ 125 - 0
iap/Modules/gpio.h

@@ -0,0 +1,125 @@
+#ifndef GPIO_H
+#define GPIO_H
+
+#include "stm32f4xx_conf.h"
+#include "stm32f4xx.h"
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+
+#define GLITCH_TIMEOUT 200
+
+
+/* 
+ * Alternative function numbers definitions
+ */
+enum af_n {AF0 = 0, AF1, AF2, AF3, AF4, AF5, AF6, AF7,
+	   AF8, AF9, AF10, AF11, AF12, AF13, AF14, AF15};
+
+
+#define _GPIO_AF_SHIFT   10
+/* Flags for gpio init */
+#define GPIO_IN		0x01
+#define GPIO_IN_PU	0x02
+#define GPIO_OUT	0x04
+#define GPIO_SET	0x08
+#define GPIO_INV	0x10
+#define GPIO_OD		0x20
+#define GPIO_BKP	0x40
+#define GPIO_NOINIT	0x80
+#define GPIO_DIR_CHANGE	0x100
+#define GPIO_AF		0x200
+#define AF_TIM1		((AF1 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM2  	((AF1 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM3  	((AF2 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM4  	((AF2 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM5  	((AF2 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM8  	((AF3 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM9  	((AF3 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM10 	((AF3 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM11 	((AF3 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_I2C1 	((AF4 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_I2C2		((AF4 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_I2C3 	((AF4 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_SPI1 	((AF5 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_SPI2 	((AF5 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_SPI3 	((AF6 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_USART1 	((AF7 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_USART2 	((AF7 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_USART3	((AF7 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_USART4	((AF8 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_USART5 	((AF8 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_USART6 	((AF8 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_CAN1 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_CAN2 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM12 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM13 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_TIM14 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_OTG_FS 	((AF10 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_OTG_HS 	((AF10 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_ETH		((AF11 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_FSMC 	((AF12 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_SDIO 	((AF12 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_OTG_HS_FS	((AF12 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_DCMI 	((AF13 << _GPIO_AF_SHIFT) | GPIO_AF)
+#define AF_EVENTOUT	((AF14 << _GPIO_AF_SHIFT) | GPIO_AF)
+
+typedef struct {
+	GPIO_TypeDef *port;
+	uint8_t pin;
+	uint16_t flags;
+} gpio_pindef_t;
+
+#include "board.h"
+
+extern gpio_pindef_t gpio_pins[GPIO_TOTAL_COUNT];
+
+/*
+ * GPIO register bitmasks
+ */
+#define GPIO_MODER_MASK		0x03
+#define GPIO_TYPER_MASK		0x01
+#define GPIO_SPEEDR_MASK	0x03
+#define GPIO_PUPDR_MASK		0x03
+#define GPIO_AFR_MASK		0x0f
+
+/* 
+ * Port configuration values.
+ * A configuration is passing to gpio_hw_config_pin() bitwise in
+ * a 16-bit 'conf' parameter where low byte representing a port
+ * configuration and high using only for representing a number of an
+ * alternative function (if GPIO_MODE_AF is chosen).
+ * Shifts is using to encode/decode the config bits to/from 'conf'.
+ */
+#define GPIO_MODE_CFG_SHIFT	0
+#define GPIO_TYPE_CFG_SHIFT 	2
+#define GPIO_SPEED_CFG_SHIFT 	4
+#define GPIO_PUPD_CFG_SHIFT	6
+
+#define GPIO_MODE_IN_CFG	(0x00 << GPIO_MODE_CFG_SHIFT)
+#define GPIO_MODE_OUT_CFG	(0x01 << GPIO_MODE_CFG_SHIFT)
+#define GPIO_MODE_AF_CFG	(0x02 << GPIO_MODE_CFG_SHIFT)
+#define GPIO_MODE_ANALOG_CFG	(0x03 << GPIO_MODE_CFG_SHIFT)
+#define GPIO_TYPE_PP_CFG	(0x00 << GPIO_TYPE_CFG_SHIFT)
+#define GPIO_TYPE_OD_CFG	(0x01 << GPIO_TYPE_CFG_SHIFT)
+#define GPIO_SPEED_LOW_CFG	(0x00 << GPIO_SPEED_CFG_SHIFT)
+#define GPIO_SPEED_MED_CFG	(0x01 << GPIO_SPEED_CFG_SHIFT)
+#define GPIO_SPEED_FAST_CFG	(0x02 << GPIO_SPEED_CFG_SHIFT)
+#define GPIO_SPEED_HIGH_CFG	(0x03 << GPIO_SPEED_CFG_SHIFT)
+#define GPIO_PU_CFG		(0x01 << GPIO_PUPD_CFG_SHIFT)
+#define GPIO_PD_CFG		(0x02 << GPIO_PUPD_CFG_SHIFT)
+
+void gpio_init(void);
+void gpio_set(gpio_t pin, bool value);
+void gpio_invert_output(gpio_t pin);
+bool gpio_get(gpio_t pin);
+bool gpio_is_output(gpio_t pin);
+void gpio_set_direction(gpio_t pin, bool out);
+void gpio_hw_config_pin(GPIO_TypeDef *port, uint8_t pin, uint16_t conf);
+//void gpio_connect_af(GPIO_TypeDef *port, uint8_t pin, uint8_t af);
+void gpio_connect_af(gpio_t id, uint8_t af_n);
+void exti_handler(void);
+void gpio_test(void);
+
+#endif /* GPIO_H */

+ 3 - 25
iap/Modules/gpio_io.c

@@ -8,41 +8,19 @@
  * @history     Version  Author         Comment
  * XX.XX.XXXX   1.0.0    Telenkov D.A.  First release.
  *******************************************************************************
- */
-
-#include "stm32f4xx.h"  
+ */  
 #include "gpio_io.h"
+#include "gpio.h"
 #include <stdbool.h>
 
 #include "tinystdio.h"
 
-/**
-  * @brief  Инициализация дискретных входов-выходов
-  * @retval 
-  */
-void IO_Init(void)
-{
-	  GPIO_InitTypeDef GPIO_InitStructure;
-
-	  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE, ENABLE);
-
-	  /* ----------------------------- Inputs ---------------------------------- */
-
-	  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
-	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
-	  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-	  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
-
-	  /* BUTTON DEFAULT - " " */
-	  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
-	  GPIO_Init(GPIOE, &GPIO_InitStructure);
-}
 
 /**
   * @brief  Получить состояние кнопки DEFAULT
   */
 bool IO_BtnDefaultPressed(void)
 {
-  	return !GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_7);  // BUTTON DEFAULT
+  	return !gpio_get(KEY_DEF);  // BUTTON DEFAULT
 }
 /********************************* (C) РОТЕК **********************************/

+ 0 - 5
iap/Modules/gpio_io.h

@@ -15,11 +15,6 @@
 #define GPIO_IO_H
 
 #include <stdbool.h>
-
-/**
-  * @brief  Инициализация дискретных входов-выходов
-  */
-void IO_Init(void);
   
 /**
   * @brief  Получить состояние кнопки DEFAULT

+ 17 - 71
iap/Modules/led.c

@@ -11,12 +11,14 @@
  */
    
 #include "stm32f4xx.h"
+#include "gpio.h"
 #include "led.h"
 
-LED_t LED_GreenInt;
-LED_t LED_RedInt;
+#define LEDS_EXPAND_OFF(id, ...) 		\
+		LED_Off(id);
 
-LED_t LEDS[2];
+#define LED_ALL_OFF() \
+	LEDS(LEDS_EXPAND_OFF) \
 
 /**
   * @brief  
@@ -24,28 +26,7 @@ LED_t LEDS[2];
   */
 void LED_Init(void)
 {
-	 GPIO_InitTypeDef GPIO_InitStructure;
-
-	  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE);
-
-	  LEDS[GREEN_STATUS].GPIOx = GPIOA;
-	  LEDS[GREEN_STATUS].GPIO_Pin = GPIO_Pin_3;
-	  LEDS[GREEN_STATUS].revers = 1;
-
-	  LEDS[RED_STATUS].GPIOx = GPIOA;
-	  LEDS[RED_STATUS].GPIO_Pin = GPIO_Pin_4;
-	  LEDS[RED_STATUS].revers = 1;
-
-	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
-
-	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
-	  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-	  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
-	  GPIO_Init(GPIOA, &GPIO_InitStructure);
-
-	  LED_Off(GREEN_STATUS);
-	  LED_Off(RED_STATUS);
+	  LED_ALL_OFF();
 }
 
 /**
@@ -53,7 +34,7 @@ void LED_Init(void)
   */
 void LED_Blinky_Red(void)
 {
-  LED_Toggle(RED_STATUS);
+  LED_Toggle(LED_INIT_ERR);
 }
 
 /**
@@ -61,8 +42,8 @@ void LED_Blinky_Red(void)
   */
 void LED_Blinky_Yellow(void)
 {
-  LED_Toggle(GREEN_STATUS);
-  LED_Toggle(RED_STATUS);
+  LED_Toggle(LED_INIT_ERR);
+  LED_Toggle(LED_INIT_OK);
 }
 
 /**
@@ -70,67 +51,32 @@ void LED_Blinky_Yellow(void)
   */
 void LED_Blinky_Green(void)
 {
-  LED_Toggle(GREEN_STATUS);
+  LED_Toggle(LED_INIT_OK);
 }
 
 /**
   * @brief  
   */
-void LED_On(LED_NAMES_t led)
+void LED_On(gpio_t pin)
 {
-  API_LED_On(LEDS[led].GPIOx, LEDS[led].GPIO_Pin, LEDS[led].revers);
+  gpio_set(pin, 1);
 }
 
 /**
   * @brief  
   */
-void LED_Off(LED_NAMES_t led)
+void LED_Off(gpio_t pin)
 {
-  API_LED_Off(LEDS[led].GPIOx, LEDS[led].GPIO_Pin, LEDS[led].revers);
+  gpio_set(pin, 0);
 }
 
 /**
-  * @brief  Изменить состояние LED 
+  * @brief  Изменить состояние LED
   */
-void LED_Toggle(LED_NAMES_t led)
+void LED_Toggle(gpio_t pin)
 {
-  LEDS[led].GPIOx->ODR ^= LEDS[led].GPIO_Pin;
+    gpio_invert_output(pin);
 }
 
-/**
-  * @brief  Включить LED 
-  * @param  port
-  * @param  pin
-  * @param  revers: 0 - для включения LED нужно установить уровень
-  *                 1 - для включения LED нужно сбросить уровень
-  * @retval 
-  */
-void API_LED_On(GPIO_TypeDef* port, uint16_t pin, uint8_t revers)
-{
-  if (revers == 0)
-    port->BSRRL = pin;
-  else
-    port->BSRRH = pin;
-}
-
-/**
-  * @brief  Выключить LED 
-  * @param  port
-  * @param  pin
-  * @param  revers: 0 - для выключения LED нужно снять уровень
-  *                 1 - для выключения LED нужно установить уровень
-  * @retval 
-  */
-void API_LED_Off(GPIO_TypeDef* port, uint16_t pin, uint8_t revers)
-{
-  if (revers == 0)
-    port->BSRRH = pin;
-  else
-    port->BSRRL = pin;
-
-}
-
-
-
 
  /******************************* (C) LiteMesh *********************************/

+ 4 - 33
iap/Modules/led.h

@@ -16,23 +16,6 @@
    
 #include "stm32f4xx.h"
 
-/**
-  * @brief  
-  */
-typedef struct {
-
-  GPIO_TypeDef* GPIOx;
-  uint16_t      GPIO_Pin;
-  uint8_t       revers;
-
-} LED_t;  
-
-typedef enum
-{
-  GREEN_STATUS = 0,
-  RED_STATUS
-} LED_NAMES_t;
-
 /**
   * @brief  
   */
@@ -56,29 +39,17 @@ void LED_Blinky_Green(void);
 /**
   * @brief  
   */
-void LED_On(LED_NAMES_t led);
+void LED_On(gpio_t pin);
 
 /**
   * @brief  
   */
-void LED_Off(LED_NAMES_t led);
+void LED_Off(gpio_t pin);
 
 /**
-  * @brief  Изменить состояние LED 
+  * @brief  Изменить состояние LED
   */
-void LED_Toggle(LED_NAMES_t led);
-
-/**
-  * @brief  
-  */
-void API_LED_On(GPIO_TypeDef* port, uint16_t pin, uint8_t revers);
-
-/**
-  * @brief  
-  */
-void API_LED_Off(GPIO_TypeDef* port, uint16_t pin, uint8_t revers);
-
-
+void LED_Toggle(gpio_t pin);
 
 #endif /* #ifndef LED_H */
 

+ 0 - 12
iap/Modules/usart.c

@@ -45,21 +45,9 @@ void putc_(void* p, char c) {
   */
 void InitUSART( void) {
 
-  GPIO_InitTypeDef  GPIO_InitStructure;
   USART_InitTypeDef USART_InitStructure;
     
-  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
-    
-  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
-  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
-  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
-  GPIO_Init(GPIOA, &GPIO_InitStructure);
-
-  GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
-  GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
 
   USART_InitStructure.USART_BaudRate = 115200;
   USART_InitStructure.USART_WordLength = USART_WordLength_8b;

+ 4 - 27
iap/Modules/wdg.c

@@ -11,6 +11,7 @@
  */
 
 #include "stm32f4xx.h"  
+#include "gpio.h"
 #include "wdg.h"
 
 /**
@@ -20,26 +21,10 @@
 void WDG_Init(void)
 {
   
-  GPIO_InitTypeDef GPIO_InitStructure;
   NVIC_InitTypeDef          NVIC_InitStructure;
   TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
-#ifdef HARDWARE_BT6710
-  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
-#else
-  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
-#endif
+
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13, ENABLE);
-  
-  GPIO_InitStructure.GPIO_Pin = WDT_PIN;
-  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
-  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
-#ifdef HARDWARE_BT6710
-  GPIO_Init(GPIOD, &GPIO_InitStructure);
-#else
-  GPIO_Init(GPIOE, &GPIO_InitStructure);
-#endif
 
   NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x6;
@@ -69,11 +54,7 @@ void WDG_Init(void)
 void TIM8_UP_TIM13_IRQHandler(void)
 {
   TIM_ClearITPendingBit(TIM13, TIM_IT_Update);
-#ifdef HARDWARE_BT6710
-   GPIOD->ODR ^= WDT_PIN;
-#else
-   GPIOE->ODR ^= WDT_PIN;
-#endif
+  gpio_invert_output(_WDG);
 }
 
 /**
@@ -81,11 +62,7 @@ void TIM8_UP_TIM13_IRQHandler(void)
   */
 void WDT_Reset(void)
 {
-#ifdef HARDWARE_BT6710
-   GPIOD->ODR ^= WDT_PIN;
-#else
-   GPIOE->ODR ^= WDT_PIN;
-#endif
+  gpio_invert_output(_WDG);
 }
 
 

+ 5 - 4
iap/User/main.c

@@ -8,6 +8,7 @@
 #include "flash_if.h"
 #include "settings_api.h"
 #include "gpio_io.h"
+#include "gpio.h"
 #include "crc.h"
 #include "wdg.h"
 #include "tinystdio.h"
@@ -49,8 +50,8 @@ void main(void)
   	uint8_t bootTry;
   	uint8_t loadMode;
 
+    gpio_init();
     WDG_Init();
-    IO_Init();
     InitUSART();
 
   /* Enable PWR peripheral clock */
@@ -138,7 +139,7 @@ void main(void)
 
   PRINT_USART("\n\rBootloader starting...   \n\r");
 
-  LED_On(RED_STATUS);
+  LED_On(LED_INIT_ERR);
 
   ETH_BSP_Config();
   LwIP_Init();
@@ -242,8 +243,8 @@ u32_t sys_now(void) {
   * @retval None
   */
 void Error_Handler(void) {
-  LED_Off(RED_STATUS);
-  LED_Off(GREEN_STATUS);
+  LED_Off(LED_INIT_ERR);
+  LED_Off(LED_INIT_OK);
   timer_AddFunction(500, &LED_Blinky_Red);
   while (1)
   {