Eclipse + GNU ARM + STM32 - HAL hoặc SPL


10

Tôi sẽ bắt đầu với sự phát triển của ARM (sau 2 năm của AVR) và đã chọn bảng STM DISCOVERY với bộ vi xử lý stm32f4 trên đó.

Tôi đã quyết định sử dụng nhật thực + ARM gcc vì tôi không thích giới hạn mã trên Keil và tôi không có tiền để có phiên bản trả phí.

Theo hướng dẫn, tôi đã cài đặt nhật thực cùng với các công cụ ARM gcc + openocd + tạo các tiện ích, v.v.

Câu hỏi của tôi là về plugin 'gói'. Giống như mọi người mới bắt đầu, tôi bối rối không biết nên sử dụng STM HAL mới hay SPL cũ hơn.

Hiểu biết của tôi là HAL đã triển khai sự trừu tượng đến một mức độ mà nó có thể được gọi là Arduino tương đương với cánh tay. SPL mặt khác cung cấp sự trừu tượng vừa đủ để làm cho mã hóa nhanh hơn nhưng bạn vẫn cần phải xử lý ở cấp độ chip.

Với sự hiểu biết này, tôi muốn gắn bó với SPL để hiểu mọi thứ hơn là sử dụng HAL.

Những gì tôi muốn biết là, sử dụng các gói cho STM có bắt buộc tôi sử dụng HAL không? Nếu vậy, ai đó có thể chỉ cho tôi cách sử dụng SPL với thiết lập của tôi không?


1
"Các hướng dẫn" hơi mơ hồ, vì vậy tôi không biết về "plugin" gói "và tôi không biết SPL (thư viện ngoại vi STM là gì?) hay SPCL là gì. Có thể tôi chỉ không đủ điều kiện cho câu hỏi này, nhưng làm việc với STM32 trong hơn hai năm nay khiến tôi tự hỏi ...
Arsenal

2
SPL là Thư viện ngoại vi tiêu chuẩn , mặt khác tôi cũng không biết SPCL.
Bence Kaulics

2
Cách ưa thích và được hỗ trợ STM ngày nay là sử dụng STM32CubeMX, đang tạo mã dựa trên HAL. Và tôi phải thừa nhận nó khá tiện dụng, mặc dù tôi không phải là người hâm mộ các công cụ tự động vì chúng che giấu những thứ quan trọng ..
Eugene Sh.

1
Mặc dù nó hầu như tương thích với các phiên bản SPL của bộ xử lý STM32 khác, tôi không tin ST có SPL cho STM32F7.
Tut

Xin lỗi về bit SPCL. Đó là một sai lầm. Vẫn đang làm quen với các từ viết tắt. Cũng chỉ cần kiểm tra hai lần và bảng của tôi là biến thể stm32f4. Một sai lầm khác. Vẫn còn những câu hỏi chung, làm thế nào để tôi sử dụng thư viện ngoại vi tiêu chuẩn với nhật thực?
Ankit

Câu trả lời:


6

SPL, như tôi thấy, không liên quan gì đến IDE bạn đang sử dụng. Bạn có thể chỉ cần bao gồm các mô-đun có liên quan (ví dụ stmf4xx_dma.c và stmf4xx_dma.h) trong dự án của bạn và sử dụng các hàm được hiển thị (và được mô tả rất tốt) trong các tệp .c và .h. Trong thực tế, tôi đã học trên nhân stmf411 với gcc, openocd và SPL chỉ bằng dấu nhắc lệnh của windows; không có IDE. Các gói trong nhật thực có thể sẽ buộc bạn sử dụng HAL (vì trong thư mục 'Gói' đã tải xuống cho nhật thực, tôi chỉ thấy các mô-đun HAL).

Bản thân HAL IMO dường như nhiều lớp hơn mức cần thiết. Trong khi truy cập vào các thanh ghi trực tiếp trở nên mệt mỏi và hầu như không thể đọc được. SPL có vẻ vừa phải. clive1, guru trên diễn đàn st.com, cũng thích SPL hơn HAL. Đây là câu hỏi của tôi trên diễn đàn đó ... có thể hữu ích.

