CẨM NANG STM32 CĂN BẢN CẦN BIẾT – Thiết lập Phần mềm

Cách quy ước thư mục được sử dụng

Xuyên suốt cuốn sách này, tôi sẽ chỉ đến các thư mục con khác nhau của phần mềm được cung cấp. Giả sử rằng thư mục cài đặt của bạn được đặt tên là “~/stm32f103c8t6.” Vì vậy, khi tôi đề cập đến tên đường dẫn “~/stm32f103c8t6/libopencm3/README.md,” tôi sẽ giả định rằng chúng ta đang bắt đầu từ thư mục chính của bạn (~).

Phần mềm điều hành

Tôi cũng sẽ giả sử bạn có một môi trường POSIX (Linux/Unix) để thực thi (run) các lệnh. Môi trường Linux hoặc Raspberry Pi dùng bash shell có lẽ là đương nhiên nhất. Các môi trường khác gồm FreeBSD và MacOS cũng tốt. Từ FreeBSD, tôi giả định rằng bạn đang sử dụng bash shell.

Nếu bạn đang dùng Windows, bạn nên cài đặt Cygwin (https://www.cygwin.com/), hoặc sử dụng MSYS để thay thế. Sau khi cài đặt hệ thống Cygwin cơ bản, hãy chắc rằng bạn cũng cài đặt make và git. Điều này sẽ cung cấp cho bạn một môi trường dòng lệnh giống như Linux để từ đó build phần mềm.

Người dùng Mac cần phải cài đặt git ở mức tối thiểu. Bạn cũng cần GNU make, nhất là khi bạn sử dụng FreeBSD (Free Berkeley Software Distribution). Đôi khi GNU make được cài đặt là gmake trong một hệ thống BSD (Berkeley Software Distribution – Phân phối Phần mềm Berkely). Nếu bạn đang sử dụng Mac Homebrew (https://brew.sh/), bạn có thể cài đặt những thứ được kể dưới đây:

$ brew install make
$ brew install git

Nếu bạn là người dùng Mac Ports (https://www.macports.org/), bạn cần sử dụng framework đó để cài đặt make và git.

=> Bài viết được trích từ sách : Cẩm nang STM32 (tập 1)

Phần mềm sách

Cấu trúc thư mục để build phần mềm với libopencm3 và FreeRTOS có sẵn từ github.com. Chọn một vị trí phù hợp từ đó để tạo thư mục con. Cuốn sách này sẽ giả định thư mục chính:

$ cd ~

Sử dụng lệnh git để tải về và tạo thư mục con như sau:

$ git clone https://github.com/ve3wwg/stm32f103c8t6.git

Lệnh này sẽ tạo thư mục ~/stm32f103c8t6. Tuy nhiên, cứ tự nhiên đổi tên nó để dễ gõ hơn, như ~/stm32.

libopencm3

Tiếp theo, chúng ta phải tải xuống phần mềm libopencm3 vào đúng vị trí. Đầu tiên, chuyển sang thư mục con, và sau đó xuất lệnh git clone cho libopencm3:

$ cd ~/stm32f103f8t6
$ git clone https://github.com/libopencm3/libopencm3.git

Điều này sẽ điền vào thư mục ~/stm32f103c8t6/libopencm3 với các file và thư mục con.

FreeRTOS

Phần mềm quan trọng tiếp theo là FreeRTOS. Có chút vấn đề ở đây, rằng bạn phải tải nó về dưới dạng file nén (.zip), rồi giải nén ra.

  1. Truy cập http://www.freertos.org/
  2. Tìm “Download Source” ở bên trái.
  3. Nhấp vào liên kết “2. Click to download the latest official release from SourceForge.”

Tùy thuộc vào trình duyệt và hệ điều hành của bạn, một file zip sẽ được tự động tải về. Trong tên tập tin, sẽ có một mã-phiên-bản (version number). Tại thời điểm tôi viết quyển sách này, tên file tải về là FreeRTOSv10.0.1.zip. Chuyển sang thư mục con ~/stm32f103c8t6/rtos trước khi giải nén. Trên máy Mac, thư mục tải xuống là ~/Downloads. Đổi địa chỉ thư mục chứa file tải về trong lệnh unzip theo đúng như trong máy tính của bạn:

$ cd ~/stm32f103c8t6/rtos
$ unzip ~/Downloads/FreeRTOSv10.0.1.zip

Khi hoàn tất, sẽ có một số file và thư mục con trong ~/stm32f103c8t62/rtos/FreeRTOSv10.0.1.

~/stm32f103c8t6/rtos/Project.mk

Bởi vì mã-phiên-bản của FreeRTOS được gồm trong tên thư mục con, nên có thể còn một điều chỉnh cần thực hiện. Sửa file Project.mk bằng trình chỉnh sửa (text editor) của bạn và tìm đến dòng sau gần đầu file:

FREERTOS	?= FreeRTOSv10.0.1

Nếu bạn dùng phiên bản FreeRTOS mới hơn, như FreeRTOSv11.0.0 chẳng hạn, hãy sửa lại để khớp với phiên bản của bạn và lưu file lại:

FREERTOS	?= FreeRTOSv11.0.0

Việc này sẽ cho phép file Project.mk làm việc chính xác khi bạn muốn tạo một dự án RTOS mới.

=> xem thêm : Lập trình Arm STM32

Trình-biên-dịch chéo ARM

Nếu bạn chưa cài đặt trình-biên-dịch chéo ARM, hãy cài đặt nó. Nếu đang chạy Linux hoặc Raspberry Pi, bạn chỉ cần sử dụng lệnh apt-get để cài đặt nó. Dù vậy, tôi khuyên bạn nên tải về và cài đặt toolchain theo các bước tóm lược dưới đây, vì một số công cụ biên dịch chéo không được tổ chức tốt và đôi khi không hoàn chỉnh.

Nếu bạn đang chạy Mac hoặc Windows (Cygwin), hãy sử dụng phương thức sau. Phương thức này cũng được đề xuất cho Linux và Raspberry Pi nếu bạn gặp vấn đề với các gói (chương trình) đã cài đặt:

  1. Truy cập trang web https://developer.arm.com/
  2. Nhấp vào liên kết “Linux/Open Source”.
  3. Kéo xuống và nhấp vào “ARM GNU Embedded Toolchain.”
  4. Kéo xuống và nhấp vào nút lớn để nhãn “Downloads”.
  5. Kéo xuống cho đến khi bạn tìm thấy đúng nền tảng bạn cần tải về. Windows 32-bit, Linux 64-bit, Mac OS X 64-bit, v.v. Nhấp vào lựa chọn thích hợp với nền tảng của bạn để tải về.
  6. Tạo một thư mục hệ thống /opt (nếu bạn chưa có):
$ sudo -i
# mkdir /opt
  1. Chuyển đến thư mục /opt (làm thư mục gốc):
# cd /opt
  1. Từ đây, bạn cần giải nén trình-biên-dịch vừa tải về (ví dụ cho máy Mac). Hãy sửa lại địa chỉ về thư mục chính của bạn:
# tar xjf ~myuserid/Downloads/gcc-arm-none-eabi-6-2017-q2-update-mac.tar.bz2

Sử dụng tùy chọn tar là “j” nếu kết thúc file là .bz2. Nếu không, sử dụng “z” khi kết thúc là .gz. Nếu bạn không có sẵn lệnh GNU tar cài đặt trên máy Mac, thì bạn có thể cài đặt nó bằng macports (http://www.macports.org/) hoặc Homebrew (https://brew.sh/).

  1. Khi file tar đã được lưu, nó có thể tạo ra một tên thư mục lớn như gcc-arm- none-eabi-6-2017-q2-update. Bây giờ chúng ta sẽ rút ngắn nó:
# mv gcc-arm-none-eabi-6-2017-q2-update gcc-arm

Cách này sẽ đổi tên thư mục /opt/gcc-arm-none-eabi-6-2017-q2-update thành /opt/gcc-arm dễ quản lý hơn.

  1. Bây giờ, thoát khỏi thư mục gốc (root) và trở về session developer của bạn. Trong session đó, thêm thư mục bin của trình-biên-dịch vào PATH của bạn:
$ export PATH="/opt/gcc-arm/bin:$PATH"
  1. Lúc này, bạn có thể kiểm tra trình-biên-dịch chéo của mình:
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors
6-2017-q2-update) 6.3.1 20170620 (release) [ARM/embedded-
6-branch
revision 249437]
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying
conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

Nếu trình-biên-dịch không bắt đầu và hiện thông báo như sau:

$ arm-none-eabi-gcc –version
-bash: arm-none-eabi-gcc: command not found

thì khi đó biến PATH của bạn hoặc không được thiết lập hay xuất ra đúng cách, hoặc các công cụ đã cài đang sử dụng một tiền-tố (prefix) khác. Thực hiện các bước sau nếu cần (output đã được viết tắt chút đỉnh ở đây):

$ ls -l /opt/gcc-arm/bin
total 75128
-rwxr-xr-x@ 1 root wheel 1016776 21 Jun 16:11 arm-none-eabi-addr2line
-rwxr-xr-x@ 2 root wheel 1055248 21 Jun 16:11 arm-none-eabi-ar
-rwxr-xr-x@ 2 root wheel 1749280 21 Jun 16:11 arm-none-eabi-as
-rwxr-xr-x@ 2 root wheel 1206868 21 Jun 19:08 arm-none-eabi-c++
-rwxr-xr-x@ 1 root wheel 1016324 21 Jun 16:11 arm-none-eabi-c++filt
-rwxr-xr-x@ 1 root wheel 1206788 21 Jun 19:08 arm-none-eabi-cpp
-rwxr-xr-x@ 1 root wheel 42648 21 Jun 16:11 arm-none-eabi-elfedit
-rwxr-xr-x@ 2 root wheel 1206868 21 Jun 19:08 arm-none-eabi-g++
-rwxr-xr-x@ 2 root wheel 1202596 21 Jun 19:08 arm-none-eabi-gcc
...
-rwxr-xr-x@ 2 root wheel 1035160 21 Jun 16:11 arm-none-eabi-nm
-rwxr-xr-x@ 2 root wheel 1241716 21 Jun 16:11 arm-none-eabi-objcopy
...

Nếu bạn lấy trình-biên-dịch chéo về từ một nguồn khác với nguồn nêu trên, bạn có thể không có tên tiền-tố. Nếu bạn thấy tên file gcc thay vì arm-none-eabi-gcc, bạn chỉ cần dẫn ra nó là gcc thôi. Nhưng hãy cẩn thận trong trường hợp này, bởi vì trình-biên-dịch chéo của bạn có thể bị lẫn lộn với trình-biên-dịch chính của bạn. Tiền-tố arm-none-eabi- sẽ ngăn chặn điều này. Khi bạn sử dụng gcc đa-nền-tảng, hãy kiểm tra xem có đúng trình-biên-dịch bạn cần đang được dùng với lệnh type hay không:

$ type gcc
arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/gcc)

Nếu bash shell của bạn đang định vị gcc từ một thư mục khác với thư mục bạn đã cài đặt, thì PATH của bạn không được đặt chính xác.

Nếu bạn phải thay đổi tiền-tố của toolchain, thì cần chỉnh sửa file ~/stm32f103c8t6/Makefile.incl ở thư mục chính (top-level directory):

$ cd ~/stm32f103c8t6
$ nano Makefile.incl

Sửa lại dòng sau để phù hợp và lưu lại:

PREFIX	?= arm-none-eabi

Trong một tình huống bình thường khi tiền-tố đa-nền-tảng đang được sử dụng, bạn cũng có thể thực hiện xác nhận này:

$ type arm-none-eabi-gcc
arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/arm-none-eabi-gcc)

Điều này xác nhận rằng trình-biên-dịch đang được chạy từ thư mục cài đặt /opt/gcc-arm.

Lưu ý Biến PATH cần được hiệu chỉnh cho mỗi phiên terminal mới để sử dụng toolchain biên dịch chéo. Để thuận tiện, bạn có thể tạo một script, hiệu chỉnh file ~/.bashrc của bạn hoặc tạo lệnh bí danh shell (shell alias) để thực hiện việc này.

=> Sách Arduino, ESP8266, STM32 : Sách tự động hóa