여러 이론들

용어정리

구 승 2024. 10. 25. 11:26

1. UART

- 비동기 직렬 통신 방식 중 하나로, 두 장치 간 데이터를 직렬로 송수신

- 비동기 방식이기 때문에 동기 신호(클럭) 없이 송수신

- 주로 TX(Transmit) 핀과 RX(Receive) 핀을 통해 데이터를 주고받음

- STM32에서는 UART를 통해 센서나 모듈과 통신하거나, 컴퓨터의 터미널과 연결해 디버깅 메시지를 출력할 때 사용

 

사용 방법:

  1. STM32CubeIDE에서 UART를 설정합니다.
  2. 송수신 인터럽트 또는 DMA를 활용해 데이터를 비동기로 처리할 수 있습니다
  3. 예제
HAL_UART_Transmit(&huart2, (uint8_t*)"Hello", 5, 100);

 

2. RXNE

-RXNE 플래그USART의 수신 버퍼에 데이터가 존재할 때 설정되는 플래그

- 데이터가 수신 버퍼에 쌓이면 RXNE가 1로 설정되고, 이때 데이터를 읽지 않으면 오버런 오류가 발생할 수 있음

 

if-else 같이 쉽게 하는 방법은 안된다 why? RXNE는 비트 중간에 위치해 있어서 복잡하다.

그래서 상수를 define해서 0인지 아닌지 비교한다.

 

사용 방법:

if(LL_USART_IsActiveFlag_RXNE(USART4)) {
    uint8_t data = LL_USART_ReceiveData8(USART4); // 수신된 데이터 읽기
}

- 이 플래그를 이용해 인터럽트 방식으로 수신 이벤트를 처리

 

3. printf()와 _write() 재정의

- STM32의 기본 환경에서는 printf()로 데이터를 출력하려면 표준 출력 함수인 _write()를 재정의

 

4. NVIC (Nested Vector Interrupt Controller)

- NVIC중첩 벡터 인터럽트 컨트롤러로, STM32의 인터럽트를 관리하는 장치

- 각종 인터럽트의 우선순위를 설정하고, 인터럽트를 활성화하거나 비활성화

- 예를 들어 UART 수신 인터럽트를 NVIC에서 활성화해야 UART 인터럽트가 발생

-간단하게 인터럽트를 쓸지말지 경헝하는 것

5. LL_USART_EnableIT_RXNE(USART4);

  • Low Layer API를 사용한 코드로, RXNE 인터럽트를 활성화합니다.
  • 이 코드를 실행하면 USART4 수신 버퍼에 데이터가 들어올 때 인터럽트가 발생합니다.
LL_USART_EnableIT_RXNE(USART4); // USART4의 RXNE 인터럽트 활성화

 

6. extern 키워드의 역할

  • **extern**은 다른 파일에 선언된 변수나 함수를 사용할 때 사용합니다.
  • 변수나 함수가 이미 다른 파일에서 정의되었음을 명시하며, 링커가 해당 변수를 연결합니다.

예제:

1.파일 A에서 전역 변수 선언:

int global_variable = 10;

2. 파일 B에서 extern 사용:

extern int global_variable;
void print_variable() {
    printf("%d\n", global_variable);
}

7. uint8_t와 uint16_t의 차이

  • uint8_t: 8비트 정수0~255 범위의 값을 가질 수 있습니다
uint8_t data = 255;
  • uint16_t: 16비트 정수로 0~65535 범위의 값을 가질 수 있습니다
uint16_t data = 65535;