Lỗi và cách khắc phục khi sử dụng STM32CubeIDE để lập trình và debug cho board STM32F103 BluePill

Board STM32 BluePill là một Board mạch phát triển STM32 đơn giản với vi điều khiển STM32F103C8T6. Board mạch này không phải chính hãng của STMicroelectronics, sử dụng kèm với một mạch nạp/debugger ST-Link. Vì lý do board mạch có giá thành rẻ nên thường được các bạn sinh viên lựa chọn khi mới bắt đầu học/tìm hiểu về dòng vi điều khiển STM32 lõi ARM Cortex M. Tuy nhiên, trên thị trường hiện nay có xuất hiện nhiều board mạch được thiết kế sử dụng chip fake. Nghĩa là vi điều khiển trên board mạch không phải của hãng STM32 mà là hàng giả, hàng nhái.


Mình đã nhiều lần đặt mua board mạch này trực tiếp từ các cửa hàng tại Trung Quốc, nhiều bạn học viên của mình có sẵn các board mạch này và không sử dụng được với STM32CubeIDE, hoặc trên các cộng đồng mạng cũng đã có không ít người gặp trường hợp này nên mình mới viết thành bài chia sẻ này luôn. 

Mình có gặp hai dạng board. Một dạng thì tên vi điều khiển khắc trên mạch không phải là STM32F103C8T6 mà là CKS32F103C8T6 hoặc CS32F103C8T6, một dạng khác thì tên vi điều khiển là STM32F103C8T6 luôn nên không thể phân biệt được từ bên ngoài, qua tên vi điều khiển được nữa.

Khi sử dụng phần mềm KeilC IDE để nạp chương trình/debug cho board mạch này thì phần mềm sẽ có thông báo “Not a genuine ST Device” (nghĩa là không phải thiết bị chính hãng ST) như hình bên dưới. Nhưng KeilC IDE vẫn cho nạp chương trình và debug được. Mình đang dùng Keil C ver5.17 – không biết các bạn sử dụng phiên bản mới hơn thì sao. 


Khi sử dụng phần mềm STM32CubeIDE thì sẽ báo lỗi, và không cho nạp chương trình và không cho debug như hình sau:

 

Nếu các bạn sử dụng phần mềm STM32 ST-Link Utility hay STM32CubeProgrammer thì vẫn kết nối vào MCU được, thực hiện nạp file chương trình hoặc xóa bộ nhớ flash được. Nhưng một điều quan trọng đối với những bạn mới bắt tìm hiểu, học về lập trình vi điều khiển và kể cả những kĩ sư trong lĩnh vực này là debug thì lại không thực hiện được. (xem thêm một video hướng dẫn trên STM32CubeIDE do mình thực hiện debug tại đây)

Một số bạn có hỏi mình về việc chọn mua kit thì mình vẫn thường khuyên các bạn nên đầu tư các board mạch chính hãng của ST như các board Discovery/ Nucleo vì một số điểm như sau:
– Nguồn gốc xuất xứ chính hãng ST – an tâm chất lượng
– Tài liệu hãng hỗ trợ đầy đủ, chi tiết
– Tích hợp sẵn mạch nạp và Debug, không chỉ dùng được trên board mà còn cắm ra mạch bên ngoài được.
– Còn những tiêu chí về cấu hình của kit thì tùy thuộc vào nhu cầu của các bạn, mình thấy học tập thì dùng các board F4 Discovery hay Nucleo là được rồi. 

Tuy nhiên, nếu bạn nào đang có sẵn board mạch STM32F103 BluePill hoặc đã lỡ mua rồi thì cũng có thể khắc phục để có thể sử dụng phần mềm STM32CubeIDE để nạp chương trình/debug được theo hai bước sau: 

=>BƯỚC 1: Thay đổi cấu hình file config OCD của dòng F1 (file stm32f1x.cfg) theo đường dẫn sau (với STM32CUBEIDE version 1.4, cài đăt tại ổ đĩa C):
C:\ST\STM32CubeIDE_1.4.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.debug.openocd_1.4.0.202007081208\resources\openocd\st_scripts\target
Nếu các bạn sử dụng version khác hay cài đặt ở ổ đĩa khác thì có thể dựa vào đường dẫn trên để dò ra được.
Trong file stm32f1x.cfg, các bạn tìm để đoạn sau:

#jtag scan chain
if { [info exists CPUTAPID] } {
set _CPUTAPID $CPUTAPID
} else {
if { [using_jtag] } {
See STM Document RM0008 Section 26.6.3
set _CPUTAPID 0x3ba00477
} {
this is the SW-DP tap id not the jtag tap id
set _CPUTAPID 0x1ba01477
}
}
—————————
và sửa thành:
#jtag scan chain
set _CPUTAPID 0

=>BƯỚC 2: Cấu hình debug trên phần mềm STM32CubeIDE, chọn Debug probe là ST-LINK(OpenOCD) thay cho mặc định là ST-LINK(GDB)
Chọn Reset Mode là Software system reset.


Vậy là xong, có thể sử dụng để nạp chương trình được rồi. Còn về debug thì mình đã thửu thấy các chức năng cơ bản hoạt động ổn, chỉ có một vấn đề là không live (cập nhật liên tục) được mà phải dùng breakpoint để dừng chương trình nếu muốn xem giá trị biến, thanh ghi, giá trị một địa chỉ bộ nhớ.

Phần hướng dẫn khắc phục này mình được các anh trong group Facebook Lập trình STM8 và STM32 chỉ dẫn sau khi mình tổng hợp và chia sẻ các vấn đề mà nhiều người gặp với board mạch STM32F103 BluePill. Cảm ơn các anh đã hỗ trợ!

*Tuy nhiên mình vẫn giữ lời khuyên là mọi người nên sử dụng các board phát triển chính hãng!

Xem thêm Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32 tại đây.
Xem thêm Tổng hợp hướng dẫn Internet of Things với NodeMCU ESP8266 và ESP32 tại đây.


Chúc các bạn thành công!
Thuong Nguyen