๋ฐ์ํ
๐ป A31G123ML + Keil uVision โ UART๋ก ์๋ฆฌ์ผ ํต์ ํ๊ธฐ
์ด๋ฒ ํธ์์๋ ABOV A31G123ML MCU๋ฅผ ์ฌ์ฉํด UART ์๋ฆฌ์ผ ํต์ ์ ๊ตฌํํ๊ณ , PC์ ์๋ฆฌ์ผ ํฐ๋ฏธ๋๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์์ ๋ฅผ ์ค์ตํด๋ด ๋๋ค.
UART๋ MCU์ ์ธ๋ถ ์ฅ์น(PC, ๋ชจ๋ ๋ฑ)๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํต์ ๋ฐฉ์์ ๋๋ค.
๐งฐ ์ค๋น๋ฌผ
- ABOV A31G123ML ๋ณด๋
- USB to UART (FTDI, CP210x ๋ฑ)
- ์๋ฆฌ์ผ ํฐ๋ฏธ๋ (TeraTerm, RealTerm, PuTTY ๋ฑ)
๐ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ
- TX(P1.4) โ USB-UART RX
- RX(P1.5) โ USB-UART TX
- GND โ GND
๐ป ์ฝ๋ ์์: "Hello UART!" ์ถ๋ ฅ
#include "A31G123.h" void uart_init(void) { // P1.4 โ TXD, P1.5 โ RXD ์ค์ PORT1->MODE |= (1 << 4); // P1.4 ์ถ๋ ฅ PORT1->OUTEN |= (1 << 4); // Push-pull PORT1->AFSR1 |= (1 << 4); // ALT func PORT1->AFSR2 &= ~(1 << 4); PORT1->AFSR1 |= (1 << 5); // RX PORT1->AFSR2 &= ~(1 << 5); // Clock enable SYSCON->SYSAHBCLKCTRL |= (1 << 12); // UARTCLK UART1->BAUD = 52; // 9600bps (8MHz ๊ธฐ์ค) UART1->CTRL = (1 << 0) | (1 << 2); // TXEN + RXEN } void uart_send(char c) { while (!(UART1->STAT & (1 << 1))); // TXRDY UART1->TXD = c; } void uart_print(const char* str) { while (*str) { uart_send(*str++); } } int main(void) { uart_init(); while (1) { uart_print("Hello UART!\r\n"); for (volatile int i = 0; i < 800000; i++); // ์ฝ 0.5์ด ๋๋ ์ด } }
โ ๊ฒฐ๊ณผ ํ์ธ
- ํฐ๋ฏธ๋ ์คํ โ COM ํฌํธ ์ฐ๊ฒฐ (9600bps)
- ์ฃผ๊ธฐ์ ์ผ๋ก "Hello UART!" ๋ฌธ์์ด ์ถ๋ ฅ
๐ ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ํธ์์๋ A31G123ML์ UART๋ฅผ ์ง์ ์ด๊ธฐํํ๊ณ
์๋ฆฌ์ผ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ์ค์ตํ์ต๋๋ค.
๋ค์ ํธ์์๋ UART๋ก ๋ฐ์ดํฐ ์์ โ ์กฐ๊ฑด ๋์๋ ํ์ฅํด๋ณผ ์ ์์ด์ ๐
๋ฐ์ํ