• 카테고리

    질문 & 답변
  • 세부 분야

    임베디드 · IoT

  • 해결 여부

    미해결

개인정의 질문

22.10.19 16:28 작성 조회수 194

0

안녕하세요 선생님 오늘처음 HAL에 대해 공부하는 학생입니다!

SPL에서는 예를들어 main.h에 #define test 't'를 정의하고

main.c에 case문을 이용하여 불러올때

case 't': //이런식으로 불러올 수 있는데

HAL 에서도 동일하게 가능한가요?

답변 1

답변을 작성해보세요.

1

안녕하세요! HAL과 SPL 그리고 C언어 문법에 대해서 아직 개념이 잘 안잡히신 것 같습니다.

우선 HAL과 SPL은 C언어를 기반으로 만들어진 peripheral 구동 라이브러리 입니다.

더 쉽게 말씀드리면,

STM32의 peripheral (예를 들면, GPIO나 UART 등) 구동을 위한 라이브러리인 것이죠.

SPL의 경우 USART_TransmitData() 라는 함수가 있는데 이와 유사하게 HAL의 경우는 HAL_UART_Transmit() 라는 함수가 존재합니다. 둘 다 모두 STM32의 UART로 데이터를 송신하는 함수이고, 모두 C언어로 작성되어있습니다.

SPL이나 HAL을 사용하지 않고 C언어로 직접 라이브러리를 작성할 수도 있습니다. 다만 그러기엔 기능이 워낙 복잡해서 ST에서 자사의 MCU를 쉽게 사용할 수 있도록 SPL이나 HAL, LL 같은 라이브러리를 제공해주는 것이죠.

 

C언어는 프로그래밍 언어입니다.

익히 알고계신 switch-case 문이나 if 문 등이 문법적으로 정의되어있는 언어이죠.

 

따라서, HAL이나 LL, SPL 모두 C언어 기반이기 때문에 switch-case등 모든 C언어의 문법이 사용 가능합니다. 강의에서처럼 HAL드라이버 내부의 코드를 살펴보면 좀 더 이해가 될 것 같네요~

백승호님의 프로필

백승호

질문자

2022.10.20

제가 질문을 잘못한거 같습니다. 모두 c기반으로 작성되는건 알고 있습니다. 다만 STM32CubeIDE에서 'USER CODE BEGIN ' 이후부터 'USER CODE END'안에 선언해야 코드가 날아가지 않는다고해서 .h 유저코드 부분의 그냥 선언을 하면 되는지 아직 감을 못잡아서 혹은 begin~end 아무 곳에나 선언을 해도 되는지에 대한 질문이였습니다!