STM32F0 UART LL 송신 코드 작성 예제입니다.
STM32F091RC USART LL목차
LL_USART_Enable
먼저 시리얼 통신을 시작하는 함수부터 시작한다.
USART_ISR
LL드라이버의 경우 레지스터를 좀 많이 봐야하는데,
시리얼 통신에 대한 이해가 먼저 선행된다.
간단하게 설명하자면
데이터를 보내는 레지스터가 있다.
이 레지스터는 8비트짜리라 한꺼번에 문자열 전송을 할 수가 없다.
그래서 데이터 레지스터를 비우고 보내고 비우고 보내야한다.
그러려면 현 상태를 알아야하는데, 이를 상태 레지스터에서 확인 가능하다.
USART_ISR 레지스터를 쭉 내려보면 데이터 레지스터에 대한 비트가 있다.
이 7번째 데이터 비트(TXE)를 확인하면
데이터가 비워져 있는지 아닌지를 알 수가 있는 것이다.
USART_TDR
그 다음에는 데이터 레지스터 위치를 알아야 한다.
이 레지스터에 데이터를 넣어야 하기 때문이다.
이 데이터 레지스터에 값을 하나씩 넣으면 알아서 보내진다.
우리는 이 데이터가 비워졌는지만 확인하면 된다.
그럼 설명 끝! 코드 구현 시작!
데이터 레지스터가 비워질때까지 기다렸다가 데이터를 보내면 된다.
이걸 LL 드라이버 방법에 맞게 수정하려면 함수를 또 뒤져봐야한다.
LL_USART_IsActiveFlag_TXE
위 함수로 while문 안의 1<<7과 같은 괴랄한 코드를 대체할 수 있다.
LL_USART_TransmitData8
이 함수로 사용하면 USART2->TDR 과 같이 어려워 보이는 코드를 대체할 수 있다.
최종적으로 적용하면 아래와 같다.
이렇게 보니까 이해가 될 것도 같이 생기지 않았는가.
While문은 위처럼 꾸며서 1초에 한번씩 보내도록 했다.
토막 상식
- HAL 드라이버는 딜레이를 HAL_Delay() 함수로 사용한다.
- LL 드라이버는 딜레이를 LL_mDelay() 함수로 사용한다.
잘된다.