完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用到gpio35 gpio36用于按键检测,log发现
// 0~39 except from 20, 24, 28~31 are valid #define SOC_GPIO_VALID_GPIO_MASK (0xFFFFFFFFFFULL & ~(0ULL | BIT20 | BIT24 | BIT28 | BIT29 | BIT30 | BIT31)) #define GPIO_IS_VALID_GPIO(gpio_num) (((1ULL << (gpio_num)) & SOC_GPIO_VALID_GPIO_MASK) != 0) 是这样的! |
|
相关推荐
1个回答
|
|
ESP32-S2 是一款基于 Xtensa® L×4 处理器的低功耗微控制器,具有 48 个 GPIO 引脚。在 ESP32-S2 中,GPIO 34 至 GPIO 39 是特殊的 GPIO,它们具有中断功能。但是,对于 GPIO 35 和 GPIO 36,它们可以作为普通 GPIO 使用,但不能用于中断。
在您提供的代码中,定义了有效的 GPIO 引脚范围,排除了 20、24、28、29、30 和 31。这意味着 GPIO 35 和 GPIO 36 是有效的 GPIO 引脚,可以作为普通 GPIO 使用。 ```c #define SOC_GPIO_VALID_GPIO_MASK (0xFFFFFFFFFFULL & ~(0ULL | BIT20 | BIT24 | BIT28 | BIT29 | BIT30 | BIT31)) #define GPIO_IS_VALID_GPIO(gpio_num) (((1ULL << (gpio_num)) & SOC_GPIO_VALID_GPIO_MASK) != 0) ``` 要使用 GPIO 35 和 GPIO 36 进行按键检测,您可以按照以下步骤操作: 1. 初始化 GPIO 引脚:将 GPIO 35 和 GPIO 36 设置为输入模式,并启用内部上拉或下拉电阻。 ```c gpio_config_t io_conf; io_conf.intr_type = GPIO_PIN_INTR_DISABLE; // Disable interrupt io_conf.mode = GPIO_MODE_INPUT; // Set as Input io_conf.pin_bit_mask = (1ULL< io_conf.pull_up_en = 1; // Enable pull-up gpio_config(&io_conf); ``` 2. 检测按键状态:在您的主循环中,定期检查 GPIO 35 和 GPIO 36 的状态。如果按键被按下,可以执行相应的操作。 ```c while (1) { if (gpio_get_level(GPIO_NUM_35) == 0) { // GPIO 35 is pressed, do something } if (gpio_get_level(GPIO_NUM_36) == 0) { // GPIO 36 is pressed, do something } vTaskDelay(100 / portTICK_PERIOD_MS); // Delay for 100ms } ``` 请注意,这种方法不是中断驱动的,而是轮询检测按键状态。虽然这种方法可能不如中断驱动的方法响应速度快,但它可以确保您的程序能够检测到按键事件。 |
|
|
|
只有小组成员才能发言,加入小组>>
313 浏览 0 评论
1170 浏览 1 评论
586浏览 6评论
483浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
442浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 17:53 , Processed in 0.831121 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号