Tổng quan về giáo trình

Giáo trình The STM32F103 Arm Microcontroller and Embedded Systems Using Assembly and C (Ấn bản thứ nhất) do nhóm tác giả Muhammad Ali Mazidi, Sepehr Naimi và Sarmad Naimi biên soạn (ISBN-13: 978-1-970054-01-9, Naimi & Mazidi books). Tài liệu được thiết kế cho các học phần Kỹ thuật Vi điều khiển, Kiến trúc Máy tính và Hệ thống Nhúng thuộc chương trình đào tạo đại học và sau đại học các ngành Kỹ thuật Máy tính, Điện tử - Viễn thông, Tự động hóa và Công nghệ Thông tin.

Mục tiêu đào tạo của giáo trình tập trung vào việc trang bị cho người học kiến trúc chi tiết của lõi xử lý ARM 32-bit Cortex-M3, nguyên lý hoạt động của các thanh ghi nội tại, tập lệnh hợp ngữ (ARM Assembly), kỹ thuật lập trình C nhúng cũng như phương pháp cấu hình và giao tiếp toàn diện với hệ thống ngoại vi trên dòng vi điều khiển thương mại STM32F103.

Cấu trúc giáo trình gồm 19 chương chuyên đề và 8 phần phụ lục (Appendix A đến H). Cách tiếp cận sư phạm đi từ tầng phần cứng thấp nhất (thanh ghi, bus, bộ nhớ, tập lệnh Assembly) lên tầng trừu tượng cao hơn (ngôn ngữ C và tương tác ngoại vi). Điểm đặc trưng của tài liệu là việc khảo sát song song hai phương thức lập trình Hợp ngữ và C, giúp người học hiểu rõ cách thức mã nguồn chuyển đổi và tác động trực tiếp lên các khối phần cứng bên trong vi điều khiển.


Nội dung kiến thức cốt lõi

graph TD
    A["Chương 1: Tổng quan ARM & STM32"] --> B["Chương 2-6: Kiến trúc ARM Cortex-M3 & Hợp ngữ (Assembly)"]
    B --> C["Chương 7: Ngôn ngữ C trong Hệ thống nhúng"]
    C --> D["Chương 8-10: Ngoại vi cơ bản (GPIO, LED, LCD, UART)"]
    D --> E["Chương 11-12: Định thời & Hệ thống ngắt (Timer, SysTick, NVIC)"]
    E --> F["Chương 13-15: Tín hiệu tương tự & Điều khiển động cơ (ADC, DAC, PWM)"]
    F --> G["Chương 16-19: Giao thức truyền thông & DMA (I2C, SPI, GLCD, DMA)"]

