Nội Dung Bài Viết
Trong bài đầu tiên của chuỗi hướng dẫn lập trình STM32F103 thanh ghi, chúng ta sẽ tìm hiểu toàn bộ công cụ lập trình STM32F103 – phần mềm – phần cứng cần có trước khi bắt đầu viết chương trình cho STM32. Sau bài này, bạn sẽ nắm rõ vai trò của Keil, CubeMX, ST-Link V2 và kit STM32F103 Mini, giúp bạn sẵn sàng tạo dự án đầu tiên.
Các công cụ lập trình STM32F103 (Development tools)
Keil uVision5 (IDE + compiler)
Keil C (đầy đủ là Keil µVision C hoặc Keil C Compiler for ARM / 8051 / C166) là một môi trường phát triển tích hợp (IDE) và bộ công cụ biên dịch (compiler) chuyên dụng cho lập trình nhúng — tức là lập trình cho vi điều khiển (microcontroller) như ARM, 8051, hay STM32.

Giới thiệu tổng quan Keil C
- Tên đầy đủ: Keil µVision IDE
- Nhà phát triển: ARM Ltd (trước đây là Keil Elektronik GmbH – Đức)
- Ngôn ngữ hỗ trợ: C, C++, Assembly
- Mục đích: Viết, biên dịch, mô phỏng và nạp chương trình vào vi điều khiển.
Các thành phần chính của Keil C
- µVision IDE (Integrated Development Environment)
→ Giao diện lập trình, quản lý dự án, viết và gỡ lỗi code. - C Compiler (ví dụ: C51, C166, ARMCC)
→ Dịch mã C/C++ sang mã máy phù hợp với từng loại vi điều khiển. - Assembler
→ Biên dịch mã Assembly. - Linker / Locator
→ Gắn kết các tệp object (.obj) thành chương trình chạy hoàn chỉnh. - Debugger / Simulator
→ Cho phép chạy thử (mô phỏng) chương trình, xem giá trị thanh ghi, bộ nhớ, và debug lỗi.
Các chức năng nổi bật
- Tự động tạo file dự án và cấu hình vi điều khiển.
- Tích hợp mô phỏng phần cứng (simulate các chân I/O, UART, ADC…).
- Hỗ trợ nạp chương trình trực tiếp vào vi điều khiển qua ST-Link, J-Link, hoặc USB.
- Có cửa sổ xem biến, thanh ghi, bộ nhớ khi debug.
- Tối ưu mã máy tốt cho hệ thống nhúng nhỏ gọn.
STM32CubeMX (config & code generator)
Giới thiệu STM32CubeMX
STM32CubeMX là phần mềm cấu hình và sinh mã tự động (code generator) dành cho các vi điều khiển STM32 của hãng STMicroelectronics.
STM32CubeMX giúp bạn thiết lập phần cứng của STM32 bằng giao diện đồ họa (GUI) thay vì phải viết code thủ công.
Sau đó nó tự động sinh ra mã C để bạn mở trong Keil, STM32CubeIDE, IAR, hoặc Eclipse.

Chức năng chính của STM32CubeMX
| Nhóm chức năng | Mô tả |
| 🧠 Cấu hình vi điều khiển bằng đồ họa | Chọn chip STM32 hoặc board (VD: STM32F103C8, Nucleo, Discovery, v.v.), bật/tắt các chân GPIO, UART, SPI, I2C, ADC, PWM… |
| 🧭 Tự động định tuyến chân (Pinout) | Khi bạn bật một ngoại vi (ví dụ UART1), phần mềm tự gán chân tương ứng, giúp tránh trùng lặp hoặc sai chân. |
| ⚙️ Cấu hình Clock (RCC) | Dễ dàng điều chỉnh tần số hệ thống (HSE, PLL, SYSCLK…) bằng đồ họa, có hiển thị sơ đồ xung nhịp. |
| 🧱 Cấu hình Middleware | Hỗ trợ FreeRTOS, USB, FATFS, LWIP (Ethernet), HAL driver… |
| 🧾 Sinh mã tự động (Code Generation) | Tạo ra project hoàn chỉnh có sẵn thư viện HAL, cấu hình tất cả ngoại vi. |
| 🧰 Tích hợp Cube Firmware Package | Mỗi dòng chip (F1, F4, L4, G0, H7…) có gói firmware riêng do ST cung cấp. |
Các ưu điểm nổi bật
- ✅ Tiết kiệm thời gian cấu hình phần cứng
- ✅ Giảm lỗi nhầm chân, sai clock, sai init
- ✅ Tự động tạo code HAL chuẩn ST
- ✅ Hỗ trợ nhiều IDE: Keil, IAR, STM32CubeIDE, SW4STM32…
- ✅ Giao diện trực quan, dễ học cho người mới bắt đầu
Công cụ nạp và debug trong lập trình STM32F103
ST-LINK V2
Giới thiệu ST-LINK V2
ST-Link V2 là bộ nạp và gỡ lỗi (programmer & debugger) do STMicroelectronics sản xuất, dùng để nạp chương trình (firmware) và debug cho các vi điều khiển dòng STM32 và STM8.
ST-Link V2 là cầu nối giữa máy tính và vi điều khiển STM32, giúp bạn nạp code và theo dõi chương trình chạy trên chip.

