stm32 uart통신(인터럽트 방식)

김상훈·2022년 8월 26일
0

stm32를 이용해 pc와 인터럽트 방식으로 uart통신을 해보자.
main문에서 계속해서 돌아가는 것이 아닌 인터럽트 함수가 발생할 때만 출력이 되므로 훨씬 효율적인 방법이라고 할 수 있다.

모든 setting은 폴링방식과 동일하고 인터럽트 방식을 사용해줄 것이기 떄문에 global interrupt를 enble 해준다.

File- Save를 하고 generate code를 한 후 옆에 탭을 보면

사진과 같이 it.c가 있는데 it 즉 인터럽트 관련 함수들이 있다.
우린 uart4에 관한 인터럽트를 enable 해줬으니 내리다보면

이 함수는 uart 인터럽트가 발생했을 때 이에 대응하는 인터럽트 서비스 루틴으로 연결해주는 역할을 하는 명령이다.

저 함수를 F3을 눌러 자세히 보게 되면

이런 함수가 있다.
어떤 값을 받을 때 우리가 설정한 바이트 데이터를 받으면 호출 되는 함수다.
main.c에서 재정의를 해주면 된다.
main.c로 넘어와서

위 사진과 같은 변수를 설정해주면 된다. (아래 선언된 변수들은 무시)

그리고 선언 된 변수를 아래와 같이 Receive_IT함수에 사용해주면 된다.
uart4번을 사용하고 data라는 변수를 1바이트씩 받는다는 의미이다.
인터럽트 방식이므로 끝에 _IT가 있는 함수를 사용하였다.

main문에 이 함수를 선언할 때 주의할 점은 UART_init()함수 아래에 써줘야 한다는 것이다. 우리가 설정해준 uart를 먼저 초기화 시켜준 후 Receive 함수를 사용해줘야 원활하게 구동이 된다.

그리고 아까 위에서 설명했던 callback함수를 복사 붙여넣기 해서 함수를 재정의 해주었다. 1바이트를 읽어오면 1바이트를 출력한다는 의미다.

pc입력 -> stm32가 받음(receive) -> pc로 출력 (transmit)

profile
처음 접하는 소프트웨어

0개의 댓글