Các chương và chủ đề chính

  • Chương 1: Lịch sử ARM và Vi điều khiển (The History of Arm and Microcontrollers): Khảo sát sự tiến hóa từ vi xử lý đến vi điều khiển, mô hình SoC (System on Chip), lịch sử phát triển của kiến trúc ARM, mô hình cấp phép sở hữu trí tuệ (IP licensing), tổng quan các dòng STM32 (từ dòng tiết kiệm năng lượng STM32L, phổ thông STM32F0/F1 đến dòng hiệu năng cao STM32F4/F7) và quy ước định danh chip STM32F103.
  • Chương 2 đến Chương 6: Kiến trúc ARM và Lập trình Hợp ngữ:
    • Khảo sát 16 thanh ghi đa dụng 32-bit (R0–R15), bao gồm các thanh ghi chức năng đặc biệt SFRs: Con trỏ ngăn xếp R13 (Stack Pointer - SP), Thanh ghi liên kết R14 (Link Register - LR), Bộ đếm chương trình R15 (Program Counter - PC) và Thanh ghi trạng thái chương trình hiện tại CPSR (chứa các cờ điều kiện N, Z, C, V).
    • Bản đồ bộ nhớ 4GB (Memory-Mapped I/O), phân vùng Flash ROM, SRAM và thanh ghi I/O.
    • Tập lệnh nạp và lưu dữ liệu đa kích thước: LDR, STR (32-bit Word); LDRH, STRH (16-bit Half-word); LDRB, STRB (8-bit Byte).
    • Các chỉ thị dịch mã (Assembler Directives): AREA, EQU, ENTRY, END, EXPORT, IMPORT, DCB, DCW, DCD, SPACE.
    • Tập lệnh số học, logic, dịch/quay bit, tính toán số nguyên có dấu (Signed Integer Arithmetic), rẽ nhánh có điều kiện (BEQ, BNE, BCS, BCC, BMI, BPL, BVS, BVC), gọi hàm con (BL), cấu trúc ngăn xếp (Stack) và các chế độ định địa chỉ nâng cao bao gồm vùng nhớ truy xuất từng bit (Bit-band memory).
  • Chương 7: Ngôn ngữ C cho Hệ thống Nhúng (C for Embedded Systems): Các kiểu dữ liệu chuẩn C trong vi điều khiển nhúng và kỹ thuật thao tác trên bit (Bit-wise operations: AND, OR, XOR, Shift).
  • Chương 8 đến Chương 10: Lập trình Ngoại vi Cơ bản và Giao tiếp: Cấu hình cổng xuất nhập đa dụng (GPIO) bằng C và Assembly, điều khiển LED 7 thanh, mạch tạo xung nhịp và chân cấp nguồn trên STM32F10x, giao tiếp màn hình ký tự LCD, quét ma trận phím và lập trình truyền thông nối tiếp qua cổng UART/USART.
  • Chương 11 và Chương 12: Bộ định thời và Hệ thống Ngắt: Lập trình System Tick Timer (SysTick), tạo độ trễ (Delay Generation), chế độ so sánh ngõ ra (Output Compare), bắt tín hiệu ngõ vào (Input Capture), chế độ đếm xung (Counter). Lập trình hệ thống quản lý ngắt lồng nhau NVIC, mức ưu tiên ngắt, độ trễ ngắt và các chế độ hoạt động của bộ xử lý Cortex-M (Processor Modes).
  • Chương 13 đến Chương 15: Giao tiếp Tín hiệu Tương tự và Điều khiển Động cơ: Bộ chuyển đổi ADC, DAC, mạch điều hòa tín hiệu cảm biến, điều khiển cách ly qua rơ-le và Optoisolator, điều khiển góc quay động cơ bước (Stepper Motor), điều chế độ rộng xung (PWM) và điều khiển tốc độ động cơ DC.
  • Chương 16 đến Chương 19: Giao thức Truyền thông Nâng cao và DMA: Giao thức bus I2C và ứng dụng giao tiếp vi mạch đồng hồ thời gian thực RTC DS3231; chuẩn truyền thông SPI và vi mạch điều khiển hiển thị MAX7219/MAX7221; lập trình hiển thị văn bản/đồ họa trên màn hình Graphic LCD; cấu trúc và vận hành bộ điều khiển truy cập bộ nhớ trực tiếp (Direct Memory Access - DMA).

Kiến thức nền tảng được xây dựng

Giáo trình thiết lập hệ thống lý thuyết kỹ thuật vững chắc dựa trên các nguyên lý:

  • Kiến trúc phần cứng vi xử lý: Cấu trúc RISC đường ống (Pipelining), kiến trúc bộ nhớ Harvard (tách biệt đường truyền bus cho mã lệnh và dữ liệu), không gian địa chỉ hợp nhất 32-bit (Memory-Mapped I/O) phân chia giữa Flash, SRAM và thiết bị ngoại vi.
  • Nguyên lý định thời và xử lý thời gian thực: Cơ chế ngắt phần cứng, quản lý ngoại lệ và chuyển đổi ngữ cảnh vi xử lý.
  • Tiêu chuẩn phân tầng giao thức: Nguyên lý truyền nhận dữ liệu đồng bộ (SPI, I2C) và không đồng bộ (UART), cơ chế giải phóng tài nguyên CPU thông qua DMA.