Các chức năng chính
| Chức năng | Mô tả |
| 💾 Nạp chương trình (Programming) | Ghi file .hex hoặc .bin vào flash của STM32 hoặc STM8. |
| 🧠 Gỡ lỗi (Debugging) | Cho phép dừng chương trình, đặt breakpoint, xem giá trị biến, thanh ghi khi debug trong Keil hoặc CubeIDE. |
| ⚙️ Kết nối SWD / JTAG | Giao tiếp với vi điều khiển qua chuẩn SWD (Serial Wire Debug) hoặc JTAG. |
| 🔋 Cấp nguồn cho mạch | Một số bản ST-Link có thể cấp nguồn 3.3V cho bo mạch đích (target). |
| 🧰 Hỗ trợ qua nhiều IDE | Tích hợp tốt với Keil, STM32CubeIDE, IAR, Atollic TrueSTUDIO, v.v. |
Phân loại ST-Link
| Loại | Mô tả |
| ST-Link V1 | Tích hợp sẵn trên board STM32 Discovery đời cũ. |
| ST-Link V2 | Dạng rời (USB dongle), phổ biến, dùng qua SWD hoặc JTAG. |
| ST-Link V2-1 / V3 | Đời mới hơn, tốc độ cao, có thêm UART, Virtual COM Port, Mass Storage. |
Kết nối ST-Link V2 với vi điều khiển
| Chân ST-Link | Ký hiệu | Chức năng |
| 1 | SWDIO | Truyền dữ liệu (Serial Wire Data) |
| 2 | SWCLK | Xung đồng hồ (Serial Wire Clock) |
| 3 | GND | Mass (nối đất) |
| 4 | 3.3V | Nguồn cấp (chỉ dùng để nhận mức logic hoặc cấp nguồn nhẹ) |
| 5 | NRST (tùy chọn) | Reset MCU khi nạp code |
| 6 | SWO (tùy chọn) | Truyền dữ liệu debug tốc độ cao |
Lưu ý:
- Nếu mạch STM32 đã có nguồn riêng, không cần nối 3.3V từ ST-Link.
- Chỉ cần nối GND, SWDIO, SWCLK, (và NRST nếu muốn reset tự động).
Phần mềm hỗ trợ ST-Link
| Phần mềm | Mục đích |
| STM32 ST-Link Utility (cũ) | Nạp file .hex, .bin, xóa flash, xem bộ nhớ. |
| STM32CubeProgrammer (CubeProg) (mới, chính thức) | Hỗ trợ STM32 tất cả dòng, có giao diện đồ họa và dòng lệnh (CLI). |
| STM32CubeIDE / Keil | Debug trực tiếp qua ST-Link trong khi lập trình. |
Cách nạp chương trình cơ bản
✅ Cách 1: Qua CubeProgrammer
- Cắm ST-Link vào máy tính.
- Mở STM32CubeProgrammer.
- Chọn ST-LINK → “Connect”.
- Mở file .hex hoặc .bin.
- Nhấn Download để nạp code vào STM32.
✅ Cách 2: Qua Keil hoặc CubeIDE
- Khi build xong code, bấm Download → IDE sẽ tự động dùng ST-Link nạp code vào chip.
- Có thể Debug (F5) để chạy từng bước, xem biến, đặt breakpoint…
Đèn báo
| Màu đèn | Ý nghĩa |
| 🔴 Đỏ sáng | Đã cấp nguồn, đang chờ kết nối |
| 🔵 Xanh / Cam nhấp nháy | Đang truyền dữ liệu, nạp code hoặc debug |
So sánh ST-Link với các công cụ khác
| Công cụ | Hãng | Hỗ trợ chip | Tốc độ | Ghi chú |
| ST-Link V2 | STMicro | STM32, STM8 | Trung bình–nhanh | Phổ biến, rẻ, ổn định |
| J-Link | Segger | Hầu hết ARM Cortex-M | Rất nhanh | Chuyên nghiệp, đắt hơn |
| DAP-Link | ARM / Open Source | ARM Cortex-M | Nhanh | Có thể tự làm |
| USB-UART | Nhiều hãng | Chỉ nạp qua Bootloader | Chậm | Không debug được |
Ưu điểm của ST-Link V2
✅ Giá rẻ (~100–200k cho bản clone, vài trăm cho bản chính hãng)
✅ Hoạt động ổn định, dễ dùng
✅ Tương thích rộng với các IDE phổ biến
✅ Có thể nạp và debug – hai chức năng trong một
Lưu ý khi sử dụng
- Đừng cấp 3.3V từ ST-Link nếu mạch đã có nguồn riêng.
- Kiểm tra đúng chân SWDIO / SWCLK (nhiều người mới hay nối nhầm).
- Một số bản clone giá rẻ có thể lỗi hoặc không nhận trong CubeProgrammer – nên dùng bản tốt (gắn chip STM32F103 thật).
Kit phát triển STM32F103RCT6 ARM Cortex-M3 Mini
Tổng quan về STM32F103RCT6 Mini Board
STM32F103RCT6 là vi điều khiển 32-bit thuộc dòng STM32F1 series, lõi ARM Cortex-M3, hoạt động ở tần số 72 MHz.
Kit “Mini” là phiên bản thu gọn của bo phát triển, tích hợp đủ ngoại vi cơ bản, phù hợp cho học tập, nghiên cứu và dự án nhúng nhỏ.

