嗨对话框
我在基于DA14681的定制板上工作。我使用gpio上的两个按钮来执行一些任务,它们工作得很完美。
然后我使用一个GPIO,它直接连接到USB电源。当USB连接这个GPIO高,我做一个特定的任务,这也是工作完美。
问题是我正在使用休眠模式,我正在使用这个USB电源GPIO作为唤醒目的。当处于休眠模式时,只要我插入USB,它就会唤醒并完美工作,但其他两个按钮停止工作,然后USB被移除,然后这两个按钮又开始工作。我无法理解这个问题。
下面是main.c中的代码
pm_system_init (periph_init);
hw_wkup_init(空);
hw_wkup_configure_pin (DIS_BUTTON_PORT DIS_BUTTON_PIN,真的,HW_WKUP_PIN_STATE_HIGH);/ /按钮1
hw_wkup_configure_pin (PWR_BUTTON_PORT PWR_BUTTON_PIN,真的,HW_WKUP_PIN_STATE_HIGH);/ /按钮2
hw_wkup_configure_pin(HW_GPIO_PORT_4, HW_GPIO_PIN_0, true, HW_WKUP_PIN_STATE_HIGH);//唤醒usb连接
hw_wkup_set_debounce_time (10);
hw_wkup_set_counter_threshold (1);
hw_wkup_register_interrupt (wkup_cb, 1);
关键词:
设备:
嗨mahmed106,
请说明一下,是否有在外围初始化(函数)中配置的按钮?我猜你的设备是靠电池供电的,对吗?
谢谢,PM_Dialog
是的,设备通过电池供电,这是我的外围初始化功能,我定义了按钮,但没有定义usb连接gpio。
静态孔隙periph_init(空白)
{
#if 1 //定义CONFIG_RETARGET
/ *
* JLink模拟串口的解决方案。
*
* JLink串口不设置其输出UART引脚高(UART空闲状态),除非
有东西从PC传输到主板。
*板复位后,电平切换器保持低引脚状态。
*配置引脚为UART_RX不打开拉起电阻,因此RX线保持低
*,此状态通常被检测为中断条件。
*低状态下的UART RX,配置UART是不成功的:波特率
*设置UART进入忙碌状态,所有其他设置被忽略。
*
*工作区设置引脚,将作为UART RX输出与高状态。
*这将导致电平转换保持这个状态,直到JLink开始驱动这个
*传输线路。
* /
#如果OLD_HARDWARE
hw_gpio_set_pin_function (HW_GPIO_PORT_1 HW_GPIO_PIN_0、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_UART_TX);
#else //同样适用于干燥和液体
REG_SET_BIT (CRG_PER USBPAD_REG USBPAD_EN);
hw_gpio_set_pin_function (HW_GPIO_PORT_2 HW_GPIO_PIN_2、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_UART_TX);
# endif
// hw_gpio_set_pin_function(HW_GPIO_PORT_2, HW_GPIO_PIN_2, HW_GPIO_MODE_OUTPUT,
/ / HW_GPIO_FUNC_UART_RX);
# endif
hw_gpio_configure_pin (HW_GPIO_PORT_2 HW_GPIO_PIN_3、HW_GPIO_MODE_INPUT_PULLUP HW_GPIO_FUNC_GPIO, 1);
//hw_gpio_configure_pin(HW_GPIO_PORT_2, HW_GPIO_PIN_3, HW_GPIO_MODE_OUTPUT,HW_GPIO_FUNC_GPIO, 1);
hw_gpio_set_pin_function (HW_GPIO_PORT_1 HW_GPIO_PIN_5、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_UART2_TX);
hw_gpio_set_pin_function (HW_GPIO_PORT_2 HW_GPIO_PIN_3、HW_GPIO_MODE_INPUT_PULLUP HW_GPIO_FUNC_UART2_RX);
hw_gpio_configure_pin(BUZZ_PORT, BUZZ_PIN, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, 0);
hw_gpio_configure_pin(THM_PWR_PORT, THM_PWR_PIN, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, 0);
//hw_gpio_configure_pin(PELT_PORT, PELT_PIN, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, 0);
//hw_gpio_configure_pin(INFAN_PORT,INFAN_PIN, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, 0);
hw_gpio_configure_pin(TH1_PORT, TH1_PIN, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, 0);
hw_gpio_configure_pin(TH2_PORT, TH2_PIN, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, 0);
hw_gpio_configure_pin(TH3_PORT, TH3_PIN, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, 0);
hw_gpio_configure_pin (PWR_BUTTON_PORT PWR_BUTTON_PIN、HW_GPIO_MODE_INPUT_PULLDOWN HW_GPIO_FUNC_GPIO, 0);
hw_gpio_configure_pin (DIS_BUTTON_PORT DIS_BUTTON_PIN、HW_GPIO_MODE_INPUT_PULLDOWN HW_GPIO_FUNC_GPIO, 0);
hw_gpio_configure_pin (HW_GPIO_PORT_3 HW_GPIO_PIN_7、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_GPIO, 1);/ / 3.3 v
}
嗨mahmed106,
这有点奇怪,因为一旦设备从休眠中醒来,它就像一个冷启动和外围的init()配置将被执行。你能不能试着用一个逻辑分析仪跟踪与按钮连接的gpio,以便了解它是硬件还是软件相关的问题?
谢谢,PM_Dialog