Hướng dẫn lập trình STM32F103 thanh ghi từ A-Z

Hướng dẫn lập trình STM32F103 thanh ghi từ A-Z là chuỗi bài viết chi tiết trên svtdhnlu.com, giúp bạn tiếp cận vi điều khiển STM32F103 theo cách bare-metal – làm việc trực tiếp với thanh ghi phần cứng, không phụ thuộc vào thư viện HAL hay SPL của ST.

Phương pháp này mang lại nhiều lợi ích thiết thực:

  • Hiểu sâu bản chất hoạt động của phần cứng.
  • Kiểm soát chính xác từng bit cấu hình.
  • Viết code tối ưu về tốc độ và bộ nhớ.
  • Xây dựng nền tảng vững chắc cho các dự án Embedded chuyên sâu.

Vì sao nên học hướng dẫn lập trình STM32F103 thanh ghi?

Tại sao nên chọn cách lập trình bare-metal thay vì sử dụng thư viện sẵn có? Dưới đây là những lý do thuyết phục:

  • Hiểu rõ bản chất phần cứng: Bạn sẽ biết chính xác từng thanh ghi như GPIOx_CRL, RCC_APB2ENR hay TIMx_CR1 hoạt động như thế nào, giúp debug lỗi nhanh chóng và tối ưu hóa code.
  • Không phụ thuộc thư viện: Kiến thức này có thể áp dụng cho mọi dòng STM32 (như STM32F4, STM32H7) và các MCU ARM Cortex-M khác, không bị ràng buộc bởi phiên bản HAL.
  • Tối ưu hiệu năng: Code bare-metal thường gọn nhẹ hơn, tiết kiệm bộ nhớ và CPU, phù hợp cho các ứng dụng thời gian thực (real-time) như IoT, robot hoặc hệ thống nhúng.
  • Nền tảng cho kỹ thuật nâng cao: Từ đây, bạn dễ dàng tiếp cận RTOS (như FreeRTOS), DMA (Direct Memory Access), Low-Power mode hoặc giao tiếp USB mà không bị “mù mờ” về phần cứng.
  • Dễ dàng debug: Sử dụng công cụ như Keil uVision để quan sát trực tiếp giá trị thanh ghi trong quá trình chạy chương trình.

Kiến Trúc Tổng Quát Của STM32F103 Cần Nắm Vững

Trước khi đi sâu vào code, hãy nắm rõ cấu trúc của STM32F103 – dòng MCU phổ biến với lõi ARM Cortex-M3, flash 64-512KB và tốc độ clock lên đến 72MHz.

  • Lõi xử lý ARM Cortex-M3: Chịu trách nhiệm thực thi lệnh, hỗ trợ interrupt qua NVIC (Nested Vectored Interrupt Controller) và SysTick timer cho delay chính xác.
  • Hệ thống bus: Bao gồm AHB (Advanced High-performance Bus) cho tốc độ cao và APB1/APB2 (Advanced Peripheral Bus) cho ngoại vi chậm hơn. Điều này ảnh hưởng đến việc cấu hình clock qua RCC (Reset and Clock Control).
  • Các ngoại vi chính:
    • GPIO: Điều khiển input/output, hỗ trợ Push-Pull, Open-Drain.
    • Timer: General-purpose timer cho PWM, capture, delay.
    • USART/UART: Giao tiếp serial cho truyền nhận dữ liệu.
    • ADC: Chuyển đổi analog-to-digital cho cảm biến.
    • FLASH: Lưu trữ chương trình và dữ liệu non-volatile.
    • Các ngoại vi khác: SPI, I2C, CAN (tùy model).

Hiểu kiến trúc này giúp bạn tránh lỗi phổ biến như quên bật clock cho ngoại vi, dẫn đến chương trình không chạy.

Tài Liệu Bắt Buộc Khi Học Hướng Dẫn Lập Trình STM32F103 Thanh Ghi

Để học hiệu quả, bạn cần các tài liệu chính hãng từ STMicroelectronics và ARM:

Reference Manual RM0008

Tài liệu cốt lõi, mô tả chi tiết từng thanh ghi (register map), bit chức năng và thứ tự cấu hình. Tải miễn phí tại website ST.

Link tải Reference Manual RM0008 STM32F103: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced Arm®-based 32-bit MCUs – Reference manual

Datasheet STM32F103xx

