TAPIT - AIoT Learning

TAPIT - AIoT Learning Đào tạo Lập trình Vi điều khiển, Internet of Things, Thiết kế phần cứng, Trí tuệ nhân tạo...
Cộng đồng Học tập - Nghiên cứu - Chia sẻ!

TAPIT là bệ phóng tốt nhất cho sinh viên và kỹ sư trong lĩnh vực AIoT, chúng tôi giúp các bạn trang bị các kiến thức kỹ thuật, kỹ năng chuyên môn qua các khóa học trực tuyến và kết nối cộng đồng!

HỆ THỐNG BUS VI ĐIỀU KHIỂN STM32 Bạn có biết cách Vi xử lý đọc lệnh từ bộ nhớ, đọc ghi dữ liệu các biến và "nói chuyện" ...
09/05/2026

HỆ THỐNG BUS VI ĐIỀU KHIỂN STM32

Bạn có biết cách Vi xử lý đọc lệnh từ bộ nhớ, đọc ghi dữ liệu các biến và "nói chuyện" với các ngoại vi như ADC hay UART như thế nào không? Bên trong các Vi điều khiển là một hệ thống ma trận Bus cực kỳ tinh vi. Trong video này, chúng ta sẽ cùng tìm hiểu:
- Bus Master & Slave là gì?
- Sự khác biệt giữa Bus AHB và APB.
- Tại sao ARM Cortex M4 lại tách biệt I-Bus, D-Bus và S-Bus?
- Phân tích trường hợp thực tế: Tối ưu hóa chuyển dữ liệu ADC bằng DMA để tăng hiệu suất hệ thống.

Xem chi tiết tại video: https://youtu.be/f_4Yi6g5EJg
Nội dung rất phù hợp cho các bạn sinh viên/kỹ sư đang làm quen với vi điều khiển STM32- Vi xử lý ARM và muốn hiểu sâu về kiến trúc của dòng vi điều khiển này.

Cộng đồng kỹ thuật TAPIT

