인프런 커뮤니티 질문&답변

Jimmy님의 프로필 이미지

작성한 질문수

HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌

UART통신 (폴링방식)

UART내부 함수 질문

20.08.31 13:38 작성

·

303

1

안녕하세요, 강의 감사드립니다. 

질문있습니다.

1. LED 켜기부터 UART통신 , 그리고 앞으로 I/O 실습까지 STM IDE에서 뿌려주는 함수를 사용하는 것으로 알고있습니다. 

강의에서는 바로 함수를 사용하고, 매개변수/파라미터 값으로 어떤것들이 들어간다는것을 알고있는 상태입니다. 

하지만, 이를 처음 쓴다고 가정했을때는 HAL Layer나 함수내부를 직접들어가서 매개변수를 분석하고 사용하면서 디버깅을 해야되는건가요??  또한 해당I/O에 대한 개념이 있는 상태여야만 함수를 사용할 수 있는 거 맞나요? 

2. 만약에 STM IDE가 없다는 가정에서는 HAL 단 및 내부함수까지 직접(핀설정부터) 어셈블리로 코딩을 해서 구현을 해야되는 것인가요?? 실무에서도 이런 경우가 있는지요? 아니면 강의처럼 뿌려지는 함수를 가지고 활용하는경우가 많은지요? 

감사합니다.  

답변 2

1

ChrisP님의 프로필 이미지
ChrisP
지식공유자

2020. 09. 01. 17:39

안녕하세요!

1. 아무래도 HAL 드라이버를 처음 쓰는 경우는 함수의 매개변수가 뭔지 알아야 하기 때문에 말씀하신대로 드라이버 코드를 분석하는 과정이 좀 필요할 것 같습니다. 저도 처음엔 그렇게 했었고요. 

하나하나 다 분석하기는 시간이 오래걸릴 수 있으니, ST에서 제공하는 HAL 드라이버를 사용한 example 들을 확인하시는게 이해가 빠를겁니다.

말씀하신 I/O가 함수의 매개변수에 대한 거라면 먼저 개념파악이 되어있어야 HAL 드라이버를 사용하기가 수월해지겠죠. 맞는 말씀인것 같습니다.

2. HAL 드라이버를 사용하지 않을 경우엔 HAL 드라이버같은 함수를 직접 작성해야겠죠.

근데 32bit MCU의 경우 워낙 레지스터의 종류도 많고 기능도 많아서 이걸 하나씩 직접 작성하는게 더 비효율적이 되었습니다.

개발 기간이 길어진다는 엄청난 단점이 있죠.

그렇기 때문에 ST같은 칩 제조사에서는 자사의 칩을 빠르고 쉽게 사용할 수 있도록 드라이버 함수 형태로 라이브러리를 제공합니다. 사용하기 쉬워야 개발자들이 자기네 칩을 많이 살 테니까요.

그래서 HAL 드라이버를 사용하면 개발 기간이 단축되긴 하지만, HAL 드라이버가 범용성을 고려하여 정의되었기 때문에, 저희가 사용하지 않는 불필요한 내용까지 코드에 포함되어 있는 경우가 있습니다.

이건 처리시간 관점에서 보면 좀 비효율적일 수도 있죠.

그래서 ST에서는 HAL 드라이버와 동시에 LL 드라이버를 같이 제공하는데, LL은 HAL에 비해 좀 더 단순한 구조를 가지고 있어서 처리시간을 단축시킬 순 있지만, 기본적인 함수만 제공을 하기 때문에 사용자가 대부분을 다시 작성해줘야 하는 불편함이 있습니다. 

근데 이 마저도 C언어로 작성이 되어있기 때문에 시간 최적화를 더 해야하는 경우라면 일부 내용을 어셈블리로 작성하는 경우도 있겠습니다만, 최근에는 MCU 자체의 동작 속도가 워낙 빠르기 때문에 어셈으로 코드를 짜는일은 거의 없다고 봐도 될 것 같네요. 대학에서도 어셈을 안가르치는 경우가 더 많은 이유가 있을겁니다.

결론은, 32bit MCU가 보편화 된 후부터는 어셈블리어로 코드를 작성하는 경우는 거의 없어졌다고 보시면 됩니다. HAL이나 LL 드라이버로도 왠만한 어플리케이션을 무리없이 구동할 수 있습니다.

대답이 되었나 모르겠네요 ㅎㅎ

0

ChrisP님의 프로필 이미지
ChrisP
지식공유자

2020. 09. 01. 17:43

아 참고로, STM CubeIDE말고 다른 IDE를  사용하더라도 HAL드라이버나 LL드라이버를 사용할 수 있습니다.

Jimmy님의 프로필 이미지

작성한 질문수

질문하기