Thông tin về pinout, thông số điện (voltage, current), clock max và kích thước flash/RAM. Ví dụ, STM32F103C8T6 có 64KB flash, 20KB RAM.

Link tải Datasheet STM32F103xx: 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

ARM Cortex-M3 Technical Reference Manual

Giải thích NVIC, SysTick, exception handling và vector table.

Link tải ARM Cortex-M3 Technical Reference Manual: STM32F10xxx/20xxx/21xxx/L1xxxx Cortex®-M3 programming manual

Kết hợp với hướng dẫn lập trình STM32F103 thanh ghi trên svtdhnlu.com, bạn sẽ có lộ trình học thực tế, kèm code mẫu.

Công Cụ Và Phần Mềm Khuyến Nghị

Series này sử dụng môi trường đơn giản nhưng mạnh mẽ cho bare-metal:

Keil uVision MDK-ARM (phiên bản 5 hoặc mới hơn)

Tạo project từ scratch, compile code, debug thanh ghi trực quan. Hỗ trợ miễn phí cho STM32.

Keil C- Phần mềm lập trình stm32f103
Công cụ lập trình stm32f103 – phần mềm Keil C

STM32CubeIDE

Công cụ miễn phí từ ST, tích hợp debugger và register viewer – lý tưởng nếu bạn muốn tránh Keil.

Công cụ lập trình stm32f103 - Phần mềm STM32CubeMX
Phần mềm STM32CubeMX – Công cụ cấu hình và gen code trong lập trình STM32F103

ST-Link V2 hoặc V3

Thiết bị nạp code và debug realtime, giá rẻ (khoảng 100-200k VND), kết nối USB.

ST-LINK v2 - công cụ nạp và debug trong lập trình STM32F103
ST-LINK V2: công cụ nạp và debug trong lập trình STM32F1

Board thực hành

STM32F103C8T6 (Blue Pill) hoặc STM32F103RCT6, dễ mua trên Shopee/Lazada.

Công cụ lập trình STM32F103 - Kit STM32F103RC mini
Board STM32F103RC mini

Trong bài chuỗi bài viết hướng dẫn lập trình STM32F103 thanh ghi, svtdhnlu.com sử dụng board STM32F103RCT6 mini cho các chương trình ví dụ.

Xem chi tiết bài viết:

Lộ Trình Học Hướng Dẫn Lập Trình STM32F103 Thanh Ghi Chi Tiết

Dưới đây là lộ trình đầy đủ, được thiết kế theo thứ tự từ cơ bản (setup và GPIO) đến nâng cao (interrupt và ngoại vi phức tạp). Mỗi bài đều có code mẫu C, giải thích thanh ghi và ví dụ thực hành.

Hướng dẫn tạo project Keil C cho lập trình STM32F103 thanh ghi sử dụng Keil Uvision 5

Tìm hiểu:

  • Tạo project embedded mới sử dụng Keil C
  • Thêm file startup cho STM32F103xx
  • Tạo cấu trúc thư mục và add source file trong Keil C
  • Cấu hình project option
  • Build và nạp chương trình

👉 Link bài: Lập trình STM32 thanh ghi trên Keil uVision5 – Tạo project Keil

Tổng quan lập trình STM32F103 bằng thanh ghi

Tìm hiểu:

  • Cách đọc Reference Manual
  • Cách xác định địa chỉ thanh ghi
  • Tư duy lập trình bare-metal

👉 Link bài: Các bạn tải về và tự đọc tài liệu nha

Cấu hình clock STM32F103 bằng thanh ghi

Nội dung chính:

  • RCC là gì?
  • HSI, HSE, PLL
  • Cấu hình clock 72 MHz
  • Bật clock cho GPIO, Timer, USART

👉 Link bài: Cấu hình clock STM32F103 bằng thanh ghi

Cấu hình thanh ghi FLASH STM32F103

Tìm hiểu:

  • Flash access control register
  • Tại sao cần cấu hình FLASH
  • Cách cấu hình PRFTBE (Prefetch Buffer Enable), LATENCY

👉 Link bài: Cấu hình thanh ghi FLASH STM32F103

Lập trình STM32F103 thanh ghi cấu hình GPIO Output

Học cách:

  • Cấu hình GPIOx_CRL / GPIOx_CRH
  • Sử dụng GPIOx_ODR, BSRR, BRR
  • Bật / tắt LED bằng thanh ghi
  • Push-Pull & Open-Drain

