[ARM LINUX GCC] Hướng dẫn lập trình STM32F0 trên LINUX

Với các bạn lập trình vi điều khiển STM32F0 thì phần mềm KeilC dường như quá quen thuộc và phổ biến trên nền tảng Window. Người dùng có thể lập trình và nạp trực tiếp thông qua KeilC với thao tác vài cú click chuột. Tuy nhiên KeilC chỉ thích hợp với người dùng Window thôi. Với người dùng Linux thì đây là bài toán hóc búa để có thể lập trình và nạp mạch. Thì bài viết này, mình sẽ hướng dẫn các bạn cách để có thể thực hiện lập trình và nạp mạch với kit cụ thể là STM32F030F4P6 trên Linux nhé.Các bạn có thể tìm mua kit với link này nhé:

https://epcb.vn/products/kit-phat-trien-arm-cortex-m0-stm32f030f4p6-tich-hop-usb-uart-ch330n

Các công cụ cần sử dụng:

  • Qt creator: công cụ lập trình C, thích hợp với môi trường Linux
  • ST-FLASH: công cụ flash kit cho ARM
  • Arm GCC và OPENOCD: Công cụ debug cho ARM

Các bước cần thực hiện:

1/ Cài đặt Qt creator

Các bạn vào đường dẫn cài offline bên dưới, chọn bản Qt mới nhất cho Linux, thường thời gian tải từ server sẽ khá lâu nên mình khuyên các bạn tải dùng IDM bên Window rồi vào Linux truy cập file. (file setup cho Linux có đuôi .run)

Link tải Qt Creator: http://download.qt.io/archive/qt/

Video hướng dẫn:


Vào thư mục vừa tải file về mở terminal nhập lệnh (với phiên bản mình tải là 5.13.2):

$ chmod +x qt-opensource-linux-x64-5.13.2.run

./qt-opensource-linux-x64-5.13.2.run

Các bạn điền tài khoản và nhấn next tới khi hoàn thành.

2/ Cài đặt Arm GCC và OpenOCD

Nhấn vào 2 link tải bên dưới và chọn Arm GCC mới nhất và bản OpenOCD. Đây là 2 công cụ quan trọng nhất để tiến hành build code và debug.

  • Link tải Arm GCC (chọn bản Linux x86_64):

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

  • Link tải OpenOCD:

https://github.com/morbos/openocd-0.10.0

Tạo thư mục tools nhằm chưa các công cụ build, flash cho project. Folder này nên đặt trong cùng thư mục mẹ chứa project của các bạn. Giải nén 2 file vừa tải vào thư mục tools. Như vậy là hoàn thành cài đặt các phần mềm và firmware nạp.


3/ Tạo Project Qt

Tải mẫu Project Led_Blink theo đuờng dẫn bên dưới và giải nén vào thư mục mẹ chung với thư mục tools nhằm dễ tùy chỉnh project các bạn hơn:

https://drive.google.com/file/d/1z72XCIc6C-SJ3v8jXVLZEVzuuvhyI4L-/view?usp=sharing

Chọn +New -> Import Project -> Import Existing Project -> Choose


Trỏ đường dẫn tới thư mục application(thư mục có Makefife) từ project mẫu vừa tải và Open -> Next -> Stick chọn hết -> Next


Mở file Makefile và tìm dòng đường GCC_PATHOPENOCD_PATH (đối với mình là dòng 14 15). Tại đây các bạn trỏ lại đường dẫn đến 2 thư mục GCC và OPENOCD vừa tải vào mục tools.

Kiểm tra source thư viện STD đã add vào project của bạn đủ chưa trước khi build nhé. Nếu thiếu thư viện, QT sẽ báo lỗi chưa định nghĩa. Nếu thiếu, các bạn thêm vào source C các hàm trong Makefile.mk ở thư viện STD_Lib nhé. Ở đây mình chỉ dùng GPIO nên chỉ thêm gpio.c của STD:

Phần code chính các bạn sẽ build trong app.c thay vì main.c như bên KeilC, nhấn Build (hình cây búa) để build chương trình. Nếu Output Compile hiển thị excuted normally là build thành công. Lúc này các bạn đã có thể flash vào kit.

4/ Cài đặt ST-Flash và flash kit

Sau khi hoàn thành cài đặt Qt và các IDE cần thiết, ta tiến hành cài đặt firmware flash code cho STM32:

$ sudo apt-get install git make cmake libusb-1.0-0-dev

$ sudo apt-get install gcc build-essential

Tiếp theo, ta thực hiện clone source ST-Link theo code:

$ cd tools

$ git clone https://github.com/stlink-org/stlink

$ cd stlink

$ cmake .

$ make

Các bạn mở terminal ở thư mục chứa Makefile và nhập code như dưới. Nếu xuất hiện usb st-link như hình là máy tính đã nhận usb và sẵn sàng nạp. Lúc này, các bạn có thể kết nối usb với mạch theo chuẩn SWD:

$ lsusb

Sau bao nhiêu công đoạn cực nhọc, bạn đã tiến tới giai đoạn cuối cùng. Chỉ cần các bạn nhập lệnh bên dưới là kit được flash hoàn tất và bạn có thể tận hưởng thành quả:)

$ make clean

$ make flash


Nếu Terminal không báo jolly good! thì các bạn kiểm tra lại dây kết nối và flash lại nhé. Hoặc các bạn có thể flash kit theo lệnh dưới đây, file flash qua st-flash là file có đuôi .bin. Trong VD của mình thì nó sẽ nằm trong mục build_arm_cortex_M0_base_application sau khi các bạn excute code thành công:

st-flash [lựa chọn] {read|write|erase} [tên file] <địa chỉ> <kích thước>

VD: $ st-flash write firmware.bin 0x8000000

Ở phần sau của chuỗi bài viết nạp STM32, mình sẽ giới thiệu cách debug chương trình, cách theo dõi từng symbol nhé.

Hy vọng bài viết này sẽ giúp ích cho các bạn. Nếu các bạn có những thắc mắc cần giải đáp, hãy nhắn tin cho mình qua Fanpage: EPCB hoặc qua Email: epcbtech@gmail.com.

Cảm ơn các bạn đã theo dõi bài viết và chúc các bạn thành công.