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);
}