👉 Link bài: Lập trình STM32F103 thanh ghi cấu hình GPIO Output

Lập trình STM32F103 thanh ghi build HEX & nạp chương trình STM32F103

Hướng dẫn:

👉 Link bài: Build HEX & nạp chương trình STM32F103

Lập trình STM32F103 thanh ghi cấu hình GPIO Input

Nội dung:

  • Thanh ghi GPIOx_IDR
  • Cấu hình Pull-Up / Pull-Down
  • Đọc trạng thái nút nhấn

👉 Link bài: Lập trình STM32F103 thanh ghi cấu hình GPIO Input

Các phương pháp chống dội nút nhấn STM32F103

So sánh:

👉 Link bài: Các phương pháp chống dội nút nhấn STM32F103

Lập trình STM32F103 thanh ghi – Cấu hình SysTick Timer STM32F103RCT6

Tìm hiểu:

  • Thanh ghi SysTick control (SysTick_CTRL)
  • Tính toán LOAD cho Systick Timer 1ms
  • Cấu hình SysTick theo tài liệu PM0056
  • Kiểm tra SysTick timer

👉 Link bài: Lập trình STM32F103 thanh ghi – Cấu hình SysTick Timer STM32F103RCT6

Delay time trong lập trình STM32F103 thanh ghi sử dụng SysTick Timer

Các phương pháp:

  • Blocking delay time
  • Non-Blocking delay
  • So sanh ưu và nhược điểm 2 phương pháp blocking delay và non-blocking delay

👉 Link bài: Delay time trong lập trình STM32F103 thanh ghi sử dụng SysTick Timer

Lập trình STM32F103 thanh ghi – Cấu hình NVIC trong STM32F103

Tìm hiểu:

  • NVIC là gì?
  • Cấu hình các thanh ghi NVIC quan trọng, đọc bảng ánh xạ NVIC
  • Quản lý interrupt bằng thanh ghi

👉 Link bài: Lập trình STM32F103 thanh ghi – Cấu hình NVIC trong STM32F103 (updating …)

Timer & PWM STM32F103

Nội dung:

  • Thanh ghi TIMx_CR1, PSC, ARR
  • Timer base
  • PWM mode
  • Ứng dụng thực tế

👉 Link bài: Timer & PWM STM32F103 bằng thanh ghi (updating …)

USART / UART STM32F103

Học cách:

  • Cấu hình baudrate
  • Thanh ghi USART_BRR, CR1, DR
  • Truyền / nhận dữ liệu

👉 Link bài: USART / UART STM32F103 bằng thanh ghi (updating …)

ADC STM32F103

Nội dung:

  • Thanh ghi ADC_CR1, CR2
  • Chọn kênh
  • Đọc giá trị analog

👉 Link bài: ADC STM32F103 bằng thanh ghi (updating …)

Đối Tượng Phù Hợp Với Hướng Dẫn Lập Trình STM32F103 Thanh Ghi

Chuỗi hướng dẫn lập trình stm32f103 thanh ghi phù hợp với:

  • Sinh viên Điện – Điện tử
  • Người mới học STM32
  • Người học Embedded System
  • Embedded Engineer muốn củng cố nền tảng

FAQ Về Hướng Dẫn Lập Trình STM32F103 Thanh Ghi

  1. STM32F103 có phù hợp cho người mới không? Có, đây là dòng rẻ và phổ biến nhất, với cộng đồng hỗ trợ lớn.
  2. Cần bao lâu để học xong lộ trình? Khoảng 2-4 tuần nếu thực hành hàng ngày, tùy kinh nghiệm.
  3. Bare-metal có khó hơn HAL không? Ban đầu khó hơn, nhưng lâu dài giúp bạn chuyên sâu hơn.
  4. Lỗi phổ biến khi học? Quên bật clock ngoại vi hoặc sai địa chỉ thanh ghi – luôn check RM0008.

Kết Luận

Hướng dẫn lập trình STM32F103 thanh ghi là nền tảng quan trọng giúp bạn:

  • Hiểu sâu phần cứng
  • Viết firmware tối ưu
  • Làm chủ STM32 & ARM Cortex-M

Hãy bookmark trang này và bắt đầu học ngay hôm nay! Nếu có câu hỏi, comment bên dưới hoặc theo dõi svtdhnlu.com để nhận cập nhật mới.

Chúc bạn thành công trong hành trình embedded!

Viết một bình luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.