Eclipse + GNU ARM + STM32 - HAL หรือ SPL


10

ฉันจะเริ่มต้นด้วยการพัฒนา ARM (หลังจากใช้งาน AVR มา 2 ปี) และเลือกบอร์ด STM DISCOVERY ที่มีไมโครโปรเซสเซอร์ stm32f4 อยู่

ฉันตัดสินใจที่จะไปกับ eclipse + ARM gcc เนื่องจากฉันไม่ชอบขีด จำกัด โค้ดบน Keil และฉันไม่มีเงินที่จะได้รับเวอร์ชันที่จ่ายเงิน

บทเรียนต่อไปนี้ฉันได้ติดตั้ง eclipse พร้อมกับ gcc ARM tools + openocd + ทำ utils เป็นต้น

คำถามของฉันเกี่ยวกับปลั๊กอิน 'แพ็คเกจ' เช่นเดียวกับผู้เริ่มต้นฉันสับสนว่าจะใช้ STM HAL ใหม่หรือ SPL รุ่นเก่า

ความเข้าใจของฉันคือ HAL ได้นำเอานามธรรมไปใช้ในระดับที่สามารถเรียกว่า Arduino เทียบเท่ากับแขน ในทางกลับกัน SPL ให้สิ่งที่เป็นนามธรรมเพียงพอที่จะทำให้การเข้ารหัสเร็วขึ้น แต่คุณยังคงต้องจัดการกับระดับชิป

ด้วยความเข้าใจนี้ฉันต้องการติดกับ SPL เพื่อทำความเข้าใจกับสิ่งต่าง ๆ ได้ดีกว่าการใช้ HAL

สิ่งที่ฉันอยากรู้คือการใช้แพ็คเกจสำหรับ STM บังคับให้ฉันใช้ HAL โดยปริยายหรือไม่ ถ้าเป็นเช่นนั้นจะมีคนแนะนำฉันเกี่ยวกับวิธีใช้ SPL กับการตั้งค่าของฉันได้อย่างไร


1
"บทเรียน" นั้นค่อนข้างคลุมเครือดังนั้นฉันไม่รู้เกี่ยวกับ "ปลั๊กอิน" แพ็คเกจ "และฉันไม่รู้ว่า SPL (ห้องสมุดต่อพ่วง STM คืออะไร) หรือ SPCL บางทีฉันอาจจะไม่ผ่านการรับรองสำหรับคำถามนี้ แต่การทำงานกับ STM32 มานานกว่าสองปีทำให้ฉันสงสัย ...
Arsenal

2
SPL เป็นStandard Peripheral Libraryในทางกลับกันฉันไม่รู้จัก SPCL เช่นกัน
Bence Kaulics

2
วิธีที่ได้รับความนิยมและได้รับการสนับสนุนในปัจจุบันคือการใช้ STM32CubeMX ซึ่งสร้างรหัสขึ้นอยู่กับ HAL และฉันต้องยอมรับว่ามันค่อนข้างมีประโยชน์แม้ว่าฉันจะไม่ได้เป็นแฟนของเครื่องมืออัตโนมัติเนื่องจากพวกเขาซ่อนสิ่งที่สำคัญ ..
Eugene Sh

1
แม้ว่าส่วนใหญ่ควรเข้ากันได้กับรุ่น SPL ของโปรเซสเซอร์ STM32 อื่น ๆ ฉันไม่เชื่อว่า ST มี SPL สำหรับ STM32F7
Tut

ขออภัยเกี่ยวกับ SPCL บิต นั่นเป็นความผิดพลาด ยังคงคุ้นเคยกับคำย่อเพียงตรวจสอบสองครั้งและบอร์ดของฉันคือตัวแปร stm32f4 ความผิดพลาดอีกประการหนึ่ง คำถามทั่วไปยังคงอยู่ฉันจะใช้ไลบรารีอุปกรณ์ต่อพ่วงมาตรฐานกับ eclipse ได้อย่างไร
Ankit

คำตอบ:


6

SPL อย่างที่ฉันเห็นไม่มีอะไรเกี่ยวข้องกับ IDE ที่คุณใช้อยู่ คุณสามารถรวมโมดูลที่เกี่ยวข้อง (เช่น stmf4xx_dma.c และ stmf4xx_dma.h) ในโครงการของคุณและใช้ฟังก์ชันที่เปิดเผย (และอธิบายได้ดีมาก) ในไฟล์. c และ. h อันที่จริงฉันเรียนรู้เกี่ยวกับ stmf411 nucleo ด้วย gcc, openocd และ SPL โดยใช้คำสั่ง windows command; ไม่มี IDE แพ็คเกจใน eclipse อาจบังคับให้คุณใช้ HAL (เนื่องจากภายในโฟลเดอร์ 'แพ็คเกจ' ดาวน์โหลดสำหรับ eclipse ฉันจะเห็นเฉพาะโมดูล HAL)

HAL ตัวเอง IMO ดูเหมือนชั้นมากเกินความจำเป็น ในขณะที่การเข้าถึงรีจิสเตอร์โดยตรงนั้นน่าเบื่อและแทบจะไม่สามารถอ่านได้ SPL ดูเหมือนจะถูกต้อง clive1, กูรูบนฟอรัม st.com, ชอบ SPL มากกว่า HAL ด้วย นี่คือคำถามของฉันในฟอรัมนั้น ... อาจเป็นประโยชน์

ต้องการความช่วยเหลือเกี่ยวกับ USART ใน Nucleo stmf411