Cần trợ giúp với USART trên Nucleo stmf411


1
Tôi hoàn toàn đồng ý với bạn trong đó. HAL dường như đã quá nhiệt tình với toàn bộ khái niệm trừu tượng. Mặc dù với nó, người ta sẽ phát triển các chương trình nhanh hơn, nhưng bạn sẽ không thực sự tìm hiểu chính xác những gì đang xảy ra mà tôi nghĩ là cần thiết cho việc học và là bằng chứng trong tương lai. Để thử nghiệm, tôi đã tạo một dự án trong uvision và chọn hỗ trợ kế thừa thay vì các gói phần mềm và dường như đã bao gồm các tệp SPL. Cũng cảm ơn vì liên kết!
Ankit

1

Tôi không có bất kỳ kinh nghiệm nào với HAL, nhưng đã sử dụng SPL nhiều lần để tiết kiệm thời gian của tôi. Tôi tin rằng cộng đồng Target của bộ xử lý nhúng này là 2 nhóm: Nhóm đầu tiên không quan tâm đến việc tham gia với các lớp phần cứng. Lập trình viên phần mềm, người có sở thích thông thường và những người tôn thờ Arduino, Raspberry. Nếu bạn ở trong nhóm này, có vẻ như HAL là lựa chọn tốt cho bạn. Giây đến từ cộng đồng điện tử và phần cứng, những người thích

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

đến

LED_On(1)

để bật đèn LED và muốn biết những gì họ đang làm về cơ bản. sau đó nếu bạn có trong nhóm này và có đủ thời gian để đọc hướng dẫn tham khảo và hướng dẫn lập trình MCU của bạn thì có thể đăng ký lập trình cấp độ là một lựa chọn khác. nhưng nếu bạn muốn quyết định chỉ có 2 tùy chọn trên: HAL có tương lai tốt hơn vì hỗ trợ ST 'nhưng SPL là cách dễ hiểu hơn cho người mới bắt đầu. Có lẽ điều này có thể giúp http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-l Library /


1
Cảm ơn các liên kết, đọc thú vị! Bạn đã đúng, đối với người mới bắt đầu SPL có vẻ như là cách tốt hơn để học (và đây là cách tôi cũng đã chọn). Btw trong câu trả lời của bạn, nó phải là LED_ Tắt
Ankit

1

Nhận IDE này: System Workbench cho STM32 - miễn phí, dựa trên Eclipse và có cả arm-gcc và openocd trong một gói.

Và về các thư viện: ngoài SPL và HAL hiện tồn tại LL. Mỗi người có một số ưu điểm và nhược điểm, và bạn phải chọn những gì bạn cần. Và theo tôi hiểu , tất cả đều có trạng thái thử nghiệm cho ST. Dưới điểm số của tôi cho mỗi người trong số họ:

  • SPL: cũ, cồng kềnh, không sử dụng thêm ram, linh hoạt
  • HAL: thực tế, cồng kềnh, sử dụng ram thêm, không linh hoạt
  • LL: thực tế, ligtweigth, không sử dụng ram thêm, linh hoạt

Mô tả ngắn cho điểm của tôi:

  • cồng kềnh - sử dụng flash lớn, các chức năng phổ quát "siêu" để làm việc với ngoại vi
  • sử dụng thêm ram - đó là về HAL, nó có bản sao trạng thái ngoại vi trong các cấu trúc ram nằm và sử dụng nó ở mọi nơi và mọi lúc
  • không linh hoạt - và một lần nữa về HAL, nó có rất nhiều chức năng cho các trường hợp khác nhau, nhưng! hầu hết trong số chúng không thể sử dụng được cho các thiết bị thực (mọi người cố gắng xác định lại HAL để nhận byte theo byte từ usart >_<, tất cả các chức năng cho TIM + DMA được triển khai để ghi lại thanh ghi TIM và không có gì khác ...)

Đối với một chút phục hồi HAL: nó có một lợi thế lớn cho người mới - nó được STMCubeMX hỗ trợ.

BIÊN TẬP:

Tôi quên libopencm3 - đó là thư viện thay thế. Tôi đã không sử dụng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.