ESP32-S3-WRoom-1 GPIO15和GPIO17做为输入管脚工作不正常

lylrabbit
Posts: 2
Joined: Fri Jul 14, 2023 4:09 am

ESP32-S3-WRoom-1 GPIO15和GPIO17做为输入管脚工作不正常

Postby lylrabbit » Sat Aug 10, 2024 3:42 am

一共12个管脚做为输入,因为有复合按键功能,所以不能用矩阵的方式
所有的按键都外接3.3V上拉,电阻4.7K,结果其它按键工作都正常,只有这两个工作不正常

IO15和IO17不能工作的现象还不一样,
当按键按下时,IO15在外部量着电压变化正常,不按时是3.3V,按下是0V,但程序里检测不到
IO17是不管按下没有,直接量IO17的管脚电压,都是0,因为没有电压变化,所以没办法检测到

uint8_t keyNum[13]={8,18,17,16 ,15,7,21,4 ,6,45,5,9, 47};//定义了13个,最后一个用做其它用途

初始化部分代码
gpio_config_t key_gpio_config;
key_gpio_config.mode = GPIO_MODE_INPUT;
key_gpio_config.pull_up_en = 1;
key_gpio_config.pull_down_en = 0;
key_gpio_config.pin_bit_mask = 0;
key_gpio_config.intr_type = 0;

for (int i = 0; i < 12; i++)
{
key_gpio_config.pin_bit_mask |= 1ULL << keyNum;

}
ESP_ERROR_CHECK(gpio_config(&key_gpio_config));


key_gpio_config.mode = GPIO_MODE_OUTPUT;
key_gpio_config.pull_down_en = 1;
key_gpio_config.pin_bit_mask = 1ULL << keyNum[12];
ESP_ERROR_CHECK(gpio_config(&key_gpio_config));

检测部分代码
uint16_t ReadKey(void)
{
uint16_t nKey = 0;//0x8000;
for (size_t i = 0; i < 11; i++)
{
if (!gpio_get_level(keyNum))
{
nKey |= 1ULL << i;
}
}

return nKey;

}

Who is online

Users browsing this forum: No registered users and 23 guests