Hướng dẫn lập trình STM32F103 trên Visual Studio Code với Mbed framework

Nếu bạn là học viên mời bạn tham gia Nhóm hỗ trợ giải đáp của các khóa tại: https://www.facebook.com/groups/altium.designer.vietnam

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:

+ Mạch nạp ST-Link V2

+ Bo mạch phát triển STM32, của mình đang dùng là KIT STM32F103RCT6

B. Phần mềm:

+ Visual Studio Code

https://code.visualstudio.com/

Cài thêm vào platformio trong VSC

00

Mở PlatformIO sau khi cài:

Screenshot_10Screenshot_11

+ Cài drriver cho mạch nạp ST-Link V2

http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-link009.html

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

0

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)

Screenshot_12

2

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é!

F0-F3-F4

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ú ý, phn mm t tìm đưc cng COM kết ni và bo mch)

3

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:

Nếu nạp trên VSC không được (không thấy bo phù hợp ở mục Board) thì sau khi bấm Build xong có thể mở STM32 ST-Link Utility để nạp

Bấm biểu tượng connect, sau đó Open và chọn đến file bin

Tìm hiểu về khóa học lập trình STM32 với Mbed

https://elec2pcb.com/online-pcb-design-courses/stm32-microcontroller-training/

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.