Home » Post » STM » STM32F0 UART LL 송신 코드 작성하기

STM32F0 UART LL 송신 코드 작성하기

STM32F0 UART LL 송신 코드 작성 예제입니다.

STM32F091RC USART LL목차

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

LL_USART_Enable

먼저 시리얼 통신을 시작하는 함수부터 시작한다.

 

디스크립션에 적힌대로 USART2를 적어준다.

 

USART_ISR

LL드라이버의 경우 레지스터를 좀 많이 봐야하는데,

시리얼 통신에 대한 이해가 먼저 선행된다.

 

간단하게 설명하자면
데이터를 보내는 레지스터가 있다.
이 레지스터는 8비트짜리라 한꺼번에 문자열 전송을 할 수가 없다.

그래서 데이터 레지스터를 비우고 보내고 비우고 보내야한다.
그러려면 현 상태를 알아야하는데, 이를 상태 레지스터에서 확인 가능하다.

USART_ISR 레지스터를 쭉 내려보면 데이터 레지스터에 대한 비트가 있다.

이 7번째 데이터 비트(TXE)를 확인하면

데이터가 비워져 있는지 아닌지를 알 수가 있는 것이다.

USART_TDR

USART_TDR transmit data register

그 다음에는 데이터 레지스터 위치를 알아야 한다.

이 레지스터에 데이터를 넣어야 하기 때문이다.

 

이 데이터 레지스터에 값을 하나씩 넣으면 알아서 보내진다.

우리는 이 데이터가 비워졌는지만 확인하면 된다.

 

그럼 설명 끝! 코드 구현 시작!

 

레지스터를 보고 코드를 짜면 위처럼 구현이 가능하다.

데이터 레지스터가 비워질때까지 기다렸다가 데이터를 보내면 된다.

 

이걸 LL 드라이버 방법에 맞게 수정하려면 함수를 또 뒤져봐야한다.

LL_USART_IsActiveFlag_TXE

위 함수로 while문 안의 1<<7과 같은 괴랄한 코드를 대체할 수 있다.

LL_USART_TransmitData8

이 함수로 사용하면 USART2->TDR 과 같이 어려워 보이는 코드를 대체할 수 있다.

 

최종적으로 적용하면 아래와 같다.

이렇게 보니까 이해가 될 것도 같이 생기지 않았는가.

 

While문은 위처럼 꾸며서 1초에 한번씩 보내도록 했다.

 

토막 상식

  • HAL 드라이버는 딜레이를 HAL_Delay() 함수로 사용한다.
  • LL 드라이버는 딜레이를 LL_mDelay() 함수로 사용한다.

 

잘된다.

 

댓글 남기기

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