|
|
@@ -56,6 +56,12 @@ extern BUTTON_NO_FIX_t setButton;
|
|
|
*/
|
|
|
extern unsigned char eth_ready_flag;
|
|
|
|
|
|
+
|
|
|
+static bool test_pair_pins(void);
|
|
|
+static void set_pin_as_output(GPIO_TypeDef *port, uint8_t pin);
|
|
|
+static void set_pin_as_input(GPIO_TypeDef *port, uint8_t pin);
|
|
|
+
|
|
|
+
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
// __weak функции
|
|
|
|
|
|
@@ -462,5 +468,273 @@ void Test_Serno(void)
|
|
|
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
|
|
|
+typedef struct
|
|
|
+{
|
|
|
+ GPIO_TypeDef *first_port;
|
|
|
+ uint16_t first_pin;
|
|
|
+
|
|
|
+ GPIO_TypeDef *second_port;
|
|
|
+ uint16_t second_pin;
|
|
|
+
|
|
|
+} pair_pin_t;
|
|
|
+
|
|
|
+typedef struct
|
|
|
+{
|
|
|
+ GPIO_TypeDef *first_port;
|
|
|
+ uint16_t first_pin;
|
|
|
+
|
|
|
+} single_pin_t;
|
|
|
+
|
|
|
+/*
|
|
|
+1 - PE2 - не используется
|
|
|
+2 - PE3 - не проверяем, не используется
|
|
|
+3 - PE4 - не проверяем, не используется
|
|
|
+4 - PE5 - не проверяем, не используется
|
|
|
+5 - PE6 - проверять с PE5 и проверяем с VBAT (КЗ с +)
|
|
|
+6 - VBAT - не проверяем
|
|
|
+7 - PC13 - не проверяем, не используется
|
|
|
+8 - OSC_IN - не проверяем
|
|
|
+9 - OSC_OUT - не проверяем
|
|
|
+10 - VSS - не проверяем
|
|
|
+11 - VDD - не проверяем
|
|
|
+12 - OSC_IN - не проверяем
|
|
|
+13 - OSC_OUT - не проверяем, не используется
|
|
|
+14 - PE3 - NRST - не проверяем
|
|
|
+15 - PC0 - не проверяем, не используется
|
|
|
+16 - PC1 - не проверяем ethernet phy
|
|
|
+17 - PC0 - не проверяем, не используется
|
|
|
+18 - PC0 - не проверяем, не используется
|
|
|
+19 - VDD - не проверяем
|
|
|
+20 - VSSA - не проверяем
|
|
|
+21 - VREF - не проверяем
|
|
|
+22 - VDDA - не проверяем
|
|
|
+23 - PA0 - проверяем с 22 (КЗ с +)
|
|
|
+24 - PA1 - не проверяем ethernet phy
|
|
|
+25 - PA2 - не проверяем ethernet phy
|
|
|
+26 - PA3 - проверяем с 27 (КЗ с -)
|
|
|
+27 - VSS - не проверяем
|
|
|
+28 - VDD - не проверяем
|
|
|
+29 - PA4 - проверяем с 28 (кз с +), проверяем с 30
|
|
|
+30 - PA5 - проверяем с 29, проверяем с 31
|
|
|
+31 - PA6 - не проверяем, не используется
|
|
|
+32 - PA7 - не проверяем ethernet phy
|
|
|
+33 - PС4 - не проверяем ethernet phy
|
|
|
+34 - PС5 - не проверяем ethernet phy
|
|
|
+35 - PB0 - не проверяем, не используется
|
|
|
+36 - PB1 - не проверяем, не используется
|
|
|
+37 - PB2 - BOOT1 - не проверяем
|
|
|
+38 - PE7 - не проверяем, там всегда +
|
|
|
+39 - PE8 - не проверяем, не используется
|
|
|
+40 - PE9 - не проверяем, не используется
|
|
|
+41 - PE10 - не проверяем, не используется
|
|
|
+42 - PE11 - не проверяем, не получится
|
|
|
+43 - PE12 - не проверяем, не получится
|
|
|
+44 - PE13 - не проверяем ethernet phy
|
|
|
+45 - PE14 - не проверяем, не используется
|
|
|
+46 - PE15 - проверяем с 47
|
|
|
+47 - PB10 - проверяем с 46
|
|
|
+48 - PB11 - не проверяем ethernet phy
|
|
|
+49 - Vcap1 - не проверяем
|
|
|
+50 - VDD - не проверяем
|
|
|
+51 - PB12 - не проверяем ethernet phy
|
|
|
+52 - PB13 - не проверяем ethernet phy
|
|
|
+53 - PB14 - проверяем с 54 (но 53 должен быть только входом)
|
|
|
+54 - PB15 - проверяем с 53 (54 - как вход)
|
|
|
+55 - PD8 - не проверяем, не используется
|
|
|
+56 - PD9 - не проверяем, не используется
|
|
|
+57 - PD10 - не проверяем, не используется
|
|
|
+58 - PD11 - не проверяем, не используется
|
|
|
+59 - PD12 - не проверяем, не используется
|
|
|
+60 - PD13 - не проверяем, не используется
|
|
|
+61 - PD14 - не проверяем
|
|
|
+62 - PD15 - не проверяем
|
|
|
+63 - PС6 - не проверяем, не используется
|
|
|
+64 - PC7 - не проверяем, не используется
|
|
|
+65 - PC8 - не проверяем, не используется
|
|
|
+66 - PC9 - не проверяем, не используется
|
|
|
+67 - PA8 - не проверяем, не используется
|
|
|
+68 - PA9 - не проверяем, это DEBUG UART
|
|
|
+69 - PA10 - не проверяем, это DEBUG UART
|
|
|
+70 - PA11 - не проверяем, не используется
|
|
|
+71 - PA12 - не проверяем, не используется
|
|
|
+72 - PA13 - SWDIO - не проверяем
|
|
|
+73 - Vcap2 - не проверяем
|
|
|
+74 - VSS - не проверяем
|
|
|
+75 - VDD - не проверяем
|
|
|
+76 - PA14 - SWCLK - не вроверяем
|
|
|
+77 - PA15 - не проверяем, не используется
|
|
|
+78 - PC10 - не проверяем, не используется
|
|
|
+79 - PC11 - не проверяем, не используется
|
|
|
+80 - PC12 - не проверяем, не используется
|
|
|
+81 - PD0 - не проверяем, не используется
|
|
|
+82 - PD1 - не проверяем, не используется
|
|
|
+83 - PD2 - не проверяем, не используется
|
|
|
+84 - PD3 - не проверяем, не используется
|
|
|
+85 - PD4 - не проверяем, не используется
|
|
|
+86 - PD5 - проверяем с 87
|
|
|
+87 - PD6 - проверяем с 86
|
|
|
+88 - PD7 - не проверяем, не используется
|
|
|
+89 - PB3 - проверяем с 90
|
|
|
+90 - PB4 - проверяем с 89, проверяем с 91
|
|
|
+91 - PB5 - проверяем c 90, проверяем с 92
|
|
|
+92 - PB6 - проверяем с 91
|
|
|
+93 - PB7 - не проверяем, не используется
|
|
|
+94 - BOOT0 - не проверяем
|
|
|
+95 - PB8 - не проверяем, не используется
|
|
|
+96 - PB9 - не проверям, т.к. соседние пины не используются
|
|
|
+97 - PE0 - не проверяем, не используется
|
|
|
+98 - PE1 - не проверяем, не используется
|
|
|
+99 - VSS - не проверяем
|
|
|
+100 - VDD - не проверяем
|
|
|
+*/
|
|
|
+
|
|
|
+
|
|
|
+#define PAIR_PINS_SIZE 14
|
|
|
+
|
|
|
+pair_pin_t pins_with_pair[PAIR_PINS_SIZE] = {
|
|
|
+ {GPIOE, GPIO_Pin_6, GPIOE, GPIO_Pin_5}, // проверить уровень на PE5
|
|
|
+
|
|
|
+
|
|
|
+ {GPIOE, GPIO_Pin_2, GPIOE, GPIO_Pin_3}, /* 1 */ // 2, 3 - не тестировать, они не используются
|
|
|
+ {GPIOE, GPIO_Pin_4, GPIOE, GPIO_Pin_5}, /* 2 */ // 4, 5 - не тестировать, они не используются
|
|
|
+ {GPIOA, GPIO_Pin_4, GPIOA, GPIO_Pin_5}, /* 3 */ // 29, 30 - ОК
|
|
|
+ {GPIOB, GPIO_Pin_2, GPIOE, GPIO_Pin_7}, /* 4 */ // 37, 38 - не будет работать
|
|
|
+ {GPIOE, GPIO_Pin_11, GPIOE, GPIO_Pin_12}, /* 5 */ // 42, 43 - не получилось, это LED не будет работать, это LED не будем тестировать
|
|
|
+ {GPIOE, GPIO_Pin_15, GPIOB, GPIO_Pin_10}, /* 6 */ // 46, 47 - OK
|
|
|
+ {GPIOB, GPIO_Pin_13, GPIOB, GPIO_Pin_14}, /* 7 */ // 52, 53 - не получилось
|
|
|
+ {GPIOB, GPIO_Pin_14, GPIOB, GPIO_Pin_15}, /* 8 */ // 53, 54 - не получилось
|
|
|
+ {GPIOD, GPIO_Pin_14, GPIOD, GPIO_Pin_15}, /* 9 */ // 61, 62 - не будет работать
|
|
|
+ {GPIOA, GPIO_Pin_9, GPIOA, GPIO_Pin_10}, /* 10 */ // 68, 69 - не тестировать, это DEBUG UART
|
|
|
+ {GPIOD, GPIO_Pin_5, GPIOD, GPIO_Pin_6}, /* 11 */ // 86, 87 - OK
|
|
|
+ {GPIOB, GPIO_Pin_3, GPIOB, GPIO_Pin_4}, /* 12 */ // 89, 90 - OK
|
|
|
+ {GPIOB, GPIO_Pin_5, GPIOB, GPIO_Pin_6}, /* 13 */ // 91, 92 - OK
|
|
|
+ {GPIOB, GPIO_Pin_8, GPIOB, GPIO_Pin_9}, /* 14 */ // 95, 96 - не получилось
|
|
|
+};
|
|
|
+
|
|
|
+#if 0
|
|
|
+pair_pin_t pins_with_pair[PAIR_PINS_SIZE] = {
|
|
|
+ {GPIOE, GPIO_Pin_2, GPIOE, GPIO_Pin_3}, /* 1 */ // 2, 3 - не тестировать, они не используются
|
|
|
+ {GPIOE, GPIO_Pin_4, GPIOE, GPIO_Pin_5}, /* 2 */ // 4, 5 - не тестировать, они не используются
|
|
|
+ {GPIOA, GPIO_Pin_4, GPIOA, GPIO_Pin_5}, /* 3 */ // 29, 30 - ОК
|
|
|
+ {GPIOB, GPIO_Pin_2, GPIOE, GPIO_Pin_7}, /* 4 */ // 37, 38 - не будет работать
|
|
|
+ {GPIOE, GPIO_Pin_11, GPIOE, GPIO_Pin_12}, /* 5 */ // 42, 43 - не получилось, это LED не будет работать, это LED не будем тестировать
|
|
|
+ {GPIOE, GPIO_Pin_15, GPIOB, GPIO_Pin_10}, /* 6 */ // 46, 47 - OK
|
|
|
+ {GPIOB, GPIO_Pin_13, GPIOB, GPIO_Pin_14}, /* 7 */ // 52, 53 - не получилось
|
|
|
+ {GPIOB, GPIO_Pin_14, GPIOB, GPIO_Pin_15}, /* 8 */ // 53, 54 - не получилось
|
|
|
+ {GPIOD, GPIO_Pin_14, GPIOD, GPIO_Pin_15}, /* 9 */ // 61, 62 - не будет работать
|
|
|
+ {GPIOA, GPIO_Pin_9, GPIOA, GPIO_Pin_10}, /* 10 */ // 68, 69 - не тестировать, это DEBUG UART
|
|
|
+ {GPIOD, GPIO_Pin_5, GPIOD, GPIO_Pin_6}, /* 11 */ // 86, 87 - OK
|
|
|
+ {GPIOB, GPIO_Pin_3, GPIOB, GPIO_Pin_4}, /* 12 */ // 89, 90 - OK
|
|
|
+ {GPIOB, GPIO_Pin_5, GPIOB, GPIO_Pin_6}, /* 13 */ // 91, 92 - OK
|
|
|
+ {GPIOB, GPIO_Pin_8, GPIOB, GPIO_Pin_9}, /* 14 */ // 95, 96 - не получилось
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
+uint8_t pair_pin_resut[PAIR_PINS_SIZE];
|
|
|
+
|
|
|
+// Возможно замыкание на линию питания. Эти пины проверяются отдельно.
|
|
|
+single_pin_t pins_with_power[] = {
|
|
|
+ {GPIOA, GPIO_Pin_4}, // 29 - это LED не будем тестировать
|
|
|
+};
|
|
|
+
|
|
|
+// Возможно замыкание на землю. Эти пины проверяются отдельно.
|
|
|
+single_pin_t pins_with_ground[] = {
|
|
|
+ {GPIOA, GPIO_Pin_3}, // 26 - это LED не будем тестировать
|
|
|
+};
|
|
|
+
|
|
|
+//
|
|
|
+void Test_Pins(void)
|
|
|
+{
|
|
|
+ printf("\r\nThis is PINS test\r\n");
|
|
|
+ //printf("Size of pair pins struct: %u\r\n", sizeof(pins_for_test)/16);
|
|
|
+ //printf("Size of power pins struct: %u\r\n", sizeof(pins_with_power)/8);
|
|
|
+ //printf("Size of ground pins struct: %u\r\n", sizeof(pins_with_ground)/8);
|
|
|
+
|
|
|
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
|
|
|
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
|
|
|
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
|
|
|
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
|
|
|
+ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
|
|
|
+
|
|
|
+ test_pair_pins();
|
|
|
+
|
|
|
+ TEST_SetTest(TEST_WAIT);
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+static bool test_pair_pins(void)
|
|
|
+{
|
|
|
+ uint8_t res_1 = Bit_RESET;
|
|
|
+ uint8_t res_2 = Bit_RESET;
|
|
|
+
|
|
|
+ set_pin_as_input(GPIOE, GPIO_Pin_5);
|
|
|
+ res_1 = GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_5);
|
|
|
+ printf("PE_5 level: %u\r\n", res_1);
|
|
|
+
|
|
|
+#if 0
|
|
|
+ for (int i = 0; i < PAIR_PINS_SIZE; i++)
|
|
|
+ {
|
|
|
+ set_pin_as_output(pins_with_pair[i].first_port, pins_with_pair[i].first_pin);
|
|
|
+ set_pin_as_input(pins_with_pair[i].second_port, pins_with_pair[i].second_pin);
|
|
|
+
|
|
|
+ GPIO_SetBits(pins_with_pair[i].first_port, pins_with_pair[i].first_pin);
|
|
|
+ vTaskDelay(1);
|
|
|
+
|
|
|
+ res_1 = GPIO_ReadInputDataBit(pins_with_pair[i].second_port, pins_with_pair[i].second_pin);
|
|
|
+
|
|
|
+ GPIO_ResetBits(pins_with_pair[i].first_port, pins_with_pair[i].first_pin);
|
|
|
+ vTaskDelay(1);
|
|
|
+
|
|
|
+ res_2 = GPIO_ReadInputDataBit(pins_with_pair[i].second_port, pins_with_pair[i].second_pin);
|
|
|
+
|
|
|
+ if (res_1 != res_2)
|
|
|
+ pair_pin_resut[i] = 1;
|
|
|
+ else
|
|
|
+ pair_pin_resut[i] = 0;
|
|
|
+
|
|
|
+ set_pin_as_input(pins_with_pair[i].first_port, pins_with_pair[i].first_pin);
|
|
|
+ }
|
|
|
+
|
|
|
+#if 1
|
|
|
+ // Вывод результата
|
|
|
+ printf("Pair pin result:\r\n");
|
|
|
+ for (int i = 0; i < PAIR_PINS_SIZE; i++) {
|
|
|
+ printf("%u ", pair_pin_resut[i]);
|
|
|
+ }
|
|
|
+ printf("\r\n");
|
|
|
+
|
|
|
+ printf("Port %X\r\n", GPIOA);
|
|
|
+
|
|
|
+#endif
|
|
|
+
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+static void set_pin_as_output(GPIO_TypeDef *port, uint8_t pin)
|
|
|
+{
|
|
|
+ GPIO_InitTypeDef GPIO_InitStructure = {0};
|
|
|
+
|
|
|
+ GPIO_InitStructure.GPIO_Pin = pin;
|
|
|
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
|
|
|
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
|
|
|
+ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
|
|
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
|
|
+ GPIO_Init(port, &GPIO_InitStructure);
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+static void set_pin_as_input(GPIO_TypeDef *port, uint8_t pin)
|
|
|
+{
|
|
|
+ GPIO_InitTypeDef GPIO_InitStructure = {0};
|
|
|
+
|
|
|
+ GPIO_InitStructure.GPIO_Pin = pin;
|
|
|
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
|
|
|
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
|
|
+ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
|
|
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
|
|
+ GPIO_Init(port, &GPIO_InitStructure);
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
/********************************* (C) РОТЕК **********************************/
|