STM32F0 UART 인터럽트 LL 드라이버 코드를 작성 예제입니다.
STM32F091RC USART LL 드라이버 인터럽트 목차
이전 포스트와 내용이 같아 상당 발췌 했습니다.
들어가기 앞서
UART는 어따 써먹는 놈인가?
시리얼 통신할 때 사용하는 놈이다. 보통 칩에서 pc로 데이터를 보내거나, 역으로 수신할 때 사용하는데, 이 프로토콜을 지원하는 곳이 많아 두루두루 쓰인다. 이를테면, 블루투스 칩도 UART통신을 지원해 아두이노와 같은 칩과 연결해 pc, 폰으로 데이터를 보내는 것에 사용할 수 있다.
아두이노 같은 경우도 ATmega 제품군을 개조해서 사용하는데, ATmega는 SPI로 플래싱을 하지만, 아두이노는 UART로 플래싱한다. 그래서 블루투스와 회로를 꾸미면 서로 라인이 겹쳐서 플래싱이 안되는 문제가 발생하는 경우도 있다.
시리얼 통신에 사용한다. 코드로 짜볼 예제를 미리 게시한다.
거두절미하고 바로 UART 세팅하자.
역시나 처음은 CUBEMX
보드를 검색하고
보드를 더블클릭한다.
초기설정대로 할 것이므로, YES를 눌러준다.
초기화면.
이번 포스팅은 초기 설정에서 더 만질 핀 세팅이 없다. 왜냐면 이미 설정되어 있기 때문이다.
이미 세팅되어 있다.
만약에 세팅이 되어 있지 않다면, USART2에 Asynchronous를 선택해주자.
Synchronous로 설정하면 동기식이므로, UART가 아닌 USART가 된다.
- Asynchronous : 비동기식, 통신에 필요한 동기화 클럭이 없는 방식이다. 이 경우, 동기화 클럭이 없으므로, 보내는 쪽과 받는 쪽의 통신 속도 규격을 서로 맞춰야 한다. 이를테면 보내는 쪽이 9600 Baud Rate라면, 받는 쪽도 9600 Baud Rate이여야 한다. 안그러면 원하는 데이터를 받을 수 없다.
Configuration 탭으로 가자.
핀 세팅이 되어 있으므로, Configuration 탭으로가서 Usart2를 선택하자.
위의 빨간 박스 쳐진 값을 잘 읽자.
통상 Parity Bit는 설정 안하고, Stop Bits는 1로 놓는다.
- Baud Rate : 통신 속도를 설정한다. 9600, 혹은 115200을 많이 사용한다. 다른 값 사용해도 상관없다.
- Word Length : 한번에 보내는 데이터의 비트수를 설정한다. 그냥 8비트 쓰자.
- Parity : 오류를 검사하는 비트를 word 앞단에 붙인다. 8비트면 1비트가 붙어 9비트가 되는 식. 짝수 패리티 비트는 9개의 비트중 1의 갯수가 짝수가 되게 앞 비트의 값을 결정하고, 혹수 패리티 비트는 1의 갯수가 홀수가 되게 설정된다. 근데 지금까지 코딩하면서 패리티비트 적용한 것을 본 적이 없다.
- Stop bit : 말그대로 통신을 끝내는 비트라고 보면 될 듯 하다. 통상 1비트를 사용한다. stop bit가 붙으면 idle상태로 변한다.(물론 뒤에 계속 데이터가 이어지지 않는다면 말이다.)
좌측 상단의 톱니바퀴 버튼을 누르면 코드를 제너레이트 한다.
프로젝트 이름을 적고 사용하는 IDE를 선택한다.
MDK-ARM V5를 사용할 생각이다.
이제 LL드라이버를 설정해야 한다.
기본은 HAL로 되어 있다.
위처럼 LL로 바꾸어 주면 된다.
OK버튼을 누르면 코드를 생성한다.