- MultiTimer LED_MultiTimer;
- /*!
- * [url=home.php?mod=space&uid=247401]@brief[/url] LED MultiTimer callback
- *
- * @param None
- *
- * @retval None
- *
- */
- void LED_MultiTimerCallback(MultiTimer *timer, void *userData)
- {
- if (BIT_SET != GPIO_ReadOutputBit(GPIOE, GPIO_PIN_5))
- {
- GPIO_WriteBitValue(GPIOE, GPIO_PIN_5, BIT_SET);
- }
- else
- {
- GPIO_WriteBitValue(GPIOE, GPIO_PIN_5, BIT_RESET);
- }
- if (BIT_SET != GPIO_ReadOutputBit(GPIOE, GPIO_PIN_6))
- {
- GPIO_WriteBitValue(GPIOE, GPIO_PIN_6, BIT_SET);
- }
- else
- {
- GPIO_WriteBitValue(GPIOE, GPIO_PIN_6, BIT_RESET);
- }
- MultiTimerStart(&LED_MultiTimer, 250, LED_MultiTimerCallback, "LED");
- }
- /*!
- * @brief LED Init
- *
- * @param None
- *
- * @retval None
- *
- */
- void LED_Init(void)
- {
- GPIO_Config_T GPIO_ConfigStruct;
- RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOE);
- GPIO_ConfigStructInit(&GPIO_ConfigStruct);
- GPIO_ConfigStruct.pin = GPIO_PIN_5 | GPIO_PIN_6;
- GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
- GPIO_ConfigStruct.mode = GPIO_MODE_OUT_PP;
- GPIO_Config(GPIOE, &GPIO_ConfigStruct);
- MultiTimerStart(&LED_MultiTimer, 250, LED_MultiTimerCallback, "LED");
- }
KEY实现代码:
- MultiTimer KEY_MultiTimer;
- struct Button btnKEY1, btnKEY2;
- /*!
- * @brief Read key input level
- *
- * @param btn
- *
- * @retval level
- *
- */
- uint8_t read_pin_level(uint8_t pin_id)
- {
- switch (pin_id)
- {
- case 0:
- return (GPIO_ReadInputBit(GPIOA, GPIO_PIN_0));
- case 1:
- return (GPIO_ReadInputBit(GPIOA, GPIO_PIN_1));
- default:
- return (BIT_SET);
- }
- }
- /*!
- * @brief Key handler
- *
- * @param btn
- *
- * @retval None
- *
- */
- void KEY_Handler(void *btn)
- {
- Button *key = btn;
- uint8_t button_id = key->button_id + 1;
- switch (key->event)
- {
- case PRESS_DOWN:
- printf("\r\nKEY%d : PRESS_DOWN", button_id);
- break;
- case PRESS_UP:
- printf("\r\nKEY%d : PRESS_UP", button_id);
- break;
- case SINGLE_CLICK:
- printf("\r\nKEY%d : SINGLE_CLICK", button_id);
- break;
- case DOUBLE_CLICK:
- printf("\r\nKEY%d : DOUBLE_CLICK", button_id);
- break;
- case LONG_PRESS_START:
- printf("\r\nKEY%d : LONG_PRESS_START", button_id);
- break;
- case LONG_PRESS_HOLD:
- printf("\r\nKEY%d : LONG_PRESS_HOLD", button_id);
- break;
- default:
- break;
- }
- }
- /*!
- * @brief KEY MultiTimer callback
- *
- * @param None
- *
- * @retval None
- *
- */
- void KEY_MultiTimerCallback(MultiTimer *timer, void *userData)
- {
- button_ticks();
- MultiTimerStart(&KEY_MultiTimer, 5, KEY_MultiTimerCallback, "KEY");
- }
- /*!
- * @brief KEY Init
- *
- * @param None
- *
- * @retval None
- *
- */
- void KEY_Init(void)
- {
- GPIO_Config_T GPIO_ConfigStruct;
- RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
- GPIO_ConfigStructInit(&GPIO_ConfigStruct);
- GPIO_ConfigStruct.pin = GPIO_PIN_0 | GPIO_PIN_1;
- GPIO_ConfigStruct.mode = GPIO_MODE_IN_PU;
- GPIO_Config(GPIOA, &GPIO_ConfigStruct);
- button_init(&btnKEY1, read_pin_level, BIT_RESET, 0);
- button_attach(&btnKEY1, SINGLE_CLICK, KEY_Handler);
- button_start(&btnKEY1);
- button_init(&btnKEY2, read_pin_level, BIT_RESET, 1);
- button_attach(&btnKEY2, SINGLE_CLICK, KEY_Handler);
- button_start(&btnKEY2);
- MultiTimerStart(&KEY_MultiTimer, 5, KEY_MultiTimerCallback, "KEY");
- }
printf实现代码: