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

์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋Š” ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์™ธ๋ถ€ ์‹ ํ˜ธ(์˜ˆ: ๋ฒ„ํŠผ ์ž…๋ ฅ, ์„ผ์„œ ์‹ ํ˜ธ ๋“ฑ)์— ์˜ํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์ค‘๋‹จํ•˜๊ณ , ํŠน์ • ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด(ISR, Interrupt Service Routine)์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. STM32 ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋„ ์ด๋Ÿฌํ•œ ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ 1. ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ ๋ž€?

์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋Š” ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ์˜ ํŠน์ • ํ•€์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์‹ ํ˜ธ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ธํ„ฐ๋ŸฝํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋‹ค.

  • ๋ฒ„ํŠผ ๋ˆ„๋ฆ„ ๊ฐ์ง€
  • ์„ผ์„œ์˜ ์‹ ํ˜ธ ๋ณ€ํ™” ๊ฐ์ง€
  • ์™ธ๋ถ€ ์žฅ์น˜์™€์˜ ํ†ต์‹  ์‹ ํ˜ธ ๊ฐ์ง€

์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •๋˜๊ณ  ์‚ฌ์šฉ๋œ๋‹ค.

  1. ์ธํ„ฐ๋ŸฝํŠธ ์†Œ์Šค ์„ค์ •: ํŠน์ • GPIO ํ•€์„ ์ธํ„ฐ๋ŸฝํŠธ ์†Œ์Šค๋กœ ์„ค์ •ํ•œ๋‹ค.
  2. ์ธํ„ฐ๋ŸฝํŠธ ๋ชจ๋“œ ์„ค์ •: ์ƒ์Šน ์—ฃ์ง€, ํ•˜๊ฐ• ์—ฃ์ง€, ๋˜๋Š” ์–‘์—ฝ(๋‘˜ ๋‹ค)์„ ๊ฐ์ง€ํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.
  3. ์ธํ„ฐ๋ŸฝํŠธ ํ™œ์„ฑํ™”: NVIC(์ค‘์•™ ์ธํ„ฐ๋ŸฝํŠธ ์ปจํŠธ๋กค๋Ÿฌ)์—์„œ ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•œ๋‹ค.
  4. ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด(ISR) ์ž‘์„ฑ: ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ ์†Œ์Šค ์„ค์ •
์ƒ์Šน ์—ฃ์ง€, ํ•˜๊ฐ• ์—ฃ์ง€, ๋˜๋Š” ์–‘์—ฝ(๋‘˜ ๋‹ค)์„ ๊ฐ์ง€ํ•˜๋„๋ก ์„ค์ •
์ธํ„ฐ๋ŸฝํŠธ ํ™œ์„ฑํ™”

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == BTN_Pin)
	{
		 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 */

๐Ÿ“Œ 2. ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์‹ค์‹œ๊ฐ„ ์‘๋‹ต: ์™ธ๋ถ€ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”์ธ ๋ฃจํ”„๋ฅผ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ „๋ ฅ ํšจ์œจ์„ฑ: ์ €์ „๋ ฅ ๋ชจ๋“œ์—์„œ ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์žˆ๋‹ค๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊นจ์–ด๋‚˜์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํšจ์œจ์ ์ธ ์ž์› ์‚ฌ์šฉ: ์ง€์†์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ํด๋ง(polling)ํ•˜๋Š” ๋Œ€์‹ , ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด CPU ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ 3. while๋ฌธ ๋Œ€์‹  ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ฉ”์ธ ๋ฃจํ”„(while ๋ฌธ)์—์„œ ํŠน์ • ์กฐ๊ฑด์„ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฒ„ํŠผ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋น„ํšจ์œจ์ ์ด๋‹ค. ํด๋ง ๋ฐฉ์‹์œผ๋กœ ๋ฒ„ํŠผ ์ž…๋ ฅ์„ ํ™•์ธํ•˜๋ฉด CPU ์ž์›์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋œ๋‹ค. ๋‹ค์Œ์€ ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ด๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
18์ง„์ˆ˜