Thiết lập môi trường gỡ lỗi ARM trên Linux với ST-Link và OpenOCD
Khi phát triển firmware cho vi điều khiển ARM Cortex-M (như STM32), việc chờ đợi IDE tải chương trình, khởi động lại bo mạch, rồi lại chờ phản hồi có thể làm chậm đáng kể quy trình viết mã. Trên hệ thống Linux, bạn hoàn toàn có thể thay thế luồng công việc thủ công này bằng một giải pháp nhẹ, mở và tự động hóa cao — kết hợp ST-Link, OpenOCD và ...
Đăng vào ngày 28 tháng 7 lúc 03:20
Chuyển đổi HEX sang BIN cho STM32: Khắc phục sự cố và Hướng dẫn thực hành
Phần này đi sâu vào các vấn đề thường gặp khi chuyển đổi tệp HEX sang BIN bằng công cụ fromelf.exe của MDK và cung cấp các giải pháp chi tiết.
3.1.7 Xử lý sự cố thường gặp
Việc sử dụng fromelf.exe tích hợp trong MDK có thể gặp nhiều lỗi. Dưới đây là tổng hợp các sự cố phổ biến và cách khắc phục:
Hiện tượng lỗi
Nguyên nhâ ...
Đăng vào ngày 23 tháng 7 lúc 20:42
Thiết Kế Mạch Nạp Chương Trình STM32 Từ Đầu: Phân Tích Sơ Đồ Chân STLink
Khi mạch in vừa hoàn thành, bạn kết nối STLink để nạp firmware nhưng STM32CubeProgrammer hiển thị lỗi "Không tìm thấy thiết bị". Kiểm tra lại dây nối, thay cáp, khởi động lại phần mềm... cuối cùng phát hiện nguyên nhân là chân GND hở mạch hoặc đảo nhầm SWCLK/SWDIO. Đây là sai lầm phổ biến khi triển khai giao tiếp debug cho vi điều khiển STM32.
...
Đăng vào ngày 23 tháng 7 lúc 03:21
Tìm kiếm mạng nơ-ron nhận biết phần cứng cho tính toán biên
Trong lĩnh vực Internet Vạn Vật (IoT) và tính toán biên (edge computing), bài toán đặt ra là làm thế nào để triển khai các mô hình mạng nơ-ron hiệu quả trên các thiết bị có tài nguyên hạn chế. Phương pháp truyền thống là huấn luyện mô hình lớn trên đám mây, sau đó nén lại bằng các kỹ thuật như cắt tỉa (pruning) hay lượng tử hóa (quantization) đ ...
Đăng vào ngày 22 tháng 7 lúc 06:52
Giải quyết vấn đề Keil không tìm thấy tệp .h: Hướng dẫn chi tiết cho người mới bắt đầu
Trong quá trình phát triển nhúng, bạn có thể gặp phải lỗi sau khi mở dự án trong Keil và biên dịch mã:
// main.c
#include "main.h"
#include "stm32f4xx_hal.h" // ← Lỗi xảy ra ở dòng này
Lỗi này không phải do mã của bạn sai hay máy tính bị nhiễm virus. Đây là một bài học cơ bản mà mọi nhà phát triển nhúng đều cần hiểu rõ.
Nguyên nhân gốc rễ: ...
Đăng vào ngày 20 tháng 7 lúc 22:02
Thí nghiệm nhấp nháy LED trên STM32 sử dụng GPIO
1. Chuẩn bị phần cứng:
1 bo mạch STM32F103C8T6 tối thiểu
1 bộ ghi ST-LINK V2
Tuỳ chọn dây nối DuPont
LED tích hợp - chân GPIOC13
2. Hàm delay (Delay.h)
Xem mã nguồn
#ifndef _DELAY_H_
#define _DELAY_H_
#include "stm32f10x.h" // Device header
void delayMicroseconds(uint32_t us);
void delayMilliseconds(uint32_t ms);
void de ...
Đăng vào ngày 19 tháng 7 lúc 10:56
Phát triển ngoại vi MCU từ nguyên lý đến thực thi thực tế
Trong phát triển nhúng, các ngoại vi cốt lõi của MCU đóng vai trò cầu nối giữa phần cứng và phần mềm. Dù là điều khiển động cơ trong hệ thống công nghiệp hay giao tiếp cảm biến trên thiết bị IoT, đều phụ thuộc vào việc lập trình sâu cho các module như GPIO, UART, I2C. Bài viết này tổng hợp kinh nghiệm thực tế từ nền tảng STM32 (lõi Cortex-M) v ...
Đăng vào ngày 16 tháng 7 lúc 05:33
Hướng dẫn sử dụng dự án DaisyExamples
1. Cấu trúc thư mục của dự án
Dự án DaisyExamples có cấu trúc thư mục như sau:
DaisyExamples/
├── DaisySP/
├── libDaisy/
├── pod/
├── patch/
├── patch_sm/
├── patch_fx/
├── seed/
├── seed_modular/
├── petal/
├── quad/
├── examples/
├── README.md
└── ...
DaisySP/: Chứa mã nguồn và tài nguyên của thư viện xử lý âm thanh DaisySP.
libDaisy/: Chứa ...
Đăng vào ngày 11 tháng 7 lúc 11:52
Phân tích chi tiết quy trình khởi động U-Boot
Giới thiệu
Việc nắm vững quy trình khởi động của U-Boot giúp hiểu rõ về các thiết bị ngoại vi được khởi tạo ở đâu, từ đó khi cần điều chỉnh các trình điều khiển thiết bị ngoại vi, chúng ta sẽ có cơ sở rõ ràng.
I. Linker Script u-boot.lds
Để phân tích quy trình khởi động của U-Boot, trước tiên cần xác định "điểm vào" (entry point) - dòng lệnh đ ...
Đăng vào ngày 8 tháng 7 lúc 11:18
Phân tích dữ liệu và triển khai giao thức ModbusTCP trên vi điều khiển STM32
Tổng quan về ModbusTCP trong hệ thống nhúng
ModbusTCP là một biến thể của giao thức Modbus truyền thống, được thiết kế để chạy trên nền tảng TCP/IP qua môi trường Ethernet. Khác với Modbus RTU dựa trên RS-485 gặp hạn chế về khoảng cách và tốc độ, ModbusTCP tận dụng hạ tầng mạng công nghiệp để truyền tải dữ liệu với băng thông lớn và độ tin cậy ...
Đăng vào ngày 6 tháng 7 lúc 14:18