TÀI LIỆU HỌC THUẬT: GIÁO TRÌNH LẬP TRÌNH CĂN BẢN ARM CORTEX M3 STM32F103


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

  • Môn học và vị trí trong chương trình đào tạo: Tài liệu Lập trình căn bản ARM Cortex M3 STM32F103 do tác giả Nguyễn Ngọc Hà biên soạn (TP. Hồ Chí Minh, 05/2014), là học liệu thuộc khối kiến thức kỹ thuật cơ sở và chuyên ngành Hệ thống nhúng (Embedded Systems), Kỹ thuật Vi điều khiển và Kiến trúc máy tính. Giáo trình được bố trí trong chương trình đào tạo kỹ sư và cử nhân các ngành Kỹ thuật Điện tử - Viễn thông, Kỹ thuật Máy tính, Tự động hóa và Cơ điện tử, đóng vai trò là học phần kế thừa sau môn Vi xử lý cơ bản (8-bit/16-bit) để chuyển tiếp lên kiến trúc vi xử lý 32-bit RISC hiệu năng cao.
  • Mục tiêu học tập (Learning Outcomes): Cung cấp hệ thống kiến thức về kiến trúc vi xử lý ARM Cortex-M3 (ARMv7-M), nguyên lý hoạt động của các khối quản lý hệ thống (NVIC, RCC, DMA, Power Control) và các module ngoại vi tích hợp trên dòng vi điều khiển STM32F103C8T6 của hãng STMicroelectronics. Sau khi hoàn thành giáo trình, người học có năng lực tự thiết kế bo mạch phát triển (kit thí nghiệm) sử dụng phần mềm Altium Designer và lập trình cấu hình điều khiển các giao tiếp phần cứng trên môi trường Keil C MDK dựa trên chuẩn CMSIS.
  • Cấu trúc và cách tiếp cận: Nội dung giáo trình được thiết kế theo mô hình tích hợp ba giai đoạn: phân tích lý thuyết vi kiến trúc phần cứng $\rightarrow$ thiết kế mạch nguyên lý và mạch in PCB $\rightarrow$ lập trình phát triển driver và ứng dụng thực nghiệm. Cách tiếp cận này giúp liên kết trực tiếp cấu trúc thanh ghi phần cứng với các hàm xử lý mã nguồn C.
  • Điểm đặc sắc của giáo trình: Toàn bộ nội dung gắn liền với cấu hình cụ thể của vi điều khiển STM32F103C8T6 (đóng gói LQFP48, 64KB Flash, 20KB SRAM). Tài liệu cung cấp chi tiết sơ đồ phần cứng thực tế, phân tích cấu trúc thanh ghi ở mức bit và hướng dẫn xây dựng thư viện phần mềm cho từng module ngoại vi.

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

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

  • Chương I: Tìm hiểu về ARM Cortex M3 STM32F103: Khảo sát tổng quan về họ ARM Cortex và phân nhánh Cortex-M dành cho ứng dụng vi điều khiển chi phí thấp. Phân tích chi tiết lõi CPU Cortex-M3 dựa trên kiến trúc ARMv7-M với pipeline 3 tầng có dự đoán rẽ nhánh, bản đồ bộ nhớ tuyến tính 4GB, cơ chế bit-banding và hỗ trợ unaligned memory access. Phân tích ma trận bus Harvard (I-Code, D-Code, System Bus, AHB, APB1, APB2), bộ đếm SysTick 24-bit, bộ điều khiển ngắt lồng nhau NVIC (độ trễ 12 chu kỳ, kỹ thuật Tail-Chaining 6 chu kỳ), bộ điều khiển 7 kênh DMA, các chế độ năng lượng (Run, Sleep, Stop, Standby), hệ thống bảo vệ an toàn (PVD, CSS, Windowed Watchdog, Independent Watchdog), cơ chế bảo mật Flash qua FPEC và cấu hình toàn bộ ngoại vi (GPIO, EXTI, ADC 12-bit dual mode, Timer PWM, SPI, I2C, USART, bxCAN, USB 2.0 FS).
  • Chương II: Thiết kế KIT thí nghiệm ARM STM32F103: Trình bày quy trình thiết kế phần cứng hoàn chỉnh cho vi điều khiển STM32F103C8T6 bằng phần mềm Altium Designer. Phân tích sơ đồ nguyên lý khối nguồn (LM7805 hạ áp 5V, AMS1117 cấp 3.3V, mạch lựa chọn nguồn USB/ngoài), khối giao tiếp nạp/gỡ lỗi JTAG và SWD (chuẩn 2 dây cho ST-Link), khối chuyển đổi USB-to-UART dùng chip chuyên dụng FT232, khối hiển thị (LED đơn, LED 7 đoạn Anode chung, LCD1602), khối phím bấm và ma trận phím, module Ethernet ENC28J60, mạch dao động thạch anh và layout mạch in PCB hai lớp (Top/Bottom).
  • Chương III: Lập trình ứng dụng cho KIT STM32F103: Cung cấp hướng dẫn tạo dự án trên phần mềm Keil C MDK và quy trình nạp code qua bootloader USART1. Triển khai các bài toán lập trình ứng dụng cụ thể: cấu hình nguồn Clock qua bộ nhân tần PLLx9 đạt tần số 72MHz; xây dựng thư viện delay chính xác bằng SysTick; cấu hình GPIO điều khiển LED đơn và khóa cấu hình bằng thanh ghi LCKR; thuật toán quét hiển thị LED 7 đoạn và LCD1602; truyền nhận dữ liệu qua USART; đo điện áp ADC 12-bit; giao tiếp cảm biến nhiệt độ 1-wire DS18B20 và giao tiếp I2C đọc/ghi bộ nhớ EEPROM 24C02.
  • Chương IV: Thiết kế Web Hocarm: Trình bày phương pháp triển khai website hỗ trợ học tập chuyên đề ARM dựa trên mã nguồn mở NukeViet, bao gồm cấu trúc giao diện trang quản trị, trang chủ, bố cục module bài viết và module chia sẻ tài liệu tải về.
  • Progression Logic: Nội dung được sắp xếp theo logic tăng tiến: từ nắm vững nguyên lý hoạt động của thanh ghi và kiến trúc phần cứng lõi (Chương I) $\rightarrow$ hiện thực hóa phần cứng thông qua thiết kế mạch nguyên lý và PCB (Chương II) $\rightarrow$ viết mã điều khiển phần mềm từ cơ bản đến phức tạp (Chương III) $\rightarrow$ xây dựng hệ thống tài nguyên mở hỗ trợ học tập (Chương IV).

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

  • Kiến trúc ARMv7-M và mô hình lập trình: Lõi xử lý RISC 32-bit thực thi tập lệnh Thumb-2; hỗ trợ 2 chế độ hoạt động (Thread Mode chạy chương trình nền, Handler Mode phục vụ xử lý ngắt/ngoại lệ) và 2 mức đặc quyền (Privileged và Non-privileged).
  • Cơ chế ngắt phần cứng NVIC: Chuẩn hóa cấu trúc ngắt lồng nhau cho toàn bộ vi điều khiển họ Cortex-M; cơ chế tự động đẩy khung thanh ghi vào Stack qua microcode giúp đạt độ trễ đáp ứng ngắt chỉ 12 chu kỳ xung nhịp; cơ chế ngắt chiếm quyền (Pre-emption) và kỹ thuật Tail-Chaining tối ưu thời gian chuyển đổi giữa hai ngắt liên tiếp xuống còn 6 chu kỳ.
  • Hệ thống Bus và Quản trị Bộ nhớ DMA: Cấu trúc ma trận bus phân tách luồng lệnh và luồng dữ liệu; bộ điều khiển DMA 7 kênh độc lập xử lý truyền dữ liệu qua 4 giai đoạn (lấy mẫu/phân xử, tính toán địa chỉ, truy cập đường truyền, hoàn tất), sử dụng tối đa 40% băng thông bus dữ liệu nhằm giải phóng chu kỳ xử lý rảnh cho CPU.
  • Quản lý Xung nhịp và An toàn Hệ thống: Cấu hình bộ điều khiển RCC với 2 nguồn xung nội (HSI 8MHz, LSI 32kHz-60kHz) và 2 nguồn xung ngoại (HSE, LSE) qua bộ nhân PLL; khối giám sát an toàn xung nhịp CSS (Clock Security System); mạch giám sát điện áp PVD; hệ thống bảo vệ độc lập gồm Windowed Watchdog (WWDG đếm lùi 6-bit) và Independent Watchdog (IWDG đếm lùi 12-bit). Cơ chế bảo mật bộ nhớ Flash chính thông qua thanh ghi FPEC với chuỗi khóa giải mã tuần tự 0x456701230xCDEF89AB.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical Skills): Tính toán và thiết lập các trường bit trên thanh ghi ngoại vi (RCC, GPIO, AFIO, ADC_CRx, TIMx_CCMRx, USART_BRR, I2C_CRx); thiết kế mạch nguyên lý và vẽ mạch in PCB hai lớp trên Altium Designer; lập trình điều khiển hệ thống nhúng bằng ngôn ngữ C trên môi trường Keil C MDK.
  • Kỹ năng phân tích (Analytical Skills): Phân tích biểu đồ thời gian đáp ứng ngắt và chuyển đổi trạng thái nguồn; đánh giá mức tiêu thụ dòng điện giữa các chế độ Run, Sleep (14mA tại 72MHz), Stop (24µA) và Standby (2µA); tính toán chu kỳ (Period), hệ số công tác (Duty Cycle) và cấu hình chế độ căn lề cạnh (Edge-aligned) hoặc căn lề giữa (Centre-aligned) cho xung PWM.
  • Kỹ năng thực hành (Practical Competencies): Khởi tạo và gỡ lỗi phần cứng qua giao thức SWD/JTAG; lập trình giao tiếp cảm biến số chuẩn 1-wire (DS18B20); định dạng và kiểm soát lỗi dữ liệu truyền thông qua module CRC-8 trên giao thức I2C và CRC-16 trên SPI; thu thập và chuyển đổi tín hiệu tương tự sang số (ADC) hiển thị trực tiếp lên màn hình LCD.

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

  • Phương pháp sư phạm (Pedagogical Approach): Kết hợp phương pháp giảng dạy kỹ thuật từ dưới lên (Bottom-up Approach) với mô hình học tập dựa trên thực hành kỹ thuật (Hands-on Engineering). Người học bắt đầu từ việc nghiên cứu kiến trúc thanh ghi và giản đồ thời gian trước khi tự tay thiết kế mạch vật lý và viết chương trình điều khiển.
  • Bài tập và nghiên cứu tình huống (Case Studies): Hệ thống bài học được cụ thể hóa bằng các trường hợp ứng dụng ngoại vi thực tế:
    • Khởi tạo hệ thống: Cấu hình xung nhịp HSE kết hợp nhân tần PLL tạo tần số 72MHz cho CPU, phân chia tần số cho bus APB1/APB2 và thiết lập hàm delay dùng SysTick Timer.
    • Điều khiển I/O số: Lập trình GPIO xuất/nhập dữ liệu, áp dụng kỹ thuật Bit-Banding và thực thi quy trình khóa cấu hình chân cổng bằng thanh ghi LCKR (trình tự ghi bit 1-0-1).
    • Giao tiếp hiển thị và nút bấm: Xây dựng giải thuật giải mã hiển thị LED 7 đoạn Anode chung, quét ma trận phím và lập trình điều khiển màn hình ký tự LCD1602 theo chế độ 4-bit/8-bit.
    • Truyền thông nối tiếp: Thiết lập giao tiếp USART truyền nhận ký tự với máy tính qua chip chuyển đổi tín hiệu USB-to-UART FT232.
    • Thu thập dữ liệu cảm biến: Lập trình bộ ADC 12-bit đọc điện áp từ cảm biến và hiển thị lên LCD; lập trình chuẩn giao tiếp 1-wire đọc dữ liệu nhiệt độ từ IC DS18B20.
    • Giao tiếp bộ nhớ ngoại: Thiết lập module I2C truyền nhận dữ liệu với bộ nhớ EEPROM 24C02 có sử dụng khối kiểm tra mã lỗi gói tin PAC (CRC-8).
  • Phương pháp đánh giá (Assessment Methods): Đánh giá năng lực người học thông qua hai tiêu chí: chất lượng sản phẩm phần cứng thiết kế (sơ đồ nguyên lý và layout PCB đạt tiêu chuẩn kỹ thuật) và độ chính xác của chương trình nhúng nạp trên kit thí nghiệm (hoạt động đúng chức năng, tối ưu hóa ngắt và quản lý tài nguyên bộ nhớ).
  • Hướng dẫn tự học (Self-study Guidelines): Khai thác sơ đồ mạch nguyên lý tại Chương II để dựng môi trường phần cứng; tạo project mẫu trên Keil C MDK theo chuẩn CMSIS; sử dụng mạch nạp ST-Link để thực hiện nạp code và debug từng bước qua giao diện SWD; tra cứu tài liệu và chia sẻ mã nguồn thông qua cổng thông tin mở Web Hocarm.

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

  • So sánh và cải tiến so với kiến trúc cũ: So với kiến trúc vi điều khiển ARM7/ARM9 truyền thống sử dụng hai đường ngắt chung (FIQ và IRQ) có độ trễ lớn và phụ thuộc vào giải pháp phần cứng riêng của từng nhà sản xuất, lõi Cortex-M3 (kiến trúc ARMv7-M) đã tích hợp sẵn khối điều khiển ngắt phần cứng NVIC được tiêu chuẩn hóa. Cải tiến này giúp giảm thời gian đáp ứng ngắt xuống còn 12 chu kỳ xung nhịp và hỗ trợ kỹ thuật Tail-Chaining 6 chu kỳ. Tập lệnh Thumb-2 cho phép đạt mật độ mã nguồn cao và tốc độ xử lý vượt trội so với các vi điều khiển 8-bit/16-bit truyền thống.
  • Tích hợp chuẩn công nghệ hiện đại:
    • Chuẩn CMSIS (Cortex Microcontroller Software Interface Standard) giúp trừu tượng hóa phần cứng và chuẩn hóa giao tiếp phần mềm giữa các dòng chip ARM.
    • Khối gỡ lỗi CoreSight hỗ trợ gỡ lỗi và theo dõi thời gian thực (Trace) thông qua giao tiếp SWD 2 dây, vẫn duy trì hoạt động ngay cả khi vi điều khiển chuyển sang các chế độ công suất thấp.
    • Tích hợp đầy đủ các giao thức truyền thông công nghiệp phức tạp: bộ điều khiển bxCAN hỗ trợ chuẩn CAN 2.0B Active/Passive với 3 mailbox truyền, 2 FIFO nhận và 14 bộ lọc phần cứng (Filter Banks); khối USB 2.0 Full Speed (12Mbps) hỗ trợ 8 endpoint với bộ đệm 512 byte SRAM chia sẻ cùng khối CAN.
  • Ứng dụng thực tế trong công nghiệp: Các tính năng phần cứng của STM32F103C8T6 được định hướng cho các hệ thống: bộ điều khiển logic khả trình (PLC), biến tần công nghiệp, hệ thống điều khiển động cơ (Motor Control PWM kết hợp ngắt Break Input), thiết bị y tế cầm tay, thiết bị GPS, máy in, máy quét, hệ thống báo động an ninh và hệ thống kiểm soát môi trường HVAC.
  • Kết nối phần mềm công nghiệp: Sử dụng công cụ thiết kế phần cứng Altium Designer và môi trường biên dịch công nghiệp Keil C MDK, đảm bảo quy trình học tập tương thích hoàn toàn với tiêu chuẩn phát triển sản phẩm nhúng tại các doanh nghiệp.

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

  • Sinh viên mục tiêu: Sinh viên năm thứ ba và năm thứ tư thuộc các ngành Kỹ thuật Điện tử - Viễn thông, Kỹ thuật Máy tính, Điều khiển và Tự động hóa, Cơ điện tử, Công nghệ Kỹ thuật Điện - Điện tử chuẩn bị thực hiện đồ án chuyên ngành hoặc khóa luận tốt nghiệp về thiết kế hệ thống nhúng.
  • Kiến thức tiên quyết (Prerequisites):
    • Ngôn ngữ lập trình C nâng cao (thao tác con trỏ, cấu trúc dữ liệu struct, toán tử xử lý bit).
    • Kiến thức cơ sở về Kỹ thuật số, Lý thuyết mạch điện tử và Kiến trúc máy tính.
    • Hiểu biết cơ bản về vi điều khiển 8-bit/16-bit (họ 8051, PIC hoặc AVR).
  • Giảng viên và phương thức khai thác: Giảng viên có thể sử dụng giáo trình làm đề cương giảng dạy lý thuyết môn Vi điều khiển nâng cao, xây dựng ngân hàng bài tập thực hành phòng thí nghiệm hoặc làm tài liệu hướng dẫn sinh viên thiết kế kit phát triển vi điều khiển 32-bit.
  • Tự học và tham khảo chuyên nghiệp: Kỹ sư thiết kế phần cứng, lập trình viên Firmware hoặc người tự học có thể sử dụng tài liệu như một sổ tay tra cứu cấu hình thanh ghi, tham khảo thiết kế mạch nguyên lý, quy trình định tuyến layout PCB và mã nguồn mẫu cho các chuẩn giao tiếp ngoại vi.

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

