1. UART
- 비동기 직렬 통신 방식 중 하나로, 두 장치 간 데이터를 직렬로 송수신
- 비동기 방식이기 때문에 동기 신호(클럭) 없이 송수신
- 주로 TX(Transmit) 핀과 RX(Receive) 핀을 통해 데이터를 주고받음
- STM32에서는 UART를 통해 센서나 모듈과 통신하거나, 컴퓨터의 터미널과 연결해 디버깅 메시지를 출력할 때 사용
사용 방법:
- STM32CubeIDE에서 UART를 설정합니다.
- 송수신 인터럽트 또는 DMA를 활용해 데이터를 비동기로 처리할 수 있습니다
- 예제
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;
'여러 이론들' 카테고리의 다른 글
PID 제어 & PWM 서치하면서 내가 이해하고 정리하려고 작성하는 글 (8) | 2024.11.05 |
---|---|
코딩 용어정리 (0) | 2024.09.03 |
1. UART
- 비동기 직렬 통신 방식 중 하나로, 두 장치 간 데이터를 직렬로 송수신
- 비동기 방식이기 때문에 동기 신호(클럭) 없이 송수신
- 주로 TX(Transmit) 핀과 RX(Receive) 핀을 통해 데이터를 주고받음
- STM32에서는 UART를 통해 센서나 모듈과 통신하거나, 컴퓨터의 터미널과 연결해 디버깅 메시지를 출력할 때 사용
사용 방법:
- STM32CubeIDE에서 UART를 설정합니다.
- 송수신 인터럽트 또는 DMA를 활용해 데이터를 비동기로 처리할 수 있습니다
- 예제
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;
'여러 이론들' 카테고리의 다른 글
PID 제어 & PWM 서치하면서 내가 이해하고 정리하려고 작성하는 글 (8) | 2024.11.05 |
---|---|
코딩 용어정리 (0) | 2024.09.03 |