Hướng dẫn lập trình 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.
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ị
- Kit STM32F4 (mình dùng cái có sẵn)
- Gcc-arm-none-eabi bản 5_4-2016q3-20160926
Cài Toolchain
Tạo thư mục, giải nén GCC và add path
$ sudo apt-get install flex bison libgmp3-dev libmpfr-dev libncurses5-dev libmpc-dev autoconf \texinfo build-essential libftdi-dev libsgutils2-dev zlib1g-dev libusb-1.0-0-dev git
$ mkdir ~/stm32f4
$ cd ~/stm32f4
$ cd ~/Downloads
$ tar -xvf gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2 -C ~/Embedded
$ export PATH=$PATH:$HOME/Embedded/gcc-arm-none-eabi-5_4-2016q3/bin
Cài đặt ST-link
Cá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
$ sudo apt-get install libusb-1.0-0-dev git
$ cd ~/stm32f4
$ git clone https://github.com/texane/stlink.git
$ cd stlink
$ git checkout texane/pipe
$ ./autogen.sh
$ ./configure
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 LIBS = -lusb-1.0
Sau đó chạy lệnh make bên dưới
$ make
$ sudo mkdir -v /opt/stlink
$ sudo cp -v 49-stlinkv*.rules /etc/udev/rules.d/
$ sudo udevadm control --reload-rules
Chạy thử chương trình
Vớ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 😀
$ cd ~/stm32f4
$ git clone https://github.com/karlp/kkstm32_base.git
$ cd kkstm32_base/example/stm32f4/STM32F4xx_StdPeriph_Driver/build/
$ make
$ cd ../../Projects/IO_Toggle/
$ make
$ st-flash write IO_Toggle.bin 0x08000000
Đâ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é
Lưu ý: Với mạch ST-link v2.1 tạm thời chưa thể flash được nhé, phương án tạm khắc phục là dùng OpenOCD
Cập nhật: đã sử dụng được với mạch ST-Link firmware mới nhất, mình sẽ có bài viết mới để hướng dẫn các bạn sau nha
Tạm kết
Thế 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