STM32_Tutorial_06 - 8BitsCoding/RobotMentor GitHub Wiki


์ฝ”๋“œ ์ƒ์„ฑํ•˜๊ธฐ

์ด๋ฏธ์ง€

CubeMX์˜ Configuration -> USART2 ํด๋ฆญ

์ด๋ฏธ์ง€

NVIC Settings -> Enabled ํด๋ฆญ

์ด๋ฏธ์ง€

๋‹ค์‹œ CubeMX์˜ Configuration -> NVIC ํด๋ฆญ

์ด๋ฏธ์ง€

NVIC Configuration -> Code generation -> USART2 global interrupt ํด๋ฆญ

Project -> Generate Code


์ฝ”๋“œ์„ค๋ช…

/* Initialize interrupts */
MX_NVIC_Init();

NVIC ๊ด€๋ จ Init์ด ๋จ์„ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€

static void MX_NVIC_Init(void)
{
  /* USART2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(USART2_IRQn);
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

MX_NVIC_Init์ •์˜ ์•„๋ž˜๋ถ€๋ถ„์— ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ•˜๋ฉด๋œ๋‹ค.

uint8_t rx2_data;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART2)
    {
        HAL_UART_Receive_IT(&huart2, &rx2_data, 1);
        // UART2์— rx2_data์— 1๋ฐ”์ดํŠธ ์ฝ์–ด๋ผ
    }
}

์ •๋ฆฌํ•˜์ž๋ฉด ์™ธ๋ถ€์—์„œ UART๋ฉ”์‹œ์ง€๊ฐ€ ๋“ค์–ด์˜ค๋ฉด HAL_UART_RxCpltCallback๊ฐ€ ํ˜ธ์ถœ์ด ๋˜์–ด HAL_UART_Receive_IT ํ˜ธ์ถœ

๋งˆ์ง€๋ง‰์œผ๋กœ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๊ณ  ์„ ์–ธ์„ ํ•ด์ค˜์•ผํ•œ๋‹ค.

// main
HAL_UART_Receive_IT(&huart2, &rx2_data, 1);
// ์œ„ ์„ ์–ธ์„ ์ฒ˜์Œํ•˜๋ฉด ์ธํ„ฐ๋ŸฝํŠธ๋กœ ์“ฐ๊ฒ ๋‹ค๊ณ  ์„ ์–ธํ•˜๋Š” ๋ถ€๋ถ„์ž„.

while(1)
{
    // ...
}

UART๋ฅผ ๋ฐ›์„์‹œ ๋ฐฐ์—ด๋กœ ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด??

uint8_t rx2_data[10];

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART2)
    {
        HAL_UART_Receive_IT(&huart2, &rx2_data, 10);
        // UART2์— rx2_data์— 1๋ฐ”์ดํŠธ ์ฝ์–ด๋ผ
    }
}