1
ฉันเห็นด้วยกับคุณโดยสิ้นเชิงในเรื่องนั้น ดูเหมือนว่า HAL จะจบลงแล้วด้วยแนวคิดที่เป็นนามธรรมทั้งหมด แม้ว่ามันจะพัฒนาโปรแกรมได้เร็วขึ้น แต่คุณจะไม่ได้เรียนรู้สิ่งที่เกิดขึ้นจริง ๆ ซึ่งฉันคิดว่าเป็นสิ่งจำเป็นสำหรับการเรียนรู้และเพื่อเป็นหลักฐานในอนาคต ในการทดสอบฉันสร้างโครงการใน uvision และเลือกการสนับสนุนแบบดั้งเดิมแทนชุดซอฟต์แวร์และดูเหมือนว่าจะรวมไฟล์ SPL ไว้ด้วย ขอบคุณสำหรับลิงค์!
Ankit

1

ฉันไม่มีประสบการณ์กับ HAL แต่ใช้ SPL หลายครั้งเพื่อช่วยประหยัดเวลาของฉัน ในความเชื่อของฉันชุมชนเป้าหมายของตัวประมวลผลแบบฝังนี้คือ 2 กลุ่ม: กลุ่มแรกที่ไม่สนใจมีส่วนร่วมกับเลเยอร์ฮาร์ดแวร์ โปรแกรมเมอร์ซอฟต์แวร์ผู้ทำงานอดิเรกปกติและ Arduino ผู้ละหมาดราสเบอร์รี่ หากคุณอยู่ในกลุ่มนี้ดูเหมือนว่า HAL เป็นตัวเลือกที่ดีสำหรับคุณ วินาทีที่มาจากชุมชนอิเล็กทรอนิกส์และฮาร์ดแวร์ที่ต้องการ

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

ถึง

LED_On(1)

สำหรับการเปิดไฟ LED และต้องการทราบว่าพวกเขากำลังทำอะไรอยู่ ถ้าคุณมีในกลุ่มนี้และมีเวลาเพียงพอในการอ่านคู่มืออ้างอิงและคู่มือการเขียนโปรแกรมของ MCU ของคุณบางทีการเขียนโปรแกรมระดับลงทะเบียนเป็นอีกทางเลือกหนึ่ง แต่ถ้าคุณต้องการเลือกระหว่าง 2 ตัวเลือกเท่านั้น: HAL มีอนาคตที่ดีกว่าเนื่องจากการสนับสนุน ST 'แต่ SPL เป็นวิธีที่ง่ายกว่าในการทำความเข้าใจสำหรับผู้เริ่มต้นใหม่ บางทีนี่อาจช่วยhttp://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/


1
ขอบคุณสำหรับลิงค์ที่น่าสนใจอ่าน! คุณถูกต้องสำหรับผู้เริ่มต้น SPL ดูเหมือนจะเป็นวิธีที่ดีกว่าในการเรียนรู้ (และนี่คือวิธีที่ฉันเลือก) Btw ในการตอบกลับของคุณควรเป็น LED_Off
Ankit

1

รับ IDE นี้: System Workbench สำหรับ STM32ฟรีจาก Eclipse และมีทั้ง arm-gcc และ openocd ในแพ็คเกจเดียว

และเกี่ยวกับห้องสมุด:นอกจาก SPL และ HAL แล้วตอนนี้มี LL แต่ละคนมี advatages และข้อเสียบางอย่างและคุณต้องเลือกสิ่งที่คุณต้องการ และตามที่ฉันเข้าใจพวกเขาทั้งหมดมีสถานะการทดลองสำหรับ ST ต่ำกว่าคะแนนของฉันสำหรับแต่ละคน:

  • SPL: เก่ายุ่งยากไม่ใช้หน่วยความจำเสริมยืดหยุ่นได้
  • HAL: จริงยุ่งยากการใช้ RAM เพิ่มไม่ยืดหยุ่น
  • LL: จริง, ligtweigth, ไม่ต้องใช้ ram เพิ่มเติม, ยืดหยุ่นได้

คำอธิบายสั้น ๆ สำหรับเกรดของฉัน:

  • ยุ่งยาก - การใช้แฟลชขนาดใหญ่ฟังก์ชั่นอเนกประสงค์ "super" สำหรับใช้งานกับอุปกรณ์ต่อพ่วง
  • การใช้งาน ram พิเศษ - มันเกี่ยวกับ HAL แต่ก็มีสำเนาของรัฐรอบนอกใน ram ตั้งอยู่ structs และใช้งานได้ทุกที่ทุกเวลา
  • ไม่ยืดหยุ่น - และอีกครั้งเกี่ยวกับ HAL มันมีฟังก์ชั่นมากมายสำหรับเคสที่แตกต่างกัน แต่! ส่วนใหญ่ไม่สามารถใช้งานได้กับอุปกรณ์จริง (คนพยายามตั้งค่า HAL ใหม่เพื่อรับ byte byte จาก usart >_<ฟังก์ชั่นทั้งหมดสำหรับ TIM + DMA ถูกนำไปใช้เพื่อเขียน TIM register และไม่มีอื่น ๆ ... )

สำหรับการพักฟื้น HAL เพียงเล็กน้อย: มันมีข้อดีอย่างหนึ่งที่ยิ่งใหญ่สำหรับมือใหม่ - มันสนับสนุนโดย STMCubeMX

แก้ไข:

ฉันลืมlibopencm3 - เป็นห้องสมุดสำรอง ฉันไม่ได้ใช้มัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.