完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想让我ESP8266 GPIO 中断正常工作,但到目前为止我还做不到。我将附加代码中感兴趣的部分。
我的目标是使用 OS-SDK 驱动程序在 GPIO0 上设置中断,并根据 GPIO0 按钮按下切换 GPIO4 值。现在,当我按下按钮,触发GPIO0引脚时,没有任何反应。 更新:现在中断被触发。问题是在 key_init_single() 中传递 GPIO_ID_PIN(0) 而不是 GPIO_Pin_0。但是现在,只要我按下 GPIO0 开关,模块就会有多个系统复位。我已经在 key.c 中禁用了内部上拉,因为我在 PCB 上放置了一个外部上拉。哪个可能是可能的原因? #include "esp_common.h" #include "esp8266/gpio_register.h" #include "gpio.h" #include "key.h" #include "user_config.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" LOCAL 结构keys_param键; LOCAL struct single_key_param *single_key[KEY_NUM]; LOCAL int 状态=0; xTaskHandle switch_set_point; LOCAL 无效 key_shortpress(){ state^=1; //GPIO_OUTPUT_SET(GPIO_ID_PIN(4), state); printf("Short_press %dn",state); return; } LOCAL 无效 key_longpress(){ printf("Long_pressn"); return; } void switch_set (void *pvParameters){ //output configuration---------------------------------------------------------------------- GPIO_ConfigTypeDef gpio_out_cfg; gpio_out_cfg.GPIO_Mode = GPIO_Mode_Output; gpio_out_cfg.GPIO_Pin = GPIO_Pin_4; gpio_config(&gpio_out_cfg); //input configuration---------------------------------------------------------------------- //declaring the input key single_key[0]=key_init_single(GPIO_ID_PIN(0),PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0,key_longPress,key_shortPress); keys.key_num = KEY_NUM; keys.single_key = single_key; key_init(&keys); printf("set_interrupt and closing taskn"); vTaskDelete(switch_set_point); } 无效ICACHE_FLASH_ATTR user_init(无效) { printf("SDK version:%sn", system_get_sdk_version()); /* need to set opmode before you set config */ wifi_set_opmode(STATION_MODE); xTaskCreate(switch_set, "switch_set", 256, NULL, (1), &switch_set_point); } |
|
相关推荐
1个回答
|
|
从您的描述来看,您已经成功地触发了GPIO0中断,但问题在于每次按下按钮时,ESP8266模块都会发生多次系统复位。这可能是由于以下几个原因:
1. **中断处理函数中的无限循环**:如果中断处理函数中存在无限循环,这可能导致系统无法正常工作,从而触发复位。请检查您的中断处理函数,确保没有无限循环。 2. **中断优先级设置不当**:如果中断优先级设置得过高,可能会导致其他中断被阻塞,从而影响系统的正常工作。请检查您的中断优先级设置,确保它们是合适的。 3. **硬件问题**:可能是由于外部上拉电阻的问题,导致GPIO0引脚的电压不稳定。您可以尝试调整外部上拉电阻的值,或者检查PCB上的焊接和布局是否正确。 4. **软件问题**:可能是由于RTOS-SDK中的某些代码错误或配置问题导致的。您可以尝试更新RTOS-SDK到最新版本,或者查看官方文档和社区论坛,看看是否有其他人遇到类似问题并提供了解决方案。 5. **电源问题**:如果电源不稳定,可能会导致模块在按下按钮时发生复位。请检查您的电源供应是否稳定,以及电源电路是否正确连接。 为了解决这个问题,您可以尝试以下步骤: 1. **检查中断处理函数**:确保中断处理函数中没有无限循环,并正确处理GPIO0中断。 2. **调整中断优先级**:检查并调整中断优先级设置,确保它们是合适的。 3. **检查硬件**:检查外部上拉电阻的值,以及PCB上的焊接和布局是否正确。 4. **更新RTOS-SDK**:更新RTOS-SDK到最新版本,并查看官方文档和社区论坛,看看是否有其他人遇到类似问题并提供了解决方案。 |
|
|
|
只有小组成员才能发言,加入小组>>
140 浏览 0 评论
1158 浏览 1 评论
584浏览 6评论
482浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
467浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 15:32 , Processed in 0.681541 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号