๋ฐ์ํ
๐ป 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๋ก ๋ฐ์ดํฐ ์์ โ ์กฐ๊ฑด ๋์๋ ํ์ฅํด๋ณผ ์ ์์ด์ ๐
๋ฐ์ํ