Eclipse + GNU ARM + STM32-HAL 또는 SPL


10

ARM 개발 (AVR 2 년 후)부터 시작하여 stm32f4 마이크로 프로세서가있는 STM DISCOVERY 보드를 선택했습니다.

Keil의 코드 제한이 마음에 들지 않고 유료 버전을 구입할 돈이 없기 때문에 Eclipse + ARM gcc를 사용하기로 결정했습니다.

튜토리얼에 따라 gcc ARM 도구 + openocd + make utils 등과 함께 이클립스를 설치했습니다.

내 질문은 '패키지'플러그인에 관한 것입니다. 모든 초보자와 마찬가지로 새로운 STM HAL 또는 이전 SPL 사용 여부에 대해 혼란스러워합니다.

내 이해는 HAL이 Arduino와 동등한 수준으로 추상화를 구현했다는 것입니다. 반면에 SPL은 코딩 속도를 높이기에 충분한 추상화를 제공하지만 여전히 칩 레벨을 처리해야합니다.

이 이해를 통해 HAL을 사용하는 것보다 더 잘 이해하기 위해 SPL을 고수하고 싶습니다.

내가 알고 싶은 것은 STM 용 패키지를 사용하면 암시 적으로 HAL을 사용해야합니까? 그렇다면 누군가 설치 프로그램에서 SPL을 사용하는 방법을 알려줄 수 있습니까?


1
"튜토리얼"은 약간 모호하므로 "패키지"플러그인 "에 대해 잘 모르며 SPL (STM 주변 장치 라이브러리) 또는 SPCL이 무엇인지 전혀 모릅니다. 어쩌면 나는이 질문에 대한 자격이 없지만, 2 년 넘게 STM32와 함께 일하면서 나를 궁금하게 만들었습니다.
Arsenal

2
SPL은 Standard Peripheral Library 이지만 SPCL도 알지 못합니다.
Bence Kaulics

2
오늘날 STM이 선호하고 지원하는 방식은 HAL을 기반으로 코드를 생성하는 STM32CubeMX를 사용하는 것입니다. 중요한 도구를 숨길 때 자동화 도구를 좋아하지는 않지만 매우 편리하다는 사실을 인정해야합니다.
Eugene Sh.

1
대부분 다른 STM32 프로세서 SPL 버전과 호환되어야하지만 ST에 STM32F7에 대한 SPL이 있다고 생각하지 않습니다.
Tut

SPCL 비트에 대해 죄송합니다. 그건 실수 였어 여전히 두문자어에 익숙해지고 있습니다. 또한 두 번 확인하고 내 보드는 stm32f4 변형입니다. 또 다른 실수. 여전히 일반적인 질문은, 표준 주변 라이브러리를 어떻게 Eclipse와 함께 사용합니까?
Ankit

답변:


6

내가 본 것처럼 SPL은 사용중인 IDE와 아무런 관련이 없습니다. 프로젝트에 관련 모듈 (예 : stmf4xx_dma.c 및 stmf4xx_dma.h)을 포함시키고 .c 및 .h 파일에서 노출되고 잘 설명 된 기능을 사용할 수 있습니다. 사실 저는 Windows 명령 프롬프트를 사용하여 gcc, openocd 및 SPL을 사용하여 stmf411 nucleo에 대해 학습했습니다. IDE가 없습니다. 이클립스 패키지는 아마도 HAL을 사용해야 할 것입니다 (이클립스의 다운로드 된 'Packages'폴더 안에 있기 때문에 HAL 모듈 만 보입니다).

HAL 자체 IMO는 필요한 것보다 훨씬 많이 계층화 된 것 같습니다. 레지스터에 액세스하는 것은 직접 번거롭고 읽기 어려울 수 있습니다. SPL이 옳아 보입니다. st.com 포럼의 전문가 인 clive1은 SPL보다 HAL을 선호합니다. 해당 포럼에 대한 질문은 다음과 같습니다.

Nucleo stmf411에서 USART에 도움이 필요하십니까


