Playlist hướng dẫn
1. Lời nói đầu
Sử dụng bo mạch chứa MCU STM32F103 (79k tại hshop) có giá thành rẻ hơn cả bo Arduino Nano. Hơn thế nữa STM32F103 có cấu hình thật khủng, mạnh hơn rất nhiều. Đó là chíp Cortex-M3 ARM có thể hoạt động tại xung nhịp 72MHz, 20kB RAM và 64 hoặc 128 kB bộ nhớ Flash…
Mình đã thử lập trình trên Arduino IDE và STM32 HAL nhưng thật là bất tiện và khó khăn. Arduino đúng là đơn giản nhưng thật khó để có thể can thiệp các tính năng nâng cao của dòng ARM. Trong khi đó HAL khá khó để lập trình.
Sử dụng HAL trong Eclipse cũng có một số bất tiện như không thể trực tiếp nạp code vào trong flash mà phải sử dụng phần mềm ST-Link để upload lên.
Kể từ khi mình biết đến PlatformIO IDE (từ khi mà mình nghiên cứu dòng ESP8266 và ESP32) như là một plugin trong Visual Studio hay trong Atom. Và điều tuyệt vời nhất là platform này có thể hỗ trợ đến hơn 500 loại bo phát triển (có cả các bo Arduino, ESP, MSP, 8051, PIC, v.v..). Mặc dù Visual Studio Code (VSC) và Atom đều là hai công cụ soạn thảo và biên tập code, nhưng VSC (của Microsoft) khá là nhẹ và hoàn toàn miễn phí.
Bạn có thể lập trình STM trên VSC với Arduino API, STM32Cube API, nhưng cũng có một framework mới mà bạn nên biết đó là Mbed – cái mà mình thấy rất dễ dùng để lập trình
2. Các bước chuẩn bị
A. Phần cứng:
+ Bo mạch phát triển STM32, trong ví dụ của video là KIT STM32F103RCT6
B. Phần mềm:
+ Cài thêm vào platformio trong VSC
+ Cài driver cho mạch nạp ST-Link V2 (ST-Link V2 sử dụng cổng USB của bạn chuyển đổi mã để truyền dữ liệu với STM32 và để máy tính hiểu ngôn ngữ mà ST-Link V2 sử dụng thì bạn cần phải cài driver này!)
C. Kết nối
Mạch nạp bạn dùng các dây: 3.3V, GND, SWDIO, SWCLK cắm tương ứng lên JTAG trên KIT các dây như hình dưới.
3. Lập trình
Chúng ta sẽ viết chương trình nhấp nháy LED có sẵn trên KIT tại chân PD2 với chu kỳ là 1000ms.
Tạo dự án mới trên VSC: Bạn kích vào biểu tượng PlatformIO mới cài có trên thanh trái, đến thẻ PIO Home, chọn New Project, sau đó bạn chọn bo có tên là BluePill F103C8 (Generic) vì bo này cũng dùng chip STM32F103, trong mục Framework bạn nhớ chọn mbed nhé! (Chúng ta không dùng Arduino API hay STM32Cube API như đã phân tích ở trên)
Nếu bạn dùng dòng chip STM32Fx khác thì có thể lựa chọn board như các hình bên dưới nhé!
Sau đó bạn qua thẻ dự án, tìm đến project bạn mới tạo vào vào mục src mở file main.cpp và copy đoạn lệnh dưới đây nhé:
Trong đó:
#define LED_BUILTIN PD_2 là định nghĩa chân LED ở chân PD_2
DigitalOut led(LED_BUILTIN); là khởi tạo biến led tại chân này là output
led = 0; là đặt ngõ ra tại chân PD_2 mức logic 0
led = 1; là đặt ngõ ra tại chân PD_2 mức logic 1
Chương trình đầy đủ như sau:
#include <mbed.h>
#define LED_BUILTIN PD_2
#define SERIAL2_TX PA_2
#define SERIAL2_RX PA_3
Serial serial2(SERIAL2_TX, SERIAL2_RX, 115200);
DigitalOut led(LED_BUILTIN);
int main(){
// put your setup code here, to run once:
serial2.printf(“STM32 bluepill mbed test.\n”);
while (1){
// put your main code here, to run repeatedly:
led = 0;
wait_ms(500);
led = 1;
wait_ms(500);
serial2.printf(“Blinking…\n”);
}
}
Bạn biên dịch và bấm nút nạp lên KIT thế là xong ^_^
(Chú ý, phần mềm tự tìm được cổng COM kết nối và bo mạch)
Trong trường hợp upload không được (rất hiếm khi xảy ra), bạn có thể dùng cách sau: