STM32_Tutorial_03 - 8BitsCoding/RobotMentor GitHub Wiki
์์
CubeMX๋ฅผ ์คํํ๋ค.

NewProject ํด๋ฆญ -> Board Selector ํด๋ฆญ ->

NUCLEO-F429ZI ๊ฒ์

๊ธฐ๋ณธ์ ์ผ๋ก ์๋์ ๊ฐ์ด ๊ตฌ์ฑ์ด ๋๋ค.

์ฐ์ ๋ด๊ฐ ์ฌ์ฉํ๋ ์นฉ์ ๋ฐ์ดํฐ ์ํธ๋ ์ด๋ป๊ฒ ๋ณด๋?
STM32 ํํ์ด์ง์์ ํด๋น ๋ณด๋, ์นฉ์ ์ ๊ฒ์

๋ฐ์ดํฐ ์ํธ๋ฅผ ๋ค์ด๋ก๋

๋ฐ์ดํฐ ์ํธ์์ ๋ณด๋ฉด 144๊ฐ์ PIN์ด ์์์ ์ ์ ์๊ณ ๋๋ถ๋ถ ์ฌ์ฉ์๊ฐ GPIO PIN์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ถ๊ฐ๋ก ์ค์์น์ LED๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋จ.

์ค์์น๋ ๊ธฐ๋ณธ์ ์ผ๋ก LOW๋ก ์ผํธ๊ฐ ๋๋ฉด HIGH๋ก ๋ณํ
LED๋ฅผ ์ฐ๊ธฐ์ํด์ ๋ณด๋์์ LED๊ฐ ์ด๋์ ์ฐ๊ฒฐ๋์ด์๋์ง ํ์ธ์ด ํ์
ํํ์ด์ง์์ NUCLEO-F429ZI ๊ฒ์ ํ Resources -> Product Specifications ๋ค์ด
์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ฉด LED2๊ฐ ์ด๋์๋์ง ํ์ธ๊ฐ๋ฅ

PB-7์์ ์ ์ ์๋ค.

์ด์ CubeMX์์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์.

์ฐ์ CubeMX๊ตฌ์ฑ์ ๋ํด ๊ฐ๋ตํ ์ค๋ช ํ๋ฉด ์ผ์ชฝ ํญ์์ ์นฉ์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ ์ ํํ ์ ์๊ณ ๋ฉ์ธํ๋ฉด์์ ๊ฐ ์นฉ์ GPIO์ ๊ธฐ๋ฅ์ ์ค์ ํ ์ ์๊ฒ ๊ตฌ์ฑ๋์ด์๋ค.
์ฐ์ ๊ฐ์ฅ ๋จผ์ ํ์ธํด์ผํ ์ฌํญ์ RCC

RCC๋ ์ธ๋ถ์์ ๋ค์ด์ค๋ ํด๋ญ์ ์ค์ ํ๋ ๋ถ๋ถ์ด๋ค.
High Speed Clock(HSE)๋ฅผ ์์ ์๊ฒ ๋ง๋ ๋ณด๋์ Clock Source๋ก ์ค์ ํด์ฃผ์ด์ผํ๋ค(NUCLEO-F429ZI๋ BYPASS Clock Source์)

๋ค์์ผ๋ก Clock Configuration์ฐฝ์ผ๋ก๊ฐ์ HSCI RC๋ก ์ค์ ์ด ๋์ด์๋ค๋ฉด Input Frequency HSE๋ก ๋ณ๊ฒฝํ๋ค.
HSCI RC๋ ์นฉ ๋ด๋ถ์ ํด๋ญ์ผ๋ก ์ ํ๋๊ฐ ๋งค์ฐ ๋ฎ๊ธฐ์ ์ค์ฐจ๊ฐ ๋ง์ด ๋ฐ์ํ๊ฒ ๋๋ค.
์ด์ ์ผ ์ง์ง LED ์ค์ ...

๋ด๊ฐ ์ค์ ํ GPIO๋ฅผ ํด๋ฆญํ GPIO_Output์ ์ ํ

Button์ GPIO_Input์ผ๋ก ๋์ด์์์ค ์์๋๋ฐ GPIO_EXIT13์ผ๋ก ๋์ด์์ ๋ฌด์จ์ฐจ์ธ์ง๋ ์์๋ด์ผํ ๋ฏ.
์ด๋ ๊ฒ ํ๋ฉด ์นฉ์ Input/Output ์ค์ ์ด ๋ชจ๋ ๋๋ ๊ฒ
์ด์ Code ์์ฑํด๋ณธ๋ค.
ํ๋ก์ ํธ(์ฝ๋)์์ฑ
- Project -> Generate Code

ํ๋ก์ ํธ ์ด๋ฆ์ค์ ํ๊ณ IDE์ค์ ํ๊ณ

Code Generator์์๋ ๋ฐ๋ก '.c/.h' ์์ฑํด ์ฃผ๋ ํญ๋ง ํด๋ฆญ!
์ด๋ ๊ฒ ์ํ๋ฉด ๋ชจ๋ ์์ค์ฝ๋๊ฐ main๋ด๋ถ์ ๋ค์ด๊ฐ๊ฒ๋์ด ๊ด๋ฆฌ๊ฐ ์ด๋ ต๋ค.
Ok๋ฅผ ๋๋ฌ์ Code ์์ฑ

ํ๋ก์ ํธ ์์ฑํ๋๋ฐ 1๋ถ์ ๋ ๊ฑธ๋ฆฐ๋ค.
๋ชจ๋ ์์ค์ฝ๋ ์ค๋ช ์ ์ด๋ ต๊ณ main๋ฌธ๋ง ์ค๋ช ํ์๋ฉด...
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
์ฐ์ ๋ชจ๋ ์ฝ๋๋ BEGIN ~ END ์ฌ์ด์ ์ฝ๋ฉ์ ํด์ผํจ
๋ง์ฝ CubeMX์์ ์์ ํ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ก๋ํ๋ฉด BEGIN ~ END๋ฐ์ ์ฝ๋๋ ๋ชจ๋ ์ง์์ง๋ค.
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
HAL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์จ๋ค.
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ETH_Init();
MX_USART3_UART_Init();
MX_USB_OTG_FS_PCD_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
CubeMX์์ ์ธํ ํ๋ ๋ชจ๋ ์ฌํญ์ ๋ํด init
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin (GPIOB, GPIO_PIN_14);
HAL_Delay (100);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
HAL_GPIO_TogglePin (GPIOB, GPIO_PIN_14);: Pin B(GPIOB)์ 14๋ฒ์ HIGH๋ก
HAL_Delay: ์นฉ์ 0.1์ด๊ฐ ๋๋ ์ด
๋น๋ํด๋ณด์!

- ์ฐธ๊ณ ) TrueStudio IDE์์ Ctrl+Space barํ๋ฉด ๊ด๋ จ ํจ์์ถ๋ ฅ๋จ.
Build -> Debug
LED๋ฅผ ๊น๋นก์ด๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง ์กด์ฌ
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin (LD2_GPIO_Port, LD2_Pin);
HAL_GPIO_TogglePin (LD2_GPIO_Port, LD3_Pin);
HAL_Delay (100);
// Off(Low)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
HAL_Delay(100);
// On(High)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
HAL_Delay(100);
๋ฒํผ์ ์ ๋ ฅ์ ๋ฐ์๋ณด์
if(HAL_GPIO_ReadPin(USER_Btn_GPIO_Port, USER_Btn_Pin) == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
HAL_Delay(100);
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
HAL_Delay(100);
}