1
나는 그것에 당신과 완전히 동의합니다. HAL은 전체 추상화 개념을 넘어선 것으로 보인다. 그것으로 프로그램을 더 빨리 개발할 것이지만, 학습에 필수적이라고 생각하고 미래의 증거가되는 정확한 일을 실제로 배우지 못할 것입니다. 테스트로 저는 프로젝트를 비전으로 만들고 소프트웨어 팩 대신 레거시 지원을 선택했으며 SPL 파일이 포함 된 것 같습니다. 또한 링크 주셔서 감사합니다!
Ankit

1

HAL에 대한 경험이 없지만 SPL을 여러 번 사용하여 시간을 절약했습니다. 내 생각 에이 임베디드 프로세서의 대상 커뮤니티는 두 그룹입니다. 첫 번째 그룹은 하드웨어 계층과 관련이 없습니다. 소프트웨어 프로그래머, 평범한 애호가 및 Arduino, 라즈베리 숭배자. 이 그룹에 속해 있다면 HAL이 좋은 선택 인 것 같습니다. 전자 및 하드웨어 커뮤니티에서 제공하는 초

GPIO_A->PIN &= ~(1 << 15);

LED_On(1)

LED를 켜고 기본적으로 무엇을하고 있는지 알고 싶습니다. 이 그룹에 있고 MCU의 참조 매뉴얼과 프로그래밍 매뉴얼을 읽을 수있는 충분한 시간이 있다면 레지스터 레벨 프로그래밍이 또 다른 선택 일 수 있습니다. 그러나 위의 두 가지 옵션 중 하나만 선택하려면 ST의 지원으로 인해 HAL의 미래가 개선되지만 SPL은 새로운 스타터를 이해하는 더 쉬운 방법입니다. 아마도 이것은 http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/ 를 도울 수 있습니다


1
흥미로운 링크를 읽어 주셔서 감사합니다! 초보자는 SPL을 배우기 위해 더 좋은 방법처럼 보입니다 (그리고 이것이 내가 선택한 방법이기도합니다). 답장에서 Btw는 LED_Off 여야합니다
Ankit

1

이 IDE : STM32 용 System Workbench -Eclipse 기반의 무료이며 하나의 패키지에 arm-gcc와 openocd가 모두 있습니다.

그리고 라이브러리에 대해 : SPL 및 HAL 외에 지금 LL 존재한다. 각각에는 약간의 단점과 단점이 있으며 필요한 것을 선택 해야합니다. 그리고 내가 이해하는 것처럼 , 그들 모두는 ST에 대한 실험 상태를 가지고 있습니다. 그들 각각에 대한 나의 성적 아래 :

  • SPL : 오래되고 번거롭고 추가 램 사용이없고 유연함
  • HAL : 실제적이고 성가 시며 여분의 램 사용, 유연하지 않음
  • LL : 실제, ligtweigth, 추가 램 사용 없음, 유연성

내 성적에 대한 간단한 설명 :

  • 성가신-큰 플래시 사용, 주변 장치 작업을위한 "슈퍼"범용 기능
  • 여분의 램 사용-HAL에 관한 것으로, 램에 위치한 struct에 주변 장치 상태 복사본이 있으며 언제 어디서나 사용
  • 융통성이 없으며 HAL에 대해서는 여러 경우에 대해 많은 기능이 있지만! 대부분은 실제 장치에 사용할 수 없습니다 (사람들은 usart로부터 바이트 단위로 수신하기 위해 HAL을 다시 초기화하려고 시도합니다 .TIM >_<+ DMA의 모든 기능은 TIM 레지스터를 다시 쓰도록 구현되었으며 다른 것은 없습니다 ...)

약간의 재활을 위해 HAL : STMCubeMX에 의해 지원되는 초보자에게는 큰 이점이 있습니다.

편집하다:

libopencm3 에 대해 잊어 버렸 습니다 -대체 라이브러리입니다. 나는 그것을 사용하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.