1. Giáo trình này phù hợp với đối tượng người học nào?
Giáo trình được biên soạn chuyên biệt cho sinh viên đại học, kỹ sư phần cứng và lập trình viên nhúng muốn tiếp cận vi điều khiển 32-bit lõi ARM Cortex-M3 thông qua dòng chip STM32F103C8T6 của STMicroelectronics.

2. Cần chuẩn bị kiến thức nền tảng nào trước khi học giáo trình này?
Người học cần có kiến thức vững chắc về lập trình C (đặc biệt là thao tác bit và con trỏ), nắm được nguyên lý mạch điện tử cơ bản và hiểu cấu trúc hoạt động chung của vi xử lý.

3. Điểm khác biệt cốt lõi giữa vi điều khiển STM32F103C8T6 trong giáo trình với các vi điều khiển 8-bit truyền thống là gì?
STM32F103C8T6 chạy trên lõi 32-bit ARM Cortex-M3 tần số 72MHz, trang bị bộ điều khiển ngắt NVIC tốc độ cao (đáp ứng 12 chu kỳ), 7 kênh DMA tự động chuyển đổi dữ liệu, hệ thống bảo vệ an toàn (PVD, CSS, 2 bộ Watchdog), cơ chế bảo mật Flash FPEC và tích hợp nhiều giao diện ngoại vi cao cấp như USB 2.0 Full Speed, CAN 2.0B, ADC 12-bit kép.