4 NHÓM KỸ NĂNG CỐT LÕI ĐỂ CHINH PHỤC LĨNH VỰC EDGE AISự dịch chuyển của điện toán từ Cloud xuống các thiết bị biên (Edge...
06/05/2026

4 NHÓM KỸ NĂNG CỐT LÕI ĐỂ CHINH PHỤC LĨNH VỰC EDGE AI
Sự dịch chuyển của điện toán từ Cloud xuống các thiết bị biên (Edge) đang mở ra kỷ nguyên Edge AI. Lĩnh vực đa ngành này đòi hỏi kỹ sư phải trang bị 4 nhóm kỹ năng cốt lõi: Hệ thống nhúng, Điện tử cơ bản, Xử lý tín hiệu số và Học máy. Cùng TAPIT giải mã từng kỹ năng:

🔷Hệ thống nhúng (Embedded System)
- Ngôn ngữ lập trình: C/C++ là ngôn ngữ phù hợp để làm việc trực tiếp với phần cứng, giúp tối ưu hóa tài nguyên bộ nhớ và hiệu năng tính toán khi đối mặt với giới hạn của thiết bị biên.
- Kiến trúc phần cứng: Nắm vững ngắt (Interrupt), Timer, DMA và các chuẩn giao tiếp (I2C, SPI, UART, I2S) để thu thập dữ liệu cảm biến và vận hành hệ thống tối ưu. Đặc biệt, xu hướng mới đòi hỏi kỹ sư làm quen với các bộ tăng tốc phần cứng (Hardware Accelerators / NPU) tích hợp trên vi điều khiển.
- Hệ điều hành: Bên cạnh lập trình Bare-metal, kỹ năng về RTOS (Hệ điều hành thời gian thực) và Embedded Linux là bắt buộc cho các dự án tích hợp phức tạp.

🔷Điện tử cơ bản (Basic Electronics)
Đọc hiểu sơ đồ nguyên lý (Schematic) và phân tích đặc tính, chức năng của linh kiện qua Datasheet.
Khả năng ghép nối, gỡ lỗi tín hiệu giữa vi điều khiển với cảm biến, bộ nhớ. Đặc biệt, kỹ năng thiết kế tối ưu năng lượng (Low-power design) là điểm cộng cực lớn cho các thiết bị Edge AI chạy pin.

🔷Xử lý tín hiệu số (Digital Signal Processing - DSP)
- Dữ liệu đầu vào của Edge AI thường là tín hiệu vật lý time-series data (âm thanh, IMU, y sinh) hoặc ma trận hình ảnh. DSP giúp trích xuất đặc trưng, lọc nhiễu và nén dữ liệu trước khi đưa vào mô hình AI.
- Có kỹ năng DSP như Kỹ thuật Lọc số, Phân tích dữ liệu miền tần số, Trích xuất đặc trưng thường là rất cần thiết để tiền xử lý dữ liệu trước khi đưa vào mô hình Học máy trên thiết bị biên (Edge) nhằm để tối ưu hóa tài nguyên phần cứng cho Edge AI.

🔷Học máy (Machine Learning)
- Cơ sở: Hiểu nguyên lý hoạt động và cách huấn luyện mạng nơ-ron nhân tạo (ANN, CNN, RNN).
- Ngôn ngữ lập trình: Có kinh nghiệm với Python, NumPy và các framework TensorFlow, PyTorch.
- Tối ưu hóa mô hình: Hiểu về kỹ thuật Lượng tử hóa (Quantization) và Cắt tỉa (Pruning) để nén kích thước mô hình, phục vụ triển khai trên vi điều khiển.

👉Cùng phân tích dự án "Phát hiện Từ khóa (Keyword Spotting)” để hiểu rõ sự phối hợp của 4 kỹ năng trên, quy trình thực hiện:
- Bước 1: Thu thập dữ liệu âm thanh qua microphone giao tiếp I2S (Kỹ năng điện tử & Hệ thống nhúng).
- Bước 2: Tiền xử lý, trích xuất đặc trưng MFCC từ tín hiệu âm thanh (Kỹ năng DSP).
- Bước 3: Xây dựng và huấn luyện mô hình phân loại âm thanh (Kỹ năng Học máy).
- Bước 4: Lượng tử hóa mô hình từ float32 xuống int8 để giảm dung lượng (Kỹ năng Học máy / Tối ưu hóa).
- Bước 5: Triển khai suy luận (Inference) trên ESP32 hoặc vi điều khiển STM32 tích hợp NPU (Tổng hợp 4 kỹ năng).

Các bạn đang tập trung nghiên cứu ở khối kiến thức nào trong 4 trụ cột trên? Theo bạn, ngoài 4 yếu tố này, kỹ năng nào là cần thiết cho một dự án Edge AI thực tế? Hãy cùng thảo luận bên dưới nhé! 👇
Cộng đồng kỹ thuật TAPIT.

Bạn có bao giờ thắc mắc tại sao vi điều khiển STM32 có thể quản lý hàng loạt ngoại vi chỉ qua các địa chỉ bộ nhớ? Trong ...
05/05/2026

Bạn có bao giờ thắc mắc tại sao vi điều khiển STM32 có thể quản lý hàng loạt ngoại vi chỉ qua các địa chỉ bộ nhớ? Trong video này, chúng ta sẽ cùng khám phá "Kiến trúc hệ thống bộ nhớ (Memory Architecture)" của vi xử lý ARM Cortex M3/M4:

Nội dung chính:
- 32bit địa chỉ, cách ARM và ST phối hợp định nghĩa không gian bộ nhớ (Memory Map)
- Cách đánh địa chỉ bộ nhớ Little Endian và Big Endian
- Bit-banding, khả năng đánh địa chỉ cho 1 bit dữ liệu riêng lẽ. giúp tối ưu tốc độ truy xuất dữ liệu
- Phân biệt, hiểu chi tiết vùng nhớ quan trọng: Code, SRAM, và Peripherals.

Mời các bạn xem chi tiết nội dung: https://youtu.be/YwhG4DigYKk

ĐỌC THÊM một số bài viết thảo luận liên quan đến bộ nhớ mà TAPIT đã chia sẻ:

- Chức năng, tổ chức và bản đồ không gian nhớ của Vi xử lý ARM Cortex – M
https://tapit.vn/chuc-nang-chuc-va-ban-khong-gian-nho-cua-vi-xu-ly-arm-cortex-m/

- RAM MEMORY: Cấu trúc, chức năng và thực hành debug trên VĐK STM32 (Phần 1)
https://tapit.vn/ram-memory-cau-truc-chuc-nang-phan-vung-data-bss/

- RAM MEMORY: Cấu trúc, chức năng và thực hành debug trên VĐK STM32 (Phần 2)
https://tapit.vn/ram-memory-cau-truc-chuc-nang-phan-vung-heap-stack/

- Dung lượng bộ nhớ Stack cho dự án nhúng sử dụng Arm Cortex-M
https://tapit.vn/dung-luong-bo-nho-stack-cho-du-nhung-su-dung-arm-cortex-m-p1/

- IC nhớ FLASH,SDRAM và mô hình bộ nhớ của vi điều khiển khi sử dụng bộ nhớ ngoài
https://tapit.vn/ic-nho-flash-sdram-va-mo-hinh-bo-nho-cua-vi-dieu-khien-khi-su-dung-bo-nho-ngoai/

- Bảo vệ chương trình ứng dụng và dữ liệu tại thiết bị
https://tapit.vn/bao-mat-datalogger-bao-ve-chuong-trinh-ung-dung-va-du-lieu-tai-thiet-bi/

Chúc các bạn thành công, đừng quên theo dõi TAPIT để cập nhật các bài đăng một các nhanh nhất!

Cộng đồng kỹ thuật TAPIT.

SO SÁNH CHI TIẾT BOARD STM32 DISCOVERY VÀ NUCLEOHIỂU RÕ CẤU TẠO PHẦN CỨNG Bạn đang phân vân giữa STM32 Discovery và Nucl...
28/04/2026

SO SÁNH CHI TIẾT BOARD STM32 DISCOVERY VÀ NUCLEO
HIỂU RÕ CẤU TẠO PHẦN CỨNG

Bạn đang phân vân giữa STM32 Discovery và Nucleo? Video này sẽ giúp bạn hiểu rõ từng linh kiện, chân cắm, và các tính năng của hai board mạch thực hành này. Đây là nền tảng quan trọng trước khi chúng ta bắt đầu lập trình với STM32CubeIDE.

CÁC NỘI DUNG:
- Giới thiệu dòng STM32F411
- Chi tiết Board STM32F411 Discovery (Cảm biến, Audio, USB)
- Cách đọc sơ đồ nguyên lý (Schematic),tài liệu User Manual
- Tìm hiểu nút nhấn User, Reset và LED ngoại vi
- Phân tích Board STM32F411 Nucleo
- Giao tiếp UART qua Virtual COM Port trên Nucleo

CHI TIẾT VIDEO TẠI: https://youtu.be/2rQxc-GKR-c
Hãy đang ký kênh và bật thông báo để nhận các video mới nhất cho chuỗi video tự học STM32 cùng TAPIT nhé các bạn!


Cộng đồng kỹ thuật TAPIT.

QUÁ TRÌNH KHỞI ĐỘNG CỦA VI ĐIỀU KHIỂN STM32Bạn thắc mắc vi điều khiển khởi động như thế nào? Làm sao vi xử lý có thể thự...
25/04/2026

QUÁ TRÌNH KHỞI ĐỘNG CỦA VI ĐIỀU KHIỂN STM32

Bạn thắc mắc vi điều khiển khởi động như thế nào? Làm sao vi xử lý có thể thực thi được mã lệnh được lưu trong bộ nhớ?
Video này TAPIT chia sẻ cho các bạn từ những kiến thức nền tảng, kết hợp với việc debug để phân tích sâu và trực quan, dễ hiểu quá trình khởi động của vi điều khiển.

CÁC NỘI DUNG CHÍNH ĐƯỢC TRÌNH BÀY:
-Các phương pháp Reset vi điều khiển từ bên ngoài (Hardware & Power-on Reset)
- Cấu trúc chương trình được lưu trong bộ nhớ Flash & SRAM (MSP, Vector Table, Code, Data)
- Phân tích quá trình vi xử lý khởi động ở cấp độ thanh ghi (Hoạt động của Reset Handler)
- Thực hành Debug trực quan cơ chế khởi động trên phần mềm STM32CubeIDE
- Một số ứng dụng: Bootloader, FOTA và Reset phần mềm (NVIC_SystemReset)

XEM CHI TIẾT TẠI ĐÂY: https://youtu.be/GS-kH6089TM

TAPIT chúc các bạn thành công! Đừng quên Like, Share và Subscribe kênh TAPIT để đón xem thêm nhiều video chất lượng về Lập trình nhúng và Vi xử lý nhé các bạn!



Cộng đồng kỹ thuật TAPIT.

Hiểu rõ 2 cổng USB và khám phá khả năng nạp chương trình, debug của board mạch ESP32-S3Khi làm việc với các board mạch t...
23/04/2026

Hiểu rõ 2 cổng USB và khám phá khả năng nạp chương trình, debug của board mạch ESP32-S3

Khi làm việc với các board mạch thực hành ESP32-S3 (ví dụ: DevKitC-1), một trong những điểm khiến nhiều bạn thắc mắc nhất là sự xuất hiện của hai cổng USB. Việc hiểu rõ chức năng và giới hạn của từng cổng không chỉ giúp quá trình nạp chương trình diễn ra suôn sẻ mà còn mở ra khả năng debug chuyên sâu.

HAI CỔNG USB TRÊN BOARD MẠCH ESP32

🟦Cổng USB-to-UART: Sử dụng chip chuyển đổi ngoại vi (như CP2102/CH340), hỗ trợ nạp chương trình, cấp nguồn và giao tiếp Serial với tốc độ lên đến 3 Mbps. Đây là phương thức nạp truyền thống trên các board Arduino/ ESP.

🟩Cổng Native USB: Kết nối trực tiếp vào chip ESP32-S3 (chân D+/D-). Cổng này hỗ trợ chuẩn giao tiếp USB 1.1, đồng thời cho phép nạp chương trình, giao tiếp Serial và đặc biệt là gỡ lỗi JTAG phần cứng (Hardware JTAG Debugging) mà không cần thiết bị chuyên dụng trung gian.

CHI TIẾT

🟦Cổng USB-to-UART
Các dòng chip ESP thường giao tiếp qua chuẩn UART. Để máy tính có thể đọc hiểu được, board mạch cần một chip "cầu nối" (USB-UART bridge). Cổng USB-to-UART có các chức năng chính: Cấp nguồn, nạp firmware, và hiển thị thông tin console (Serial monitor), debug hiển thị log đơn giản. Đây là cổng kết nối quen thuộc với hầu hết người dùng và thường là cổng được sử dụng mặc định cho việc nạp chương trình.

🟩Cổng Native USB
Khác với thiết kế truyền thống phải phụ thuộc vào chip chuyển đổi ngoại vi (USB-to-UART bridge như CP2102/CH340), ESP32-S3 được tích hợp sẵn USB Serial/JTAG Controller trực tiếp bên trong SoC. Tín hiệu USB (D+/D-) được kết nối thẳng vào phần cứng của vi điều khiển, mang lại 3 ưu điểm kỹ thuật vượt trội:

1. Giao tiếp CDC (Virtual COM Port): Vi điều khiển tự định nghĩa nó là một thiết bị USB CDC (Communication Device Class) giúp cổng COM tự động được nhận diện trên hệ điều hành (COM* trên Windows, /dev/ttyACM* trên Linux/Mac). Đảm bảo tính năng Serial Monitor hoạt động mượt mà, tốc độ cao không bị giới hạn bởi băng thông của chip cầu nối ngoại vi.

2. Tự động chuyển chế độ nạp (Auto-Download Mode): Controller phần cứng USB tự động can thiệp vào chu trình khởi động của chip khi nhận được tín hiệu từ phần mềm nạp (esptool/idf.py). Các bạn chỉ cần nhấn "Upload". Hệ thống tự động đưa ESP32-S3 vào trạng thái chờ nạp firmware, loại bỏ hoàn toàn thao tác nhấn giữ nút BOOT (hoặc EN) vật lý trên board mạch.

3. Gỡ lỗi phần cứng trực tiếp (Hardware JTAG Debugging): Cổng USB này tích hợp giao diện JTAG nội bộ, cho phép luồng dữ liệu Serial và JTAG hoạt động đồng thời trên cùng một đường truyền vật lý thông qua OpenOCD. Sinh viên có thể thực hiện Debug logic chuyên sâu (đặt Breakpoint, Step-over, theo dõi giá trị biến trong RAM theo thời gian thực) chỉ bằng một sợi cáp USB duy nhất, không cần cắm thêm các module nạp JTAG rời (như J-Link hay ESP-Prog).

LƯU Ý

1. Chia sẻ lớp vật lý (PHY): ESP32-S3 có hai bộ điều khiển là USB-OTG và USB-Serial-JTAG. Tuy nhiên, chúng dùng chung một lớp vật lý (PHY). Điều này có nghĩa là chỉ một bộ điều khiển được hoạt động tại một thời điểm. Nếu bạn muốn dùng tính năng USB Device (như làm bàn phím, chuột) mà vẫn muốn debug JTAG, bạn phải dùng thêm chip PHY ngoại vi.

2. Cáp kết nối: Sử dụng đúng cáp USB truyền dữ liệu (Data cable). Một số cáp trên thị trường chỉ dùng để sạc, không có lõi truyền dữ liệu, sẽ khiến máy tính không thể nhận diện board mạch.

Bạn thường lập trình cho ESP32-S3 bằng công cụ nào? Arduino IDE hay ESP-IDF? Và bạn "team" cổng màu xanh dương (USB-to-UART) hay cổng màu xanh lá (Native USB)? Hãy chia sẻ dưới phần bình luận nhé! 👇

Chúc các bạn thành công!
Cộng đồng Kỹ thuật TAPIT

Lập trình STM32: Thiết kế chương trình sử dụng DMA tối ưuBạn đã biết về Kỹ thuật Polling, Interrupt, vậy thì bay giờ cùn...
22/04/2026

Lập trình STM32: Thiết kế chương trình sử dụng DMA tối ưu

Bạn đã biết về Kỹ thuật Polling, Interrupt, vậy thì bay giờ cùng TAPIT tìm hiểu về Kỹ thuật DMA(Direct Memory Access) trong lập trình vi điều khiển. CPU có thể bị "nghẽn" khi phải vận chuyển quá nhiều dữ liệu từ ADC hay UART? Vậy thì trợ lý đắc lực của vi xử lý ARM Cortex M3/M4 là DMA sẽ giúp bạn giải quyết vấn đề này!

Các nội dung được trình bày (mời bạn xem chi tiết tại video):
- Khái niệm: DMA đóng vai trò như một "Master" trong hệ thống bus, cho phép chuyển dữ liệu giữa Ngoại vi - Bộ nhớ hoặc Bộ nhớ - Bộ nhớ mà không cần sự can thiệp của CPU.
- Các tham số cấu hình DMA: Địa chỉ nguồn/đích, kích thước dữ liệu (byte, half-word, word), chế độ truyền (Normal hoặc Circular), và khả năng tự động tăng địa chỉ.
- Cơ chế ngắt (Interrupt): Hỗ trợ ngắt khi truyền được một nửa (Half-transfer) hoặc hoàn tất (Transfer complete), giúp CPU xử lý dữ liệu kịp thời.
- Hướng dẫn cấu hình và sử dụng: Tích hợp mạnh mẽ với STM32CubeMX (cấu hình đồ họa) và Thư viện HAL (hàm API sẵn có như HAL_ADC_Start_DMA).
- So sánh hiệu năng: DMA truyền dữ liệu nhanh hơn CPU, giảm tải cho vi xử lý, tiết kiệm năng lượng và nâng cao hiệu suất tổng thể của hệ thống nhúng.

Video: https://youtu.be/gq4qQ5ks5tw

Các bài viết TAPIT đã chia sẻ liên quan đến DMA - Ví dụ cụ thể:
Tổng quát Polling, Interrupt, DMA, RTOS
https://tapit.vn/cac-ky-thuat-thiet-ke-luong-chuong-trinh-cho-thong-nhung/

Hướng dẫn ngoại vi UART - DMA STM32
https://tapit.vn/huong-dan-su-dung-chuc-nang-uart-idle-dma/

Hướng dẫn ngoại vi ADC - DMA STM32:
- ADC DMA STM32F103
https://tapit.vn/doc-adc-nhieu-kenh-tren-smt32-su-dung-dma/
- ADC DMA F411
https://tapit.vn/hieu-va-doc-gia-tri-adc-stm32f411-bo-chuyen-doi-tin-hieu-tuong-tu/
- ADC DMA đọc dữ liệu Microphone
https://tapit.vn/huong-dan-nhung-mo-hinh-hoc-sau-nhan-dien-thanh-len-vi-dieu-khien-stm32/

Hướng dẫn ngoại vi DAC - DMA STM32
- Phát âm thanh Radio
https://tapit.vn/de-tai-nghien-cuu-thiet-ke-thong-phat-thanh-thong-tin-qua-mang-3g-4g-p3/

Đừng quên Like và Subscribe để cập nhật các bài học mới nhất về lập trình Nhúng và STM32 nhé!

CHỌN BOARD STM32: NUCLEO HAY DISCOVERY? CẦN QUAN TÂM NHỮNG TIÊU CHÍ NÀO?Bạn đang muốn bắt đầu với STM32 nhưng lạc giữa m...
18/04/2026

CHỌN BOARD STM32: NUCLEO HAY DISCOVERY? CẦN QUAN TÂM NHỮNG TIÊU CHÍ NÀO?

Bạn đang muốn bắt đầu với STM32 nhưng lạc giữa ma trận các loại board mạch? Với video này, TAPIT sẽ giúp bạn giải mã 6 tiêu chí quan trọng để chọn được board mạch phù hợp nhất cho hành trình chinh phục STM32 - ARM Cortex-M.

Các tiêu chí sẽ được phân tích chi tiết trong video: Chính hãng, Tài liệu hỗ trợ, Debugger tích hợp, Cộng đồng người sử dụng, Thông số cấu và giá thành

👉 Xem chi tiết hướng dẫn lựa chọn và đề xuất tham khảo tại đây: https://youtu.be/Vdt27aQrA7E

Cổng nạp và mạch nạp STM32F103 BluePill & STM32F103 Mini🛠️Board mạch thực hành STM32F103 BluePill và STM32F103 Mini có c...
18/04/2026

Cổng nạp và mạch nạp STM32F103 BluePill & STM32F103 Mini

🛠️Board mạch thực hành STM32F103 BluePill và STM32F103 Mini có cổng USB hỗ trợ USB gốc (Native USB), chân D+ và D- của cổng USB được nối thẳng vào chân PA12 và PA11 của vi điều khiển STM32F103.
🛠️Board mạch STM32F103 BluePil hỗ trợ giao diện SWD,
🛠️Board mạch STM32F103 Mini hỗ trợ giao diện JTAG (bao gồm SWD)
Cùng TAPIT tìm hiểu về việc nạp chương trình của board mạch này.

KHẢ NĂNG NẠP CHƯƠNG TRÌNH
- Nạp qua cổng USB:
+ Mặc định khi mua về, bạn KHÔNG THỂ nạp chương trình trực tiếp qua cổng USB này.
Để nạp được chương trình qua cổng USB, bạn cần nạp trước vào vi điều khiển một "Bootloader", sau đấy bạn cũng cần phải sử dụng công cụ nạp chương trình phù hợp.
+ Ví dụ: Bạn có thể nạp trước "STM32duino Bootloader" vào chip trước, sau đó, khi cắm board mạch vào máy tính qua nó hiện lên như một cổng COM ảo để nạp code qua USB bằng phần mềm Arduino IDE.
+ Lưu ý: Nếu thực hiện theo cách này thì bạn vẫn không thể nạp chương trình và debug bằng các công cụ STM32CubeIDE/ KeilC IDE hay STM32Cube VSCode qua cổng USB.

- Nạp qua giao diện ICP (SWD/JTAG):
+ SWD và JTAG Cả hai đều truy cập vào khối DAP (Debug Access Port) của ARM để điều khiển lõi (CPU), bộ nhớ và ngoại vi.
SWD (Serial Wire Debug): SWD là giao thức hai dây được ARM thiết kế để thay thế JTAG, Chỉ mất 2 chân (SWDIO, SWCLK) thay vì 5 chân theo giao diện JTAG . Thường dùng với mạch nạp ST-Link V2 Mini.
+ JTAG: Sử dụng 4 chân (TMS, TCK, TDI, TDO), giao diện kết nối thường sử dụng đầu nối 20 chân tiêu chuẩn. Thường dùng với mạch nạp STLink/V2 của hoặc mạch nạp JLink. Lưu ý rằng các chân của giao thức SWD luôn có sẵn trong sơ đồ chân JTAG, do đó bạn vẫn có thể dùng ST-Link V2 Mini để nạp cho các board có header JTAG.

CÁC LOẠI MẠCH NẠP ICP PHỔ BIẾN PHÙ HỢP
Một số mạch nạp phổ biến trên thị trường hỗ trợ nạp chương trình qua giao diện SWD hoặc giao diện JTAG:

- ST-LINK/V2: Mạch nạp và debug Do STMicroelectronics sản xuất, sử dụng đầu nối IDC JTAG 20 chân tiêu chuẩn, hỗ trợ nạp chương trình qua SWD / JTAG.
- SEGGER J-Link: Chức năng tương tự mạch nạp ST-Link chính hãng
- ST-LINK V2 Mini (Clone): Đây là giải pháp rẻ nhất. Các mạch nạp này chỉ hỗ trợ giao tiếp SWD, không hỗ trợ JTAG. Nó sử dụng đầu nối IDC 10 chân, tuy nhiên, các bạn chỉ cần sử dụng 2 dây SWDIO và SWCLK.


Cùng TAPIT theo dõi và chào đón những bài phân tích tiếp theo thuộc chuỗi bài viết này.
Chúc các bạn thành công!
Cộng đồng Kỹ thuật TAPIT.

Tiếp tục với chuỗi bài liên quan đến GIAO THỨC NẠP VÀ MẠCH NẠP. Tại phần này, chúng ta cùng tìm hiểu 3 tính năng phổ biế...
16/04/2026

Tiếp tục với chuỗi bài liên quan đến GIAO THỨC NẠP VÀ MẠCH NẠP. Tại phần này, chúng ta cùng tìm hiểu 3 tính năng phổ biến của cổng USB trên các board mạch phát triển vi điều khiển.

Cổng USB trên một hệ thống nhúng có thể đóng nhiều vai trò khác nhau, từ việc chỉ có chức năng cấp nguồn, làm cầu nối cho giao tiếp nối tiếp (USB-to-UART bridge), cho đến việc đóng vai trò là một thiết bị USB gốc (Native USB) hoặc một giao diện nạp chương trình và gỡ lỗi chuyên dụng (On-board Programmer & Debugger). Nếu chưa hiểu rõ về bản chất của các kết nối này trên board mạch thực hành thì có thể các bạn sẽ không sử dụng đúng tính năng đã được thiết kế, dẫn đến lỗi nạp chương trình không rõ nguyên nhân và hạn chế khả năng gỡ lỗi chuyên sâu trong các dự án phức tạp hơn như IoT hay Edge AI.

TAPIT đã phân tích sâu nhiều dòng board mạch thực hành vi điều khiển khác nhau và thấy được cổng USB trên các board mạch thực hành thường được thiết kế theo 3 trường hợp, mỗi trường hợp yêu cầu các thành phần phần cứng và phần mềm (Toolchain) khác nhau để hoạt động.

1. Cầu nối USB-to-UART (USB Bridge)
Vi điều khiển chính không có bộ ngoại vi USB tích hợp; thay vào đó, một chip cầu nối phụ (Bridge IC) sẽ chuyển đổi tín hiệu USB từ máy tính thành tín hiệu UART để giao tiếp với các chân RX/TX của vi điều khiển.

- Đặc điểm: Vi điều khiển hoàn toàn không "biết" mình đang giao tiếp qua USB với máy tính; nó chỉ nhận thấy dữ liệu nối tiếp truyền thống UART.

- Khả năng nạp chương trình và debug: Có thể nạp chương trình và debug dạng in log qua cổng USB này nếu vi điều khiển được nạp trước một trình khởi động bootloader có khả năng nhận firmware qua UART và ghi vào bộ nhớ chương trình. Nếu không, cổng USB chỉ có chức năng giao tiếp COM Port

- Ví dụ:
+ Arduino Uno R3: Sử dụng chip ATmega16U2 (hoặc CH340 trên các bản clone) làm cầu nối UART cho chip chính ATmega328P.
+ ESP32 DevKit V1: Thường tích hợp CP2102 hoặc CH340 để nạp chương trình qua UART Bootloader.

2. USB gốc (Native USB)
Các vi điều khiển hiện đại sở hữu bộ ngoại vi USB (USB PHY) tích hợp bên trong vi điều khiển. Chân D+ và D- của cổng USB được kết nối trực tiếp vào các chân GPIO đặc biệt của vi điều khiển. Với Native USB, vi điều khiển có thể tự biến mình thành một thiết bị DFU (Device Firmware Update) để nạp code mà không cần bất kỳ chip phụ nào, Vi điều khiển cũng có thể được nạp chương trình thông qua USB Bootloader, Đặc biệt, phần cứng ngoại vi USB của 1 số vi điều khiển có thể được tích hợp tính năng USB-Seria/JTAG để hỗ trợ cho việc nạp chương trình và debug.

- Đặc điểm: Cho phép chip linh hoạt giả lập nhiều loại thiết bị USB khác nhau như bàn phím, chuột(HID), ổ đĩa (Mass Storage), hoặc cổng COM ảo (CDC) thông qua phần mềm.

- Ví dụ:
+ ESP32-S3/C3: Tích hợp bộ USB-Serial/JTAG, cho phép nạp firmware và gỡ lỗi phần cứng trực tiếp qua cổng USB mà không cần chip cầu nối.
+ Raspberry Pi Pico (RP2040): Sử dụng cơ chế nạp trực tiếp qua UF2. Khi nhấn giữ nút BOOTSEL và cắm USB, board hiện lên như một ổ đĩa USB để người dùng kéo-thả file.

3. Mạch nạp/gỡ lỗi tích hợp (On-board Debugger)
Trên board có một "vi điều khiển phụ" thứ hai đã được nạp sẵn firmware chuyên dụng cho việc nạp chương trình và debug (như ST-Link, XDS110-ET...). Cổng USB kết nối với chip phụ này, sau đó chip này giao tiếp với vi điều khiển chính qua các giao thức ICP chuyên dụng JTAG/SWD...

- Đặc điểm: Đây là giải pháp mạnh mẽ nhất vì nó xuất hiện trên máy tính như một thiết bị USB phức hợp (Composite Device) gồm: giao diện gỡ lỗi, cổng COM ảo và ổ đĩa ảo.

- Ví dụ:
+ STM32 Nucleo, STM32Discovery: Tích hợp mạch nạp ST-Link, cho phép gỡ lỗi từng dòng code (Step-by-step) qua giao thức SWD.
+ LP-MSPM0G3507: Các board MSP430 LaunchPad tích hợp sẵn mạch nạp và gỡ lỗi chuyên dụng XDS110-ET của TI.

Lưu ý: Cổng USB cũng được sử dụng với chức năng cấp nguồn cho board mạch, USB không chỉ là một cổng giao tiếp mà còn là một Power Source. Các bạn cũng cần phải lưu ý tránh cắm rất nhiều ngoại vi (motor, relay) vào board và lấy nguồn từ USB máy tính, dẫn đến sụt áp hoặc thậm chí hỏng cổng USB máy tính. Các bạn nên kiểm tra dòng tiêu thụ của mạch để tránh làm hỏng cổng USB của Laptop (thường giới hạn ở 500mA cho USB 2.0).

Hãy cùng theo dõi và đón xem các phần nội dung chi tiết!
Cộng đồng Kỹ thuật TAPIT

Lập trình STM32: Thiết kế chương trình sử dụng INTERRUPT tối ưuInterrupt là một thử thách đối với các bạn sinh viên khi ...
15/04/2026

Lập trình STM32: Thiết kế chương trình sử dụng INTERRUPT tối ưu

Interrupt là một thử thách đối với các bạn sinh viên khi mới bắt đầu tìm hiểu về lập trình vi điều khiển, nhiều bạn không hiểu rõ Interrupt chọn cách làm việc với phương pháp Polling và chấp nhận một chương trình không tối ưu, một số bạn khác áp dụng và gặp lỗi thì không thể phân tích logic của chương trình, gặp khó khi tích hợp thêm hay gộp các tính năng.

Interrupt không quá khó, hãy cùng TAPIT tìm hiểu qua nội dung này: (Các bạn có thể xem video tại: https://youtu.be/uMB-iStIras)

CƠ CHẾ HOẠT ĐỘNG CỦA INTERRUPT

- NVIC (Nested Vectored Interrupt Controller): là một ngoại vi của vi xử lý, quản lý các hoạt động của ngắt. Các ngoại vi gửi yêu cầu ngắt đến khối NVIC (Nested Vectored Interrupt Controller). NVIC sẽ điều khiển CPU thực thi ngắt dựa trên cấu hình cho phép ngắt và độ ưu tiên.

- Quy trình thực hiện 1 ngắt:
1. Stacking: Tạm dừng thực thi, lưu trữ ngữ cảnh thực thi hiện tại (1 số các thanh ghi trong CPU) vào bộ nhớ.
2. ISR: Thực thi chương trình phục vụ ngắt (Interrupt Service Routine).
3. Unstacking: Khôi phục ngữ cảnh và tiếp tục chương trình trước đó.

ƯU ĐIỂM CỦA KỸ THUẬT INTERRUPT
- Khả năng đáp ứng: Tốc độ phản hồi cực nhanh ngay khi sự kiện xảy ra, vượt trội so với kỹ thuật Polling
- Tiết kiệm năng lượng: Cho phép vi điều khiển ở chế độ LPM (Sleep/Stop/Standby) và chỉ thức dậy hoạt động khi có ngắt, sau đó quay lại chế độ tiết kiệm.
- Độ ưu tiên (Priority): Có thể cấu hình để các ngắt quan trọng hơn được xử lý trước trong trường hợp có nhiều ngắt xảy ra đồng thời

NGẮT TRÊN VI ĐIỀU KHIỂN STM32
- Cấu hình: Việc cho phép ngắt và thiết lập độ ưu tiên được thực hiện trực quan qua giao diện STM32CubeMX
- Bật tính năng ngắt: Sử dụng các hàm hỗ trợ sẵn của thư viện HAL x_Start_IT để ngoại vi hoạt động với khả năng sinh tín hiệu yêu cầu ngắt (ISR)
- Callback Functions: Các hàm phục vụ ngắt (ISR) được viết dưới dạng các hàm Callback (như HAL_GPIO_EXTI_Callback), các câu lệnh cần thực hiện sẽ được người dùng viết trong các hàm callback tương ứng.

NHƯỢC ĐIỂM CỦA NGẮT
- ISR quá dài có thể làm treo chương trình chính hoặc bỏ lỡ các ngắt khác (trạng thái pending). Ngoài ra, việc gỡ lỗi (debug) khó khăn hơn do luồng chương trình có thể nhảy bất thường đến bất kỳ ISR nào nếu có yêu cầu ngắt vào bất cứ thời điểm nào.
- Giải pháp: Thiết kế ISR cực kỳ ngắn gọn. Kết hợp Interrupt và Polling một cách hợp lý.

Interrupt chắc chắn là một kỹ thuật quan trọng cần nắm vững để có thể xây dựng các ứng dụng nhúng với vi điều khiển hiệu quả, chuyên nghiệp. Việc kết hợp giữa Interrupt (cho tác vụ cần đáp ứng tức thời) và Polling (cho tác vụ không yêu cầu thời gian thực) một cách hợp lý sẽ giúp hệ thống hoạt động ổn định và hiệu quả.

Các tài liệu liên quan đến Polling và Interupt mà TAPIT đã chia sẻ:
- Video Kỹ thuật Interrupt, thiết kế chương trình sử dụng Interrupt tối ưu
https://youtu.be/uMB-iStIras

- Video Kỹ thuật Polling là gì, ưu nhược điểm và demo
https://youtu.be/VTnNZ-VxdT8

- Bài viết Các kỹ thuật thiết kế luồng cho chương trình nhúng
https://tapit.vn/cac-ky-thuat-thiet-ke-luong-chuong-trinh-cho-thong-nhung/

- Bài viết Quy trình thực hiện ngắt của Vi điều khiển
https://tapit.vn/qua-trinh-thuc-hien-ngat-cua-vi-dieu-khien-mcu-interrupt-processing/

- Bài viết Các thanh ghi của vi xử lý Arm Cortex M
https://tapit.vn/co-ban-ve-cau-truc-va-tinh-nang-vi-xu-ly-arm-cortex-mx/

- Video về Exceptions của vi xử lý ARM Cortex M.
https://youtu.be/Q3z8ab7zS30

Hãy thảo luận thêm tại phần bình luận cùng các mentor tại Cộng đồng kỹ thuật TAPIT.
Chúc các bạn thành công!

Address

32, Hoa Minh 16
Da Nang

Opening Hours

Monday 08:00 - 22:00
Tuesday 08:00 - 22:00
Wednesday 08:00 - 22:00
Thursday 08:00 - 22:00
Friday 08:00 - 22:00
Saturday 08:00 - 22:00
Sunday 09:00 - 21:00

Alerts

Be the first to know and let us send you an email when TAPIT - AIoT Learning posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Contact The Business

Send a message to TAPIT - AIoT Learning:

Share