STM32 ๋ด์ฅ ์ค์์น ์ ์ด
์ด๋ฒ ํฌ์คํ ์ STM32 ๋ณด๋์ ์๋ ๋ด์ฅ ์ค์์น์ ๊ธฐ๋ฅ์ ์ค๋ช ํ๊ณ , ์ค์์น ์ ๋ ฅ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ํฌํจํ๋ค. ํ๊ธฐ ์ด๋ฏธ์ง์ ๊ฐ์ด Arduino UNO, ATMega328P, STM32 Board ๋ฑ ๋๋ถ๋ถ์ ๊ฐ๋ฐ ๋ณด๋๋ค์ ํ ์คํธ๋ฅผ ํด๋ณผ ์ ์๊ฒ๋ ์ค์์น๋ฅผ ๋ด์ฅํ๊ณ ์๋ค. ๋ค์ ํฌ์คํ ์ ์๊ฐํ ์์ ์ด์ง๋ง ์ด๋ฐ ๋ณด๋๋ค์ ์ค์์น๋ค์ ํ์ ์ ํญ ํ๋ก๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ํ์ ์ ํญ์ ์ ์๋จ์ ์ ํญ์ด ์๋ ํ๋ก๋ก ๋ ธ์ด์ฆ์ ๊ฐํ๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋๋ถ๋ถ์ ์์ฐ ์ ํ๋ค์ด ์ด ํ๋ก๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
๐ 1. STM32 ๋ด์ฅ ์ค์์น
- ์ค์์น์ ์ญํ : ์ค์์น๋ ์ฌ์ฉ์๊ฐ ์ ์ ์ฅ์น์ ๋ช ๋ น์ ๋ด๋ฆด ์ ์๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
- ๋ฌผ๋ฆฌ์ ๊ตฌ์ฑ: ๋๋ถ๋ถ์ STM32 ๋ณด๋์๋ ์ผ๋ฐ์ ์ผ๋ก "USER" ๋ผ๋ฒจ์ด ๋ถ์ ๋๋ฅผ ์ ์๋ ๋ฒํผ ํํ์ ์ค์์น๊ฐ ํ๋ ์ด์ ํฌํจ๋์ด ์๋ค.
๐ 2. STM32์์ ์ค์์น ์ฐ๊ฒฐ
- ๋ณด๋์ ์ค์์น ํ ์์น์ ๊ธฐ๋ฅ ํ์ธ: STM32 ๋ณด๋์ ๋ฐ์ดํฐ์ํธ ๋๋ ์ฌ์ฉ์ ๋งค๋ด์ผ์ ํตํด ์ค์์น๊ฐ ์ฐ๊ฒฐ๋ GPIO ํ์ ํ์ธํ๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ STM32F4 Discovery ๋ณด๋์์๋ ์ค์์น๊ฐ PA0 ํ์ ์ฐ๊ฒฐ๋์ด ์๋ค.
- ์ค์์น์ ์ ๊ธฐ์ ํน์ฑ: ๋๋ถ๋ถ์ ์ค์์น๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ (pull-up) ์ ํญ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ด, ์ค์์น๊ฐ ๋๋ฆฌ์ง ์์ ์ํ์์๋ ํ์ด ๋์ ์ ์(HIGH) ์ํ๋ฅผ ์ ์งํ๊ณ , ๋๋ ธ์ ๋๋ ๋ฎ์ ์ ์(LOW) ์ํ๊ฐ ๋๋ค.
๐ 3. ์ค์์น ์ ๋ ฅ์ ์ํ GPIO ์ค์
- Cube IDE์์ GPIO ์ค์ :
- Mode: Input (์ ๋ ฅ ๋ชจ๋๋ก ์ค์ )
- Pull: Pull-up (๋ด๋ถ ํ์ ์ ํญ ํ์ฑํ)
์ ์ด๋ฏธ์ง์ฒ๋ผ ์ค์ ํ๋ฉด ํ๊ธฐ์ ๊ฐ์ด ์ฝ๋๊ฐ ์๋์์ฑ๋๋ค.
๐ 4. Configuration Code ์ค๋ช
/* GPIO_SW_Pin ํ์ ๊ตฌ์ฑํ๋ ์ฝ๋ */
GPIO_InitStruct.Pin = GPIO_SW_Pin; // GPIO ์ด๊ธฐํ ๊ตฌ์กฐ์ฒด์์ ์ ์ดํ ํ์ ์ง์ (GPIO_SW_Pin)
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // ํ์ ๋ชจ๋๋ฅผ ์
๋ ฅ ๋ชจ๋ (Input Mode)๋ก ์ค์
GPIO_InitStruct.Pull = GPIO_PULLUP; // ๋ด๋ถ ํ์
์ ํญ์ ํ์ฑํํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ด HIGH ์ํ๊ฐ ๋๋๋ก ์ค์
HAL_GPIO_Init(GPIO_SW_GPIO_Port, &GPIO_InitStruct); // HAL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๊ธฐํ ํจ์ ํธ์ถ, ์ค์ ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ GPIO_SW_GPIO_Port์ ํ์ ์ด๊ธฐํ
GPIO_InitStruct.Pin = GPIO_SW_Pin;
GPIO_InitStruct๋ GPIO_InitTypeDef๋ผ๋ ๊ตฌ์กฐ์ฒด์ด๋ฉฐ, GPIO ํ์ ์ค์ ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
Pin ํ๋๋ ์ค์ ํ๋ ค๋ ํน์ ํ์ ์ง์ ํ๋ค. ์ฌ๊ธฐ์๋ GPIO_SW_Pin์ด ์ค์์น์ ์ฐ๊ฒฐ๋ ํ์ ๋ํ๋ธ๋ค.
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
Mode ํ๋๋ ํ์ ๋์ ๋ชจ๋๋ฅผ ์ง์ ํ๋ค.
GPIO_MODE_INPUT์ ํ์ ์
๋ ฅ ๋ชจ๋๋ก ์ค์ ํ๋ฉฐ, ์ธ๋ถ ์ ํธ(์ค์์น)๋ฅผ ์ฝ์ ์ ์๋๋ก ํ๋ค.
GPIO_InitStruct.Pull = GPIO_PULLUP;
Pull ํ๋๋ ํ์ ๋ด๋ถ ํ์
๋๋ ํ๋ค์ด ์ ํญ์ ํ์ฑํํ ์ง ์ค์ ํ๋ค.
GPIO_PULLUP์ ์ค์ ํ๋ฉด ๋ด๋ถ ํ์
์ ํญ์ด ํ์ฑํ๋์ด ํ์ ๊ธฐ๋ณธ ์ํ๊ฐ HIGH(1)๋ก ์ ์ง๋๋ค.
์ค์์น๊ฐ ๋๋ฆฌ์ง ์์์ ๋ ํ์ ์ํ๊ฐ HIGH๋ก ์ ์ง๋๋ฉฐ, ์ค์์น๋ฅผ ๋๋ฅด๋ฉด LOW(0)๋ก ์ ํ๋๋ค. (Active Low)
HAL_GPIO_Init(GPIO_SW_GPIO_Port, &GPIO_InitStruct);
HAL_GPIO_Init() ํจ์๋ ์ค์ ๋ ๊ตฌ์กฐ์ฒด(GPIO_InitStruct)๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ ํฌํธ์์ ํ์ ์ด๊ธฐํํ๋ค.
์ฒซ ๋ฒ์งธ ์ธ์ GPIO_SW_GPIO_Port๋ ์ด๊ธฐํํ ํฌํธ์ ๋ ์ง์คํฐ ์ฃผ์์ด๋ฉฐ, ๋ ๋ฒ์งธ ์ธ์๋ ์ด๊ธฐํ ์ค์ ์ด ํฌํจ๋ ๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ์ด๋ค.
์ด๋ฅผ ํตํด ์
๋ ฅ ํ์ ๋ชจ๋์ ํ์
์ ํญ ์ค์ ์ ์ ์ฉํ๋ค.
๐ 5. Switch ๋ก์ง ์ค๋ช
ํด๋น ์ฝ๋๋ ๋ด์ฅ ์ค์์น๊ฐ ๋๋ ธ์ ๋, ๋ด์ฅ LED๋ฅผ ์ ์ดํ๋ ์ฝ๋์ด๋ค.
// GPIO ํฌํธ๋ฅผ ์ฝ์ด ์ค์์น ์ํ์ ๋ฐ๋ผ LED๋ฅผ ์ ์ดํ๋ ์ฝ๋
if(!HAL_GPIO_ReadPin(GPIO_SW_GPIO_Port, GPIO_SW_Pin)) {
// HAL_GPIO_ReadPin() ํจ์๋ ์ง์ ๋ GPIO ํฌํธ์ ํ ์ํ๋ฅผ ์ฝ์
// ์ฌ๊ธฐ์๋ GPIO_SW_GPIO_Port ํฌํธ์ GPIO_SW_Pin ํ์ ์ํ๋ฅผ ์ฝ์
// HAL_GPIO_ReadPin()์ ํ์ ์ํ๊ฐ LOW(0)์ผ ๊ฒฝ์ฐ 0์ ๋ฐํ
// ์กฐ๊ฑด๋ฌธ์์ '!'(๋
ผ๋ฆฌ NOT)๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด LOW์ผ ๋ ์กฐ๊ฑด์ด ์ฐธ์ด ๋๋๋ก ์ค์
HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, 0);
// HAL_GPIO_WritePin() ํจ์๋ ์ง์ ๋ GPIO ํฌํธ์ ํ ์ํ๋ฅผ ์ค์ ํจ
// ์ฌ๊ธฐ์๋ GPIO_LED_GPIO_Port ํฌํธ์ GPIO_LED_Pin ํ์ LOW(0)์ผ๋ก ์ค์ ํ์ฌ LED๋ฅผ ์ผฌ
} else {
HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, 1);
// ์ค์์น ํ์ด HIGH(1)์ผ ๊ฒฝ์ฐ, GPIO_LED_GPIO_Port์ GPIO_LED_Pin์ HIGH(1)์ผ๋ก ์ค์ ํ์ฌ LED๋ฅผ ๋
}
HAL_GPIO_ReadPin(GPIO_SW_GPIO_Port, GPIO_SW_Pin)
์ง์ ๋ ํฌํธ(GPIO_SW_GPIO_Port)์ ํ(GPIO_SW_Pin)์์ ํ์ฌ ์ํ๋ฅผ ์ฝ๋๋ค.
- ๋ฐํ ๊ฐ์ด 0์ผ ๋ ํ์ ์ํ๊ฐ LOW(0)์ด๋ฉฐ, ์ค์์น๊ฐ ๋๋ ค์ง ์ํ์์ ์๋ฏธํฉ๋๋ค.
- ๋ฐํ ๊ฐ์ด 1์ผ ๋ ํ์ ์ํ๊ฐ HIGH(1)์ด๋ฉฐ, ์ค์์น๊ฐ ๋๋ฆฌ์ง ์์ ์ํ์
๋๋ค.
HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, 0)
LED ์ ์ด ํ์ LOW๋ก ์ค์ ํ์ฌ LED๋ฅผ ์ผ ๋ค.
HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, 1)
LED ์ ์ด ํ์ HIGH๋ก ์ค์ ํ์ฌ LED๋ฅผ ๋๋ค.
์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ GPIO_INPUT, OUTPUT์ ๊ฐ๋จํ๊ฒ ์ ์ดํ ์ ์๋ค.
'๐ง STM32' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[STM32] 7. ์ธ๋ถ ์ธํฐ๋ฝํธ(External Interrupt) (0) | 2024.11.18 |
---|---|
[STM32] 6. ํ์ ์ ํญ ๊ธฐ๋ณธ ์๋ฆฌ (0) | 2024.11.18 |
[STM32] 4. GPIO Output ์ค๋ช (0) | 2024.09.07 |
[STM32] 3. ๋ด์ฅ LED ์ ์ด (9) | 2024.09.04 |
[STM32] 2. STM32 LINK ์ ๋ฐ์ดํธ (1) | 2024.09.02 |