classDiagram
    class ARM_Cortex_M3 {
        +R0-R12: General Purpose Registers
        +R13 (SP): Stack Pointer
        +R14 (LR): Link Register
        +R15 (PC): Program Counter
        +CPSR: Flag Register (N, Z, C, V)
    }
    class Memory_Map {
        +Flash_ROM: Code & Const Data
        +SRAM: Variables & Stack
        +Peripheral_Registers: Memory-Mapped I/O
    }
    class Peripherals {
        +GPIO
        +Timers / SysTick
        +UART / I2C / SPI
        +ADC / DAC / PWM
        +DMA Controller
    }
    ARM_Cortex_M3 --> Memory_Map : Truy xuất qua Load/Store
    Memory_Map --> Peripherals : Ánh xạ địa chỉ I/O

Kỹ năng phát triển

Thông qua việc học tập theo giáo trình, người học hình thành các năng lực kỹ thuật:

  • Kỹ năng lập trình phần cứng: Khả năng viết và tối ưu hóa mã nguồn hợp ngữ ARM Assembly; kỹ năng viết mã nguồn C thao tác trực tiếp trên các thanh ghi điều khiển phần cứng của vi điều khiển (Register-level C Programming).
  • Kỹ năng thiết kế giao tiếp mạch: Đọc và phân tích sơ đồ chân, giản đồ xung thời gian (Timing diagrams), kết nối vi điều khiển với các cảm biến, cơ cấu chấp hành và màn hình hiển thị.
  • Kỹ năng gỡ lỗi và phân tích hệ thống: Sử dụng môi trường Keil µVision để quan sát trạng thái thanh ghi, bộ nhớ, cờ trạng thái CPSR và phân tích hoạt động của chương trình từng bước (Step-by-step execution).

Phương pháp giảng dạy và học tập

Giáo trình áp dụng phương pháp tiếp cận từ dưới lên (Bottom-up Approach). Nội dung bắt đầu bằng việc phân tích cấu tạo và chức năng của từng thanh ghi, cách thức các lệnh số học (ADD, SUB, ADC, SBC) và logic (AND, ORR, EOR, BIC) làm thay đổi các bit cờ trong thanh ghi trạng thái CPSR, từ đó xây dựng các cấu trúc điều khiển phức tạp hơn như vòng lặp, hàm con và xử lý ngắt.

Hệ thống bài tập trong giáo trình được phân cấp theo từng mục nhỏ (Section) của mỗi chương:

  • Câu hỏi ôn tập (Review Questions): Đặt ngay sau từng phần lý thuyết để kiểm tra sự nắm bắt các khái niệm cơ bản (ví dụ: kích thước thanh ghi, sự thay đổi bit cờ, phân biệt LDRLDRB, chức năng của các chỉ thị EQU, AREA). Cuối mỗi chương đều cung cấp lời giải chi tiết cho các câu hỏi này.
  • Bài tập cuối chương (Problems): Bao gồm các bài toán tính toán dung lượng bộ nhớ, xác định địa chỉ bộ nhớ, viết đoạn mã Assembly/C thực hiện các thuật toán cụ thể, hoặc thiết kế chương trình điều khiển ngoại vi.
  • Ví dụ tính toán từng bước (Step-by-step Examples): Các ví dụ trong sách (như Example 2-1 đến 2-6) cung cấp dữ liệu đầu vào cụ thể, phân tích chuyển đổi nhị phân/thập lục phân và minh họa chi tiết giá trị của thanh ghi và ô nhớ trước và sau khi thực thi từng câu lệnh.

