์ค์์น ์ฑํฐ๋ง
ํธ์ฌ ๋ฆฌํด ์ค์์น๋ฅผ ๋๋ฅผ ๋ ๋ฐ์ํ ์ ์๋ ๋
ธ์ด์ฆ๋ ๋ถ์์ ํ ์ ํธ๋ก ์ธํด ์ค์์น๊ฐ ์ฌ๋ฌ ๋ฒ ๋๋ ธ๋ค๊ณ ์ธ์๋๋ ํ์์ "์ฑํฐ๋ง" ๋๋ "๋๋ฐ์ด์ฑ" ๋ฌธ์ ๋ผ๊ณ ํ๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋๋ฐ์ด์ฑ ํํฐ๋ง์ ์ ์ฉํด์ผ ํ๋ค. ๋๋ฐ์ด์ฑ์ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์๋ ํ๋์จ์ด์ ๋ฐฉ๋ฒ๊ณผ ์ํํธ์จ์ด์ ๋ฐฉ๋ฒ์ด ์๋ค. ์ด๋ฒ ํฌ์คํ
์ ์ํํธ์จ์ด ๋๋ฐ์ด์ฑ์ ํตํด ์ฑํฐ๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ค ํ๋ค.
์ํํธ์จ์ด ๋๋ฐ์ด์ฑ์ ์ฝ๋๋ก ๋๋ฐ์ด์ฑ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์๋ค. ์ฃผ๋ก ํ์ด๋จธ๋ฅผ ์ด์ฉํ์ฌ ์ผ์ ์๊ฐ ๋์ ์ ํธ๊ฐ ์์ ์ ์ธ์ง ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
๐ 1. ์ฝ๋
/* USER CODE BEGIN PTD */
#define DEBOUNCE_DELAY 30 /* 30ms */
/* USER CODE END PTD */
...
/* USER CODE BEGIN 0 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
volatile uint32_t lastInterruptTime = 0;
/* USER CODE END 0 */
...
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == BTN_Pin)
{
uint32_t currentTime = HAL_GetTick(); /* check current time */
if ((currentTime - lastInterruptTime) > DEBOUNCE_DELAY){ /* check filtering 30ms time */
lastInterruptTime = currentTime; /* update interrupt time */
if (HAL_GPIO_ReadPin(GPIOA, BTN_Pin) == GPIO_PIN_SET){
HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, GPIO_PIN_RESET);
}
}
}
}
/* USER CODE END 4 */
- ํ์ด๋จธ ์ฌ์ฉ: HAL_GetTick() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์๊ฐ์ ๊ฐ์ ธ์จ๋ค. ์ด ํจ์๋ ์์คํ ์ด ๋ถํ ๋ ์ดํ์ ๋ฐ๋ฆฌ์ด(ms) ๋จ์ ์๊ฐ์ ๋ฐํํ๋ค.
- ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ์์ ๋๋ฐ์ด์ฑ ์ ์ฉ: ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ํ์ฌ ์๊ฐ๊ณผ ๋ง์ง๋ง ์ธํฐ๋ฝํธ ๋ฐ์ ์๊ฐ์ ๋น๊ตํ์ฌ ๋๋ฐ์ด์ฑ ์๊ฐ์ ์ด๊ณผํ ๊ฒฝ์ฐ์๋ง ๋ฒํผ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ค.
- ๋๋ฐ์ด์ฑ ์๊ฐ ์ค์ : DEBOUNCE_DELAY ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฐ์ด์ฑ ์๊ฐ์ ์ค์ ํ๋ค. ์ฌ๊ธฐ์๋ 50ms๋ก ์ค์ ํ์๋ค.
๐ 2. ํน์ง
- ๋๋ฐ์ด์ฑ ์๊ฐ ์ ํ: ๋๋ฌด ์งง์ผ๋ฉด ์ฑํฐ๋ง์ ์์ ํ ์ ๊ฑฐํ์ง ๋ชปํ๊ณ , ๋๋ฌด ๊ธธ๋ฉด ๋ฒํผ ์ ๋ ฅ์ ๋ํ ์๋ต์ฑ์ด ๋จ์ด์ง ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก 10ms์์ 50ms ์ฌ์ด์ ๊ฐ์ด ์ ์ ํ๋ค.
- ํ์ด๋จธ ์ฌ์ฉ: ์ํํธ์จ์ด ๋๋ฐ์ด์ฑ์ ๊ตฌํํ ๋ ํ์ด๋จธ๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐ๋ฝํธ ๋ฐ์ ํ ์ผ์ ์๊ฐ ๋์ ๋ฒํผ ์ ๋ ฅ์ ๋ฌด์ํ ์ ์๋ค.
- ์ํ ํ์ธ: ๋ฒํผ์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ , ์ผ์ ์๊ฐ ๋์ ์ํ๊ฐ ๋ณํ์ง ์๋ ๊ฒฝ์ฐ์๋ง ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
์ด๋ฌํ ๋ฐฉ๋ฒ๋ค์ ํตํด ๋ฒํผ์ ์ฑํฐ๋ง ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค. ์ํํธ์จ์ด ๋๋ฐ์ด์ฑ์ ์ฝ๋๋ก ๊ฐ๋จํ ๊ตฌํํ ์ ์๋ค. ์ฝ๋๋ฅผ ์์ธํ ๋ณด๋ฉด volatile ํค์๋๋ฅผ ์ฌ์ฉํ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๋ค์ ํฌ์คํ ์ volatile ํค์๋์ ๋ํด ์๊ฐํด๋ณด๋ ค ํ๋ค.
'๐ง STM32' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[STM32] 10. UART, USART ๋์ ์๋ฆฌ ์ค๋ช (0) | 2024.11.22 |
---|---|
[STM32] 9. Volatile ํค์๋ (0) | 2024.11.22 |
[STM32] 7. ์ธ๋ถ ์ธํฐ๋ฝํธ(External Interrupt) (0) | 2024.11.18 |
[STM32] 6. ํ์ ์ ํญ ๊ธฐ๋ณธ ์๋ฆฌ (0) | 2024.11.18 |
[STM32] 5. ๋ด์ฅ ์ค์์น ์ ์ด (0) | 2024.11.17 |