4. Quy trình tự học giáo trình như thế nào để đạt hiệu quả cao nhất?
Người học nên đọc hiểu kiến trúc phần cứng và thanh ghi tại Chương I, tiến hành thực hành thiết kế/gia công kit thí nghiệm theo hướng dẫn Chương II, sau đó cấu hình từng project trên Keil C MDK và nạp thử nghiệm các bài tập mẫu ở Chương III.

5. Giáo trình có kèm theo tài liệu và công cụ hỗ trợ nào?
Tài liệu cung cấp toàn bộ bản vẽ thiết kế nguyên lý và layout PCB trên phần mềm Altium Designer, mã nguồn C mẫu cấu hình thanh ghi ngoại vi theo chuẩn CMSIS và tài liệu triển khai website mã nguồn mở NukeViet (Web Hocarm).


Kết luận

  • Giá trị học thuật cốt lõi: Giáo trình Lập trình căn bản ARM Cortex M3 STM32F103 của tác giả Nguyễn Ngọc Hà mang lại cấu trúc tri thức hoàn chỉnh về vi điều khiển 32-bit, liên kết chặt chẽ giữa lý thuyết vi kiến trúc thanh ghi, quy trình thiết kế mạch in PCB phần cứng và kỹ thuật lập trình firmware ứng dụng thực tế.
  • Lộ trình học tập đề xuất:
    1. Giai đoạn 1: Nắm vững cấu trúc CPU ARMv7-M, NVIC, Bus Matrix, RCC và các cơ chế an toàn hệ thống.
    2. Giai đoạn 2: Thực hành thiết kế mạch nguyên lý, mạch in PCB trên Altium Designer và hoàn thiện kit thí nghiệm STM32F103C8T6.
    3. Giai đoạn 3: Lập trình cấu hình thanh ghi từ GPIO, SysTick, USART, ADC đến các chuẩn giao tiếp I2C, 1-wire và các module mở rộng trên Keil C MDK.
  • Tài liệu tham khảo bổ trợ: Tài liệu kỹ thuật kiến trúc ARMv7-M từ ARM Technical Reference Manual, Datasheet và Reference Manual dòng STM32F103 từ STMicroelectronics, tài liệu thư viện chuẩn CMSIS và mã nguồn nền tảng NukeViet.