昨天下午和今天上午都在调试开发板的按键,按照DEMO程序的代码,Tamper按键中断法很容易就用起来了,但我想启用长按和短按功能,却反复调试都不成功,同样的代码我在STM32F103C8T6最小系统板上都能正常使用,而在这个开发板上却无法掌握长按和短按的区别,请各位帮忙看看是什么原因!代码如下:
- void EXTI4_15_IRQHandler(void)
- {
- if(RESET != exti_interrupt_flag_get(EXTI_13)){
- delay_ms(20);
- if (RESET == gpio_input_bit_get(GPIOC,GPIO_PIN_13))
- keys = 1;
- gpio_bit_toggle(GPIOA,GPIO_PIN_12); //翻转LED3引脚状态
- delay_ms(200);
- if (RESET == gpio_input_bit_get(GPIOC,GPIO_PIN_13)) keys = 2;
- key_proc();
- gpio_bit_toggle(GPIOA,GPIO_PIN_11); //翻转LED2引脚状态
- exti_interrupt_flag_clear(EXTI_13); //清除中断标志
- }
- }
复制代码
其中的延时我从100到500ms之间反复调试都不行,得到的键值似乎是随机的。
为了获得两个按键,我盯了上开发板上的Wakeup按键,我启用和设置了相关引脚,代码如下:
- void key_init(void)
- {
- /* enable the Tamper key GPIO clock */
- rcu_periph_clock_enable(RCU_GPIOC);
- rcu_periph_clock_enable(RCU_CFGCMP);
- gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_13);
- gpio_output_options_set(GPIOC, GPIO_PUPD_NONE, GPIO_OSPEED_50MHZ, GPIO_PIN_13);
- /* enable and set key EXTI interrupt priority */
- nvic_irq_enable(EXTI4_15_IRQn,1U);
- /* connect key EXTI line to key GPIO pin */
- syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13);
- /* configure key EXTI line */
- exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_RISING);
- exti_interrupt_flag_clear(EXTI_13);
- /***** enble the Warkup key GPIO cloock *****/
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(RCU_CFGCMP);
- gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
- gpio_output_options_set(GPIOA, GPIO_PUPD_NONE, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
- }
复制代码
但一直无法获得按键的状态,不知是何原因。
|