STM32F0 UART 인터럽트 LL 드라이버 코드 작성하기

STM32F0 UART 인터럽트 LL 드라이버 코드를 작성 예제입니다.

STM32F091RC USART LL 드라이버 인터럽트 목차

  1. STM32F0 UART 인터럽트 CUBEMX LL 드라이버 설정하기
  2. STM32F0 UART 인터럽트 LL 드라이버 코드 작성하기 (현재 포스팅)

STM32F0 UART 인터럽트 LL 드라이버 코드 작성 예제입니다. LL드라이버는 하드웨어 이해가 먼저 선행되므로, UART가 처음 이신분들께서는 HAL 드라이버를 먼저 참고하여 주시길 바랍니다. LL 드라이버가 처음이신 분들은 UART 포스팅을 참고 부탁드립니다.

USART_CR1

인터럽트를 설정하려면 USART_CR1 레지스터를 봐야한다.

여기서 수신 인터럽트를 설정할 수 있다.

 

RXNEIE 비트를 설정해줘야 인터럽트가 설정된다.

 

LL_USART_EnableIT_RXNE 함수를 사용하면 설정이 가능하다.

 

그래서 while문 위에 설정해 두었다.

 

인터럽트가 걸리면 USART2_IRQHandler가 호출된다.

이 함수는 stm32f0xx_it.c 파일에 있는데,
uVision 기준 프로젝트 안 Application/User 폴더에 위치해있다.

이 함수에 내가 정의한 콜백 함수를 만들고 싶다.

 

동일한 파일 안에 아래와 같은 함수를 선언했다.

__weak는 실제로 내가 사용할 함수에 우선순위를 주기 위해 설정하는 것이다.

암튼 난 USART_Rx_Callback라는 함수로 이름을 정했다.

 

그리고 함수 안에 내가 정의한 함수를 추가하고, USART2의 입력인자를 넣어 두었다.

 

USART_RDR

인터럽트가 걸리고 데이터가 입력되면 USART_RDR 레지스터에 저장된다.

그러니까 여기 레지스터를 잘 꺼내 먹으면 된다.

이제 다시 main.c로 돌아와서

꺼내먹을 데이터를 전역 변수로 선언해 주시고

 

쏘세요!  저장하면 된다.

이건 레지스터 만져서 하는 식이고, LL드라이버식 함수는 아래와 같다.

 

LL_USART_ReceiveData8

저걸 써먹으면 우리의 데이터가 반환되니 편하다는 것이다.

 

좀더 읽기 쉽게 바뀌었다.

 

난 이제 이 데이터가 입력될 때마다 시리얼로 메세지를 출력하고 싶다.

그래서 이렇게 짜놨다.

 

참고로 UART2_TX_string도 직접 짠 함수다.

출처는 이 포스팅을 참고하시길.

 

a 누를때마다 데이터 잘 밷는다.

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.