USART를 디버깅하며 알게된 팁
1) 레지스터 디버깅
- KEIL에서 SYSTEM VIEWER를 클릭하면 원하는 PERIPERAL의 레지스터 상태를 볼 수 있다.
해당 VIEWER를 사용하면 현재 상태의 레지스터 세팅값을 확인할 수 있어 디버깅에 용이하다.
* USART를 RXINTERUPT 방식으로 사용할때의 동작 흐름
1) USART 사용 기본 세팅
- USART를 사용하기 위하여 CR 레지스터의 UE(USART ENABLE),과 TE,RE를 SET 해준다.
- 우리는 USART 수신 인터럽트를 사용할 것이기 때문에 RXNEIE 또한 SET 해준다.
2) 데이터 수신
- 정상 패킷이 들어오면 RXNEIE를 DISABLE해주어 동작 프로세스간 INTERUPT를 방지한다.
3) 동작 처리& 데이터 전송
- 데이터를 DR에 인가하여 전송한다. 전송이 완료되면 SR의 TC(TRANSMIT COMPLETE)가 SET 된다.
- 데이터를 모두 전송했으면 RXNEIE를 ENABLE 해주어, 수신 인터럽트를 활성화 시킨다.
* USART 레지스터 및 플래그 이름 정리
SR: 상태 레지스터
* TC : Transmit Complete 전송완료
* RXNE : Rx Not Empty 데이터 수신
* ORE : Overrun 에러
* NE : Noise 에러
* FE : Framing 에러
* PE : Parity 에러
DR: 데이터 레지스터
BRR: Baud Rate Register
CR1: control Register
* UE : Enable / Disable
* M : World 길이 (8bits or 9bits)
* PCE : Parity Control Enable, 패러티 제어 활성/비활성화
* PS : Parity Selection (Even, Odd Parity)
* PSIE : PE Interrupt Enable / Disable
* TXEIE : TXE 인터럽트 Enable / Disable
* TCIE : TC 인터럽트 Enable / Disable
* RXNEIE : RXNE 인터럽트 Enable / Disable
* IDLEIE : IDLE 인터럽트 Enable / Disable
* TE : Transmitter Enable / Disable
* RE : Receiver Enable / Disable
참조: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=eziya76&logNo=220974083924