STM32F0 LL GPIO 제어
오늘은 HAL 드라이버가 아니라 LL 드라이버를 사용해서 LED를 제어하고자 한다.
LL 드라이버는 Low Layer의 약자로 HAL드라이버보다 세세하게 설정이 가능하고, 가볍고 빠르다는 장점이 있다. 하지만 하드웨어 구조에 대한 이해 역시 요구되고, 시리즈별로 호환성, 이식성이 떨어진다는 단점도 존재한다.
원래대로라면 F1시리즈를 이용해서 구성하고자 했으나, CUBEMX에서 지원이 되지 않는다. 그래서 지원이되는 F0시리즈를 이용해서 구성하고자 한다.
전반적인 세팅은 이 포스팅과 같다. 여기서 만져줘야 할 건 프로젝트 세팅인데, 아래를 참고하길 바란다.
CUBEMX에서 상단 탭에 있는 Project – Settings를 선택한다. (또는 Alt + P를 누른다.)
Advanced Settings에서 드라이버를 LL로 설정해 주면 된다.
이제 코드를 살펴보자.
HAL 드라이버에 비하면 코드가 길어졌다. 해당 함수를 보면 레지스터에 직접 값을 입력하거나 읽는 식으로 코드가 작성되어 있는데, 이 영향으로 HAL에 비하면 유저 편의성이 떨어진다. 조건문에서 B1 GPIO 포트(포트가 한 라인, 그러니까 4라인이 있으니 64/4 = 16핀을 의미한다.)에서 입력 데이터 레지스터를 읽는다. 이 중에 파란 버튼 핀이외에 다른 핀에서도 1의 값을 가지면 LED가 켜질 수 있으므로, B1핀만 값만 걸러내도록 &연산자를 사용한다. 이에 대한 레지스터는 아래에 첨부한다.
Reference manual RM0091 참고자료.
결과는 이 포스팅과 같다.