Thông số kỹ thuật chính của vi điều khiển STM32F103RCT6
| Thuộc tính | Giá trị |
| CPU Core | ARM Cortex-M3 32-bit |
| Tần số hoạt động | 72 MHz |
| Flash | 256 KB |
| SRAM | 48 KB |
| Điện áp hoạt động | 2.0V – 3.6V |
| Số chân GPIO | 51 I/O (tùy package) |
| Timer | 4 bộ định thời (Timer 1–4) |
| ADC | 2 ADC 12-bit (tối đa 16 kênh) |
| DAC | 2 kênh 12-bit |
| Giao tiếp | USART, SPI, I2C, CAN, USB 2.0 Full-Speed |
| PWM | Có (qua Timer) |
| Watchdog | Có (IWDG, WWDG) |
Đặc điểm của Kit phát triển STM32F103RCT6 Mini
| Thành phần | Mô tả |
| 🔲 Chip chính | STM32F103RCT6 gắn sẵn (LQFP64) |
| 🔌 Nguồn cấp | 5V từ USB hoặc 3.3V từ ST-Link / ngoài |
| 🧱 Cổng USB mini / micro | Dùng nạp chương trình (khi có bootloader) hoặc cấp nguồn |
| 🔹 Chân SWD | Kết nối với ST-Link V2 để nạp & debug |
| 🔸 LED | LED báo nguồn (PWR) và LED test (thường nối với PC13) |
| 🔹 Nút nhấn (KEY) | Một nút người dùng (USER) và nút RESET |
| 🔧 Header GPIO | Toàn bộ chân I/O được đưa ra dạng hàng pin 2.54mm |
| 🔗 Giao tiếp | UART, SPI, I2C, CAN, USB có thể kết nối ra ngoài |
| ⚡ Thạch anh | 8 MHz (HSE) + 32.768 kHz (RTC) |
Ưu điểm của STM32F103RCT6 Mini Board
✅ Gọn nhẹ, giá rẻ (~200–300k VNĐ)
✅ Tích hợp đủ ngoại vi cơ bản cho học tập
✅ Tương thích hoàn toàn với Keil, STM32CubeIDE, STM32CubeMX
✅ Có SWD interface hỗ trợ nạp nhanh qua ST-Link V2
✅ Có thể mở rộng ra module cảm biến, LCD, servo, UART, SPI, I2C…
Công cụ cần thiết để lập trình
| Thành phần | Vai trò |
| ST-Link V2 | Dùng để nạp & debug chương trình qua SWD |
| STM32CubeMX | Cấu hình ngoại vi và sinh code HAL |
| Keil uVision5 hoặc STM32CubeIDE | Viết, biên dịch và nạp code |
| STM32CubeProgrammer | Nạp file .hex / .bin thủ công |
Nguồn cấp và bảo vệ
- Board có thể cấp nguồn từ:
- Cổng USB 5V,
- Hoặc từ ST-Link (3.3V),
- Hoặc nguồn ngoài (3.3V hoặc 5V) qua chân header.
- Có IC ổn áp AMS1117-3.3V để chuyển 5V sang 3.3V.
Reference:
- STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced Arm®-based 32-bit MCUs – Reference manual
- Datasheet – STM32F103xC, STM32F103xD, STM32F103xE – High-density performance line Arm®-based 32-bit MCU with 256 to 512KB Flash, USB, CAN, 11 timers, 3 ADCs, 13 communication interfaces
