이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Embedded] Communication Programming

  • 2026.05.12 23:57
  • Computer Science/Embedded Software
반응형

 

 

 

STM32 에서 UART를 사용하려면 4가지 단계를 거쳐야 한다.

 

1. GPIO를 Alternate Function으로 Multiplexing

2. USART 모듈을 활성화하고 송수신 모드 설정

3. Baud Rate를 계산하고 BRR 레지스터에 작성 

4. TXE 및 RXNE 플래그 기반으로 송수신

 

 

 

 

STM32F429xx 에는 USART 및 UART가 8개 들어있음.

두 개 모두 섞여있다. STM32는 동기 모드도 지원함.

APB1과 APB2는 속도가 다름. 각각 저속, 고속을 담당하고 USART1과 USART6은 빠른 버스에 붙어 baud rate가 높음.

 

 

STM32의 핀 하나는 기본 GPIO 외 16가지 Alternate Function 중 하나로 사용될 수 있음.

전에 다룬 USART CAN I2C 등 통신 모듈을 사용하려면 GPIO 핀을 해당 통신용 AF로 멀티플렉싱해서 통신 모듈에 빌려줘야 한다.

 

MODER - OTYPER - PUPDR - OSPEEDR - AFRL/AFRH 순서를 거쳐서 GPIO를 AF로 멀티플렉싱한다.

 

모든 모듈을 별도 핀에 할당하면 핀이 정말 많이 필요하니 핀 하나를 하나의 역할로 골라서 사용하는 전략을 사용.

지금은 GPIO로 쓰더라도 부팅 후에는 USART2_TX, 다른 보드에서는 SPI1_MOSI 이렇게 플젝마다 다르게 사용한다.

 

 

 

핀 안에는 MUX 회로가 들어있어 16개의 입력 중 하나를 고를 수 있음.

리셋 시 핀은 기본 GPIO 모드인 AF0로 설정된다. 

 

 

USART 송신은 USART_DR에 데이터를 쓰면 알아서 하드웨어가 Shift Register로 옮기고 비트 단위로 Tx 핀에 토글한다.

상세 절차는 아래 그림과 같음 (순서대로 해야함)

 

 

데이터를 쓰면 하드웨어가 옮길 때 까지 기다려야 하는데. ABC 를 쓴다고 하자. A를 쓰고 언제 B를 써야 할까? 

이걸 TXE비트 로 처리한다. (Transmit data register Empty) 

 

TXE가 1이면 다음 걸 받을 수 있다는 뜻이고 TXE가 0이면 처리 중이라는 뜻. 

그리고 완전히 끝났으면 TC비트를 사용한다. USART 끄기 직전에 TC 비트 1을 기다리고 Shift Register까지 비어있음을 확인함.

 

 

 


 

 

 

USART 수신은 송신을 거꾸로 하면 된다.

Rx 핀 -> Shift Register -> RDR -> USART_DR 읽기 순서대로 진행됨.

데이터가 도착하면 RXNE 비트가 1로 알려주고, 내가 읽으면 자동으로 0처리된다.

 

송신에서의 활성화 비트는 TE지만 수신에서의 활성화 비트는 RE를 사용하고

RXNEIE를 1로 설정하면 RXNE가 1로 될 때 인터럽트가 발생한다.

 

 

USART_SR 은 Status Register로 지금 USART가 어떤 상태인지를 나타낸다.

TXE TC RXNE ORE FE 등..

 

USART_CR1은 Control Register로 USART를 어떻게 동작시킬지를 나타낸다.

UE M TE RE 및 인터럽트 활성화 비트 등이 있음

 

USART_BRR 은 Baud Rate Register로 통신 속도를 어느정도로 정할지를 나타낸다.

Baud Rate는 USART 입력 Clock을 USARTDIV 값으로 나눈 값이다.

Mantissa + Fraction으로 BRR 레지스터에 저장되고, Mantissa만 쓰면 baud rate가 부정확해서 소수점 이하를 분할함.

 

STM32의 USART는 고정된 Clock 신호를 입력받지만 통신 상대는 9600bps같은 속도를 원한다.

그러니 고속 Clock을 나눠서 원하는 속도를 만드는 방식을 사용함.

 

 

 

OVER8 비트가 0이면 16배 오버샘플링이고 1이면 8배 오버샘플링을 적용한다.

 

 

반응형
저작자표시 (새창열림)

'Computer Science > Embedded Software' 카테고리의 다른 글

[Embedded] Motor  (0) 2026.05.13
[Embedded] Sensor  (0) 2026.05.13
[Embedded] Communication Protocol (1)  (0) 2026.05.12
[Embedded] ARM Assembly  (0) 2026.05.10
[Embedded] General Purpose Input Output  (0) 2026.04.30

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Embedded] Motor

    [Embedded] Motor

    2026.05.13
  • [Embedded] Sensor

    [Embedded] Sensor

    2026.05.13
  • [Embedded] Communication Protocol (1)

    [Embedded] Communication Protocol (1)

    2026.05.12
  • [Embedded] ARM Assembly

    [Embedded] ARM Assembly

    2026.05.10
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (703)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (161)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Data Science (9)
      • Embedded Software (10)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
      • BlockChain (0)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (12)
    • 💬 기록 (10)
    • 📚 공부 (7)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / AXZ. Copyright © i3months.

티스토리툴바