• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Подключение кнопок к GPIO. Перестал работать ресет

Br.Misha

New member
Имею многолетний опыт работы с микроконтроллерами и это первый случай, когда я не смог подключить обычную кнопку.
Всего нужно подключить 4 кнопки, я их подключил GPIO 2, 3, 4, 14. Во избежание повреждения GPIO, я подключал кнопки на GND через 200 ом. Код инициализации следующий:
Код:
#define BTN_CALL_RECALL    3
#define BTN_START        4
#define BTN_STOP        2
#define BTN_DELETE        14

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_GPIO3);    // переназначаем RX0 как GPIO
    os_printf("BTN_STOP = %d\n", set_gpio_mode(BTN_STOP, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_DELETE = %d\n", set_gpio_mode(BTN_DELETE, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_CALL_RECALL = %d\n", set_gpio_mode(BTN_CALL_RECALL, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_START = %d\n", set_gpio_mode(BTN_START, GPIO_PULLUP, GPIO_INPUT));

    //    зачем это я не совсем понимаю, но в работающем примере, который мне сбросили, это было
    GPIO_OUTPUT_SET(BTN_STOP, 1);
    GPIO_OUTPUT_SET(BTN_DELETE, 1);
    GPIO_OUTPUT_SET(BTN_CALL_RECALL, 1);
    GPIO_OUTPUT_SET(BTN_START, 1);
Кнопки почему-то работать не захотели. Начал тыкать мультиметром для поиска проблемы, оказалось, что на некоторых (или на всех, не помню) портах, к которым подключены кнопки при не нажатой кнопке 3,3В (подтяжка, как понимаю), при нажатии - 3В (при этом на кнопке 0В). Получается, данные порты не были настроены как вход?
Собственно, самое печальное то, что перестал работать ресет. Тоесть, при замыкании reset на gnd модуль не перезагружается. Если отключить питание на несколько мин, а потом включить, то ресет 1-2 раза может сработать, а потом опять перестает.

Где я накосячил?
 

tretyakov_sa

Moderator
Команда форума
Имею многолетний опыт работы с микроконтроллерами и это первый случай, когда я не смог подключить обычную кнопку.
Всего нужно подключить 4 кнопки, я их подключил GPIO 2, 3, 4, 14. Во избежание повреждения GPIO, я подключал кнопки на GND через 200 ом. Код инициализации следующий:
Код:
#define BTN_CALL_RECALL    3
#define BTN_START        4
#define BTN_STOP        2
#define BTN_DELETE        14

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_GPIO3);    // переназначаем RX0 как GPIO
    os_printf("BTN_STOP = %d\n", set_gpio_mode(BTN_STOP, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_DELETE = %d\n", set_gpio_mode(BTN_DELETE, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_CALL_RECALL = %d\n", set_gpio_mode(BTN_CALL_RECALL, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_START = %d\n", set_gpio_mode(BTN_START, GPIO_PULLUP, GPIO_INPUT));

    //    зачем это я не совсем понимаю, но в работающем примере, который мне сбросили, это было
    GPIO_OUTPUT_SET(BTN_STOP, 1);
    GPIO_OUTPUT_SET(BTN_DELETE, 1);
    GPIO_OUTPUT_SET(BTN_CALL_RECALL, 1);
    GPIO_OUTPUT_SET(BTN_START, 1);
Кнопки почему-то работать не захотели. Начал тыкать мультиметром для поиска проблемы, оказалось, что на некоторых (или на всех, не помню) портах, к которым подключены кнопки при не нажатой кнопке 3,3В (подтяжка, как понимаю), при нажатии - 3В (при этом на кнопке 0В). Получается, данные порты не были настроены как вход?
Собственно, самое печальное то, что перестал работать ресет. Тоесть, при замыкании reset на gnd модуль не перезагружается. Если отключить питание на несколько мин, а потом включить, то ресет 1-2 раза может сработать, а потом опять перестает.

Где я накосячил?
Впечатление такое, что шина GND в обрыве.
 

Br.Misha

New member
ещё один прикол - модуль перезагружается при касании пинцетом к металлическому корпусу (иногда даже при касании к GND). Думаю, б
 

Sergeyrca

New member
Столкнулся с такой же проблемой.
Имею многолетний опыт работы с микроконтроллерами и это первый случай, когда я не смог подключить обычную кнопку.
Всего нужно подключить 4 кнопки, я их подключил GPIO 2, 3, 4, 14. Во избежание повреждения GPIO, я подключал кнопки на GND через 200 ом. Код инициализации следующий:
Код:
#define BTN_CALL_RECALL    3
#define BTN_START        4
#define BTN_STOP        2
#define BTN_DELETE        14

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_GPIO3);    // переназначаем RX0 как GPIO
    os_printf("BTN_STOP = %d\n", set_gpio_mode(BTN_STOP, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_DELETE = %d\n", set_gpio_mode(BTN_DELETE, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_CALL_RECALL = %d\n", set_gpio_mode(BTN_CALL_RECALL, GPIO_PULLUP, GPIO_INPUT));
    os_printf("BTN_START = %d\n", set_gpio_mode(BTN_START, GPIO_PULLUP, GPIO_INPUT));

    //    зачем это я не совсем понимаю, но в работающем примере, который мне сбросили, это было
    GPIO_OUTPUT_SET(BTN_STOP, 1);
    GPIO_OUTPUT_SET(BTN_DELETE, 1);
    GPIO_OUTPUT_SET(BTN_CALL_RECALL, 1);
    GPIO_OUTPUT_SET(BTN_START, 1);
Кнопки почему-то работать не захотели. Начал тыкать мультиметром для поиска проблемы, оказалось, что на некоторых (или на всех, не помню) портах, к которым подключены кнопки при не нажатой кнопке 3,3В (подтяжка, как понимаю), при нажатии - 3В (при этом на кнопке 0В). Получается, данные порты не были настроены как вход?
Собственно, самое печальное то, что перестал работать ресет. Тоесть, при замыкании reset на gnd модуль не перезагружается. Если отключить питание на несколько мин, а потом включить, то ресет 1-2 раза может сработать, а потом опять перестает.

Где я накосячил?
Нашлось решение? Просто у меня такая же проблема сейчас, подскажите как победили
 
Сверху Снизу