STM32_Tutorial_09 - 8BitsCoding/RobotMentor GitHub Wiki


์™ธ๋ถ€์ธํ„ฐ๋ŸฝํŠธ EXTI ๋ž€?

์™ธ๋ถ€์ธํ„ฐ๋ŸฝํŠธ๋ž€ GPIO์— ์ „๊ธฐ์ ์‹ ํ˜ธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์™ธ๋ถ€ MCU๋กœ ์ธํ„ฐ๋ŸฝํŠธ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

์ด์ „์˜ Switch๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ ํด๋ง๋ฐฉ์‹์œผ๋กœ while๋ฌธ ๋‚ด์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ GPIO๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹๋ณด๋‹ค MCU ๋ถ€ํ•˜๊ฐ€ ์ ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ๋Š” GPIO์˜ ์ „๊ธฐ์ ์‹ ํ˜ธ๊ฐ€ Low->High ํ˜น์€ High->Low๋กœ ๋ณ€ํ•  ์‹œ MCU๋กœ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ์˜ค๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

CPU์˜ ํด๋Ÿญ์†Œ๋ชจ๊ฐ€ ์—†์Œ.

์ด๋ฏธ์ง€

๊ฐ 0๋ฒˆ ํ•€์€ ์ธํ„ฐ๋ŸฝํŠธ 0์„ ๋ฐœ์ƒ 1๋ฒˆ์—ญ์‹œ 1๋ฒˆ ์ธํ„ฐ๋ŸฝํŠธ 15๋ฒˆ๊นŒ์ง€ ์ญˆ์šฑ..

์ด๋ฏธ์ง€

0~4๋ฒˆ๊นŒ์ง€ ์ธํ„ฐ๋ŸฝํŠธ๋Š” ๋…๋ฆฝ์ ์ธ ์ธํ„ฐ๋ŸฝํŠธ

5~9๋ฒˆ๊นŒ์ง€๋Š” ํ•˜๋‚˜์˜ ์ธํ„ฐ๋ŸฝํŠธ๋กœ ๋‚ด๋ถ€์—์„œ ๋ช‡๋ฒˆ ํ•€์„ ํ†ตํ•ด ๋“ค์–ด์™”๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•จ.

์ด๋ฏธ์ง€


์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž

CubeMX์˜ UserBnt๋ฅผ GPIO_EXIT์œผ๋กœ

์ด๋ฏธ์ง€

Configuration -> NVIC

์ด๋ฏธ์ง€

์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ ํ™œ์„ฑํ™”

์ด๋ฏธ์ง€

์ด๋ฏธ์ง€

Configuration -> GPIO

์ด๋ฏธ์ง€

Project -> Generate Code


์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด์ž.

// main
/* Initialize all configured peripherals */
MX_GPIO_Init();

// MX_GPIO_Init(); ๋‚ด๋ถ€
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = USER_Btn_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(USER_Btn_GPIO_Port, &GPIO_InitStruct);

์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ์ž˜ ์„ ์–ธ๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == GPIO_PIN_13)
	{
		// #define LD2_Pin GPIO_PIN_7
		// #define LD2_GPIO_Port GPIOB
		HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
	}
	else
	{

	}
}

HAL_GPIO_EXTI_Callback๋ฅผ main์— ์žฌ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค.