์ด ์ ํฌ์คํ ์์ HAL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค(HAL_UART_RxCpltCallback)๋ฅผ ์ฌ์ฉํ์ฌ UART Interrupt๋ฅผ ๊ฐ๋จํ ๊ธฐ๋ฅ์ ๊ตฌํํ์๋ค. HAL_UART_RxCpltCallback ํจ์๋ STM32 HAL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ UART ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ์ฌ์ฉ๋๋ ์ฝ๋ฐฑ ํจ์์ด๋ค. ์ด ํจ์๋ UART ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์ ํ ๋ ํธ์ถ๋๋ค. ์๋ฒ ๋๋ ์์คํ ๊ด์ ์์ ์ด ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ๋๋ ๊ณผ์ ์ ๊ฐ๋จํ ์ค๋ช ํ๊ฒ ๋ค.
1. HAL_UART_RxCpltCallback ํจ์ ํธ์ถ ๊ณผ์
1. UART ์ธํฐ๋ฝํธ ํ์ฑํ: ๋จผ์ , UART ์ธํฐ๋ฝํธ๋ฅผ ํ์ฑํํ๋ค. ์ด๋ HAL_UART_Receive_IT ํจ์๋ฅผ ํธ์ถํ์ฌ UART ๋ชจ๋์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋๋ก ์ค์ ํ๋ค.
์ด ๋์์ ์ํํธ์จ์ด์ ์ผ๋ก ์ํ๋์ง๋ง, ์ด ์ค์ ์ด ํ๋์จ์ด ๋ ๋ฒจ์์ UART ์ธํฐ๋ฝํธ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
HAL_UART_Receive_IT(&huart1, &received_byte, 1);
2. ๋ฐ์ดํฐ ์์ ์ค๋น: UART ๋ชจ๋์ ์ค์ ๋ ๋นํธ๋ ์ดํธ, ๋ฐ์ดํฐ ๋นํธ, ํจ๋ฆฌํฐ ๋นํธ ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ค๋น๋ฅผ ํ๋ค.
3. ๋ฐ์ดํฐ ์์ : UART ๋ชจ๋์ด ๋ฐ์ดํฐ๋ฅผ ์์ (UART ๋ชจ๋์ Rx ํ์ผ๋ก ์๋ฆฌ์ผ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ด)ํ๋ฉด, ์์ ๋ฒํผ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค. UART ๋ชจ๋์ ์์ ์ด ์๋ฃ๋์์์ ์๋ฆฌ๊ธฐ ์ํด UART ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํจ๋ค.
4. ์ธํฐ๋ฝํธ ๋ฐ์: UART ๋ฐ์ดํฐ ์์ ์ด ์๋ฃ๋๋ฉด, UART ํ๋์จ์ด๋ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํจ๋ค. ์ด ์ธํฐ๋ฝํธ๋ ํ๋ก์ธ์๋ฅผ ์ค๋จ์ํค๊ณ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR)์ผ๋ก ์ ์ด๋ฅผ ์ด๋์ํจ๋ค.
5. ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR): USARTx_IRQHandler ํจ์๋ UART ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ ๋ ํธ์ถ๋๋ ISR์ด๋ค. ์ด ํจ์๋ HAL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ HAL_UART_IRQHandler ํจ์๋ฅผ ํธ์ถํ์ฌ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ค. (MCU์ ํ์ฌ ์คํ์ ์ค๋จ์ํค๊ณ , ๊ด๋ จ ์ธํฐ๋ฝํธ ๋ฒกํฐ๋ก ์ ์ด๋ฅผ ์ด๋์ํจ๋ค.)
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart1);
}
6. ์ฝ๋ฐฑ ํจ์ ํธ์ถ: HAL_UART_IRQHandler ํจ์๋ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์, ๋ฐ์ดํฐ ์์ ์ด ์๋ฃ๋์์์ ๊ฐ์งํ๊ณ HAL_UART_RxCpltCallback ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๋ค.
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
{
// ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ์ฝ๋
// ...
if (/* ์์ ์๋ฃ ์กฐ๊ฑด */)
{
HAL_UART_RxCpltCallback(huart);
}
}
7. ์ฝ๋ฐฑ ํจ์ ์คํ: HAL_UART_RxCpltCallback ํจ์๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ๋์์ ์ํํ๋ค. ์๋ฅผ ๋ค์ด, ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ธฐ ์ํด HAL_UART_Receive_IT ํจ์๋ฅผ ๋ค์ ํธ์ถํ์ฌ ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ค์ ํ ์ ์๋ค.
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
// ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋
// ...
// ๋ค์ ์์ ์ ์ํ ์ธํฐ๋ฝํธ ์ฌ์ค์
HAL_UART_Receive_IT(huart, &received_byte, 1);
}
}
์ด ๊ณผ์ ์ UART ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์ ํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ ์ค๋ช ํ ๊ฒ์ด๋ค. HAL_UART_RxCpltCallback ์ฝ๋ฐฑ ํจ์๋ ๋ฐ์ดํฐ ์์ ์ด ์๋ฃ๋ ๋๋ง๋ค ์๋์ผ๋ก ํธ์ถ๋๋ฉฐ, ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
'๐ง STM32' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[STM32] 16. I2C ์ผ์ ์๊ฐ (๋ฏธ์ธ๋จผ์ง/์ด์ฐํํ์ ๋ณตํฉ ๊ณต๊ธฐ์ง ์ผ์ CUBIC - AM1008W-K-P) (0) | 2024.12.04 |
---|---|
[STM32] 15. I2C ํต์ ๊ฐ์ (0) | 2024.12.04 |
[STM32] 13. UART Interrupt ๊ตฌํ (0) | 2024.11.30 |
[STM32] 12. ์๋ฆฌ์ผ ๋ชจ๋ํฐ๋ฅผ ์ํ UART ํต์ ๊ตฌํ (2) (0) | 2024.11.22 |
[STM32] 11. ์๋ฆฌ์ผ ๋ชจ๋ํฐ๋ฅผ ์ํ UART ํต์ ๊ตฌํ (1) FTDI (UART To USB) (0) | 2024.11.22 |