Lập trình cho stm32 trên linux
Hướng dẫn lập trình STM32 trên linux, không dùng IDE, chỉ gõ lệnh. Nghe thấy hơi phiêu phiêu nhưng mà cách này khá hấp dẫn, bỏ qua mọi rào cản, vượt qua mọi giới hạn, chỉ dành riêng cho các bạn thích ngâm cứu tìm hiểu thêm khi lỡ chuyển từ window sang linux. Show Tạm thời như mọi người đã biết thì ta thường phải dùng các IDE như Keil C, IAR để lập trình, mấy cái này thường là dễ dùng, dễ biên dịch, ấn nút cái là có file nạp thẳng vào kit luôn, nhưng cái gì dễ thì thường tiết kiệm được nhiều thời gian, nhưng lại tốn tiền, mà license của mấy cái IDE này thường không rẻ chút nào. Thế nên một số anh em thường đổ xô đi tìm bản chùa (bản cr*ck). Nếu 1 ngày các bản chùa không còn nữa thì chúng ta phải sống ra sao ? Có 2 cách một là bạn xài bản dùng thử, hai là bạn chuyển sang xài compiler miễn phí, mình từng nói qua về cách lập trình STM32 với Ubuntu dùng SW4STM, cái này thì đơn giản dễ làm, chỉ việc cài và dùng chung với CubeMX, tuy nhiên ở bài viết này thì mình muốn làm từ đầu tất cả mọi thứ, chỉ gõ lệnh và nạp chương trình xuống, hơi thủ công một chút Mình có một bài hướng dẫn chạy ARM với linux khác là TIVA C bạn có thể xem tại đây nếu bạn không dùng STM32. Chuẩn bị
Tạo thư mục, giải nén GCC và add path
Cài đặt ST-linkCái này là cái vất vả nhất, nhiệm vụ là cài libusb, compile và cho phép user có thể truy cập tới st-link, mục đích chính là để nạp được chương trình của bạn xuống kit
Phần này sau khi configure xong sẽ sinh ra Makefile, bạn copy thư viện
libusb.h vào thư mục st-link và chỉnh sửa lại makefile dòng 235
Chạy thử chương trìnhVới thư viện STM32 thì hầu như là không có hỗ trợ cài đặt nhiều trên linux cũng như các IDE miễn phí, tuy nhiên có ông Karl Palsson có tâm đã viết lại khá nhiều project mẫu mà chúng ta có thể tham khảo và tiện đường thì mình cũng lấy của ổng xài luôn 😀
Đây là kết quả sau khi nạp thành công, cứ có dòng “…Flash written and verified! jolly good!” là ok rồi, bạn có thể xem ở bên dưới kit F4 đang chớp LED ầm ầm nhé
Tạm kếtThế là đã xong các bước cài đặt, compile và nạp được một chương trình đơn giản là blink LED xuống kit stm32f4, hi vọng sẽ là khởi đầu trọn vẹn cho các bạn muốn thử thách bản thân trên một môi trường mới và các công cụ opensource. Tham khảo [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Hướng dẫn lập trình STM32F0 trên LINUXVớ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:
Các bước cần thực hiện: 1/ Cài đặt Qt creatorCá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à OpenOCDNhấ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.
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
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 QtTả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_PATH và OPENOCD_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 kitSau 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ỉ> 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: . 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. |