ARM

A31G123ML + Keil uVision : UART ํ†ต์‹ ์œผ๋กœ PC์™€ ์‹œ๋ฆฌ์–ผ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๊ธฐ

๊ฒŒ์ž„๊ต์ˆ˜ 2025. 4. 18. 07:51
๋ฐ˜์‘ํ˜•

๐Ÿ’ป 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๋กœ ๋ฐ์ดํ„ฐ ์ˆ˜์‹  โ†’ ์กฐ๊ฑด ๋™์ž‘๋„ ํ™•์žฅํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์š” ๐Ÿ˜Ž

๋ฐ˜์‘ํ˜•