Đối với công tác tự học và thực hành, giáo trình hướng dẫn sử dụng phần mềm Keil MDK-ARM (hỗ trợ phiên bản miễn phí cho mã nguồn dưới 32KB) kết hợp với các bo mạch thử nghiệm giá thành thấp dựa trên vi điều khiển STM32F103 (như mạch Blue Pill STM32F103C8T6 hoặc STM32F103RB), tạo điều kiện thuận lợi cho sinh viên tự triển khai các bài thí nghiệm tại nhà.


Điểm nổi bật và cập nhật

  • Phân tích sự dịch chuyển kiến trúc trong công nghiệp: Giáo trình cung cấp cái nhìn tổng quan về quá trình chuyển dịch công nghệ từ các dòng vi điều khiển 8-bit truyền thống (8051, PIC, AVR) và kiến trúc x86 sang kiến trúc chuẩn hóa 32-bit ARM Cortex-M trong các ứng dụng nhúng công nghiệp và thiết bị cầm tay.
  • Phân định rõ ràng giữa kiến trúc lõi và ngoại vi: Giáo trình làm rõ nguyên lý kinh doanh sở hữu trí tuệ của ARM: ARM định nghĩa và chuẩn hóa tập lệnh, cấu trúc lõi CPU và thanh ghi; trong khi các nhà sản xuất bán dẫn (STMicroelectronics, TI, NXP) tích hợp các khối ngoại vi riêng biệt. Điều này giải thích tại sao tập lệnh ARM có tính đồng nhất giữa các hãng nhưng thanh ghi ngoại vi lại có cấu trúc khác nhau.
  • Hệ thống hóa toàn diện dòng vi điều khiển STM32: Cung cấp bảng tra cứu thông số kỹ thuật (Tần số hoạt động, dung lượng Flash, RAM, các khối truyền thông và xử lý đồ họa) từ dòng STM32F0, F1, F2, F3, F4, F7 đến STM32L, cùng bảng quy tắc giải mã mã định danh linh kiện (Naming Convention) chi tiết theo dòng chip, số chân và kích cỡ bộ nhớ.
  • Nội dung thực hành phong phú: Khác với các tài liệu lý thuyết thuần túy, giáo trình tích hợp các bài toán điều khiển phần cứng thực tế như giao tiếp đồng hồ DS3231 qua giao thức I2C, điều khiển chip giải mã LED MAX7219 qua SPI, điều khiển động cơ bước và động cơ DC thông qua các kênh PWM của Timer.

Đối tượng sử dụng giáo trình

  • Sinh viên đại học và học viên cao học: Giáo trình phù hợp cho sinh viên từ năm thứ hai trở đi thuộc các ngành Kỹ thuật Điện tử, Kỹ thuật Máy tính, Tự động hóa, Cơ điện tử và Công nghệ Phần mềm Nhúng.
  • Yêu cầu kiến thức tiên quyết (Prerequisites): Người học cần có kiến thức cơ bản về ngôn ngữ lập trình C và các nguyên lý kỹ thuật số cơ bản (hệ đếm nhị phân, hệ hexa, cấu trúc bộ nhớ và giải mã địa chỉ). Giáo trình không yêu cầu người học phải có kiến thức lập trình hợp ngữ từ trước do toàn bộ kiến thức Assembly được giảng dạy từ đầu.
  • Giảng viên: Có thể sử dụng tài liệu làm khung chương trình chuẩn cho môn học Hệ thống nhúng và Vi điều khiển ARM. Nhóm tác giả cung cấp hệ sinh thái tài nguyên hỗ trợ giảng dạy bao gồm bài giảng mẫu (PowerPoint slides), tài liệu hướng dẫn thí nghiệm (Lab manuals) và sách giải đáp bài tập (Solutions manual) thông qua website chính thức.
  • Kỹ sư phần mềm nhúng: Tài liệu đóng vai trò là sách tra cứu kỹ thuật về cấu trúc tập lệnh Cortex-M3 (Appendix A), các chỉ thị hợp ngữ (Appendix B) và chuẩn gọi hàm thủ tục AAPCS (Appendix D).

Câu hỏi thường gặp

1. Giáo trình này phù hợp với đối tượng nào?

Tài liệu phục vụ sinh viên kỹ thuật, giảng viên các trường đại học và kỹ sư thiết kế phần mềm nhúng muốn tìm hiểu chuyên sâu về kiến trúc ARM Cortex-M3 và dòng vi điều khiển STM32F103 từ mức thanh ghi đến mức ứng dụng.

2. Cần chuẩn bị kiến thức nền tảng gì trước khi học?

Người học chỉ cần nắm vững kiến thức lập trình ngôn ngữ C cơ bản và các khái niệm kỹ thuật số (hệ đếm, cổng logic, bộ nhớ). Toàn bộ phần hợp ngữ ARM Assembly được giáo trình hướng dẫn từ mức nhập môn. Các kiến thức bổ trợ về hệ thống số được tác giả cung cấp trong Chương 0 (có thể tải tại website của sách).

3. Điểm khác biệt của giáo trình này so với các tài liệu STM32 khác là gì?

Phần lớn tài liệu STM32 hiện nay tập trung vào việc sử dụng các thư viện phần mềm cấp cao (như HAL hoặc Standard Peripheral Library). Giáo trình của Mazidi đi sâu vào việc lập trình trực tiếp thông qua thanh ghi (Register-level programming) bằng cả Assembly và C, giúp người học hiểu rõ bản chất vật lý và cơ chế hoạt động của phần cứng.

4. Phương pháp tự học giáo trình này như thế nào để đạt hiệu quả?

Người học nên kết hợp việc đọc lý thuyết, phân tích các bảng trạng thái thanh ghi trong các ví dụ (Examples), làm đầy đủ các câu hỏi Review Questions và tự viết mã nguồn thực hành trên phần mềm Keil µVision, sau đó nạp thử nghiệm lên bo mạch STM32F103 Blue Pill.

5. Giáo trình có các tài liệu bổ trợ nào kèm theo?

Nhóm tác giả cung cấp tài nguyên bổ trợ trên website NicerLand.com, bao gồm:

  • Chương 0 (Nguyên lý hệ thống số và cấu trúc bộ nhớ).
  • Mã nguồn mẫu của các chương trình trong sách.
  • Tài liệu hướng dẫn cấu hình và sử dụng trình biên dịch Keil.
  • Phụ lục G (Lưu đồ thuật toán và mã giả) và Phụ lục H (Thiết kế ghép nối vi mạch).

Kết luận

Giáo trình The STM32F103 Arm Microcontroller and Embedded Systems Using Assembly and C của Muhammad Ali Mazidi, Sepehr Naimi và Sarmad Naimi là tài liệu học thuật hoàn chỉnh về vi điều khiển 32-bit ARM Cortex-M3. Bằng việc kết hợp chặt chẽ giữa phân tích cấu trúc phần cứng, lập trình hợp ngữ Assembly và lập trình C cấp thanh ghi, tài liệu cung cấp lộ trình học tập logic từ kiến thức cơ sở đến các kỹ thuật giao tiếp ngoại vi phức tạp trong kỹ thuật nhúng.

Lộ trình học tập đề xuất:

  1. Giai đoạn 1 (Chương 1–6): Nắm vững cấu trúc CPU, thanh ghi và lập trình Assembly.
  2. Giai đoạn 2 (Chương 7–10): Chuyển dịch sang ngôn ngữ C và làm chủ các ngoại vi cơ bản (GPIO, LCD, UART).
  3. Giai đoạn 3 (Chương 11–19): Phát triển các ứng dụng nâng cao với hệ thống ngắt NVIC, Timer, ADC/DAC, PWM, các chuẩn giao tiếp I2C, SPI và bộ điều khiển DMA.