Bối cảnh và vấn đề nghiên cứu
Trong kỹ thuật vi điều khiển và phát triển hệ thống nhúng, sự dịch chuyển công nghệ từ các dòng vi điều khiển 8-bit và 16-bit truyền thống (như 8051, AVR, PIC) sang các bộ vi xử lý cấu trúc RISC 32-bit họ ARM là một xu hướng then chốt. Dòng vi điều khiển STM32 của tập đoàn STMicroelectronics, phát triển trên nền tảng lõi ARM Cortex-M, đã xác lập tiêu chuẩn kỹ thuật về sự cân bằng giữa hiệu năng xử lý, chi phí sản xuất thấp và khả năng tối ưu hóa công suất tiêu thụ cho các ứng dụng thời gian thực.
Báo cáo thực tập tốt nghiệp này tập trung khảo sát lý thuyết kiến trúc vi điều khiển ARM STM32 và triển khai thực hành lập trình điều khiển ngoại vi trên kit phát triển STM32F103C8T6 tại Viện Nghiên cứu Điện tử - Tin học - Tự động hóa.
Mục tiêu và nhiệm vụ nghiên cứu cụ thể bao gồm:
- Tìm hiểu tổng quan về kiến trúc vi xử lý 32-bit ARM, quá trình tiến hóa của các thế hệ lõi ARM Cortex và cấu trúc nhân ARM Cortex-M3.
- Khảo sát cấu trúc phần cứng của dòng vi điều khiển STM32: hệ thống bus (AHB, APB), tổ chức bộ nhớ (Flash, SRAM), hệ thống tạo xung nhịp (RCC, PLL), các khối ngoại vi tích hợp, các chế độ tiết kiệm năng lượng và các cơ chế bảo vệ an toàn phần cứng.
- Tổng hợp và phân loại các phân họ vi điều khiển STM32 hiện hành trên thị trường (từ dòng định hướng công suất thấp đến dòng hiệu năng cao).
- Thiết lập quy trình cấu hình phần cứng bằng công cụ STM32CubeMX, biên dịch bằng môi trường Keil MDK-ARM và thực hành viết chương trình điều khiển các khối ngoại vi cơ bản (GPIO, Timer/Ngắt, màn hình ký tự LCD 1602 và màn hình hiển thị LED 7 đoạn 4 số) trên phần cứng STM32F103C8T6.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Kiến trúc vi điều khiển 32-bit STM32 và vi điều khiển STM32F103C8T6 (thuộc phân họ STM32F1 Performance).
- Phạm vi nghiên cứu: Khảo sát lý thuyết về kiến trúc phần cứng, cấu hình hệ thống bằng phần mềm STM32CubeMX kết hợp thư viện chuẩn HAL (Hardware Abstraction Layer), thực nghiệm kiểm chứng chức năng trên KIT phát triển STM32F103C8T6 Start tại phòng Đo lường chất lượng, Viện Nghiên cứu Điện tử - Tin học - Tự động hóa vào tháng 02/2024.
Cơ sở lý thuyết và phương pháp
Khung lý thuyết và kiến trúc phần cứng
Nghiên cứu dựa trên nền tảng kiến trúc vi xử lý 32-bit RISC của ARM, cụ thể là lõi ARM Cortex-M3 xây dựng trên kiến trúc tập lệnh ARMv7-M (hỗ trợ tập lệnh Thumb-2). Các đặc điểm kỹ thuật cốt lõi được tác giả khai thác gồm:
- Kiến trúc Harvard: Phân tách độc lập bus dữ liệu và bus lệnh, liên kết trực tiếp qua hệ thống ma trận bus tốc độ cao AHB (Advanced High Performance Bus) và các cầu nối tới bus ngoại vi APB1 (tối đa 36 MHz), APB2 (tối đa 72 MHz).
- Bộ điều khiển ngắt lồng nhau NVIC (Nested Vectored Interrupt Controller): Rút ngắn thời gian đáp ứng ngắt cho hệ thống thời gian thực.
- Kỹ thuật Bit-Band: Cho phép truy xuất, thao tác trực tiếp trên từng bit dữ liệu trong các vùng nhớ SRAM và ngoại vi được chỉ định.
- Hệ thống an toàn và quản lý công suất: Tích hợp các bộ giám sát điện áp nguồn PVD (Power Voltage Detector), hệ thống giám sát an toàn xung nhịp CSS (Clock Security System), hai khối Watchdog độc lập (WWDG và IWDG), cùng các chế độ hoạt động năng lượng thấp (Sleep, Stop, Standby).
| Phân hệ / Khối chức năng |
Đặc tính kỹ thuật trên STM32F103C8T6 |
| Lõi CPU |
ARM 32-bit Cortex-M3, tần số tối đa 72 MHz |
| Bộ nhớ On-chip |
64 KB Flash (chu kỳ 10.000 lần xóa/ghi, lưu trữ 30 năm ở 85°C), 20 KB SRAM |
| Điện áp & Dòng tiêu thụ |
2.0 V – 3.6 V; Run mode ~36 mA (72 MHz); Standby mode 2 µA; Backup domain 1.4 µA (3.3V) |
| Cổng I/O đa dụng (GPIO) |
37 chân I/O, chịu điện áp 5V, hỗ trợ cấu hình Push-Pull, Open-Drain, Pull-up, Pull-down, Analog |
| Bộ chuyển đổi ADC |
2 bộ ADC 12-bit (18 kênh ghép kênh, tốc độ lấy mẫu 1 MHz), tích hợp cảm biến nhiệt độ nội |
| Bộ định thời (Timers) |
4 bộ 16-bit (Timer 1 là Advanced Control Timer; Timer 2, 3, 4 là General Purpose Timers) |
| Giao tiếp truyền thông |
2x SPI (tối đa 18 Mbps), 2x I2C (100/400 kHz), 3x USART (tối đa 4.5 Mbps), 1x CAN 2.0B, 1x USB 2.0 FS |
Phương pháp nghiên cứu và nguồn dữ liệu
- Phương pháp tổng hợp và phân tích tài liệu kỹ thuật: Thu thập, đối chiếu dữ liệu từ tài liệu kỹ thuật của STMicroelectronics (Datasheet, Reference Manual), giáo trình vi điều khiển ARM, các hướng dẫn lập trình chuẩn CMSIS/HAL.
- Phương pháp thiết kế cấu hình và lập trình thực nghiệm: Ứng dụng công cụ sinh mã đồ họa STM32CubeMX để thiết lập sơ đồ chân (Pinout), cây xung nhịp (Clock Tree) và các thông số ngoại vi; sử dụng môi trường Keil MDK-ARM để biên dịch mã nguồn C/C++.
- Phương pháp đo kiểm và thực nghiệm phần cứng: Nạp chương trình điều khiển thông qua các chuẩn giao tiếp nạp/gỡ lỗi (JTAG, SWD, Bootloader UART) vào kit phần cứng STM32F103C8T6 Start để kiểm chứng tính chính xác của các thuật toán điều khiển ngoại vi.
Nội dung chính theo từng chương
Chương 1: Cơ sở lý thuyết về STM32
Chương này phân tích chi tiết cấu trúc phần cứng và các khối chức năng nội tại của dòng vi điều khiển STM32 nền Cortex-M3:
- Lịch sử và phân loại ARM Cortex: Khái quát các thế hệ kiến trúc từ ARMv1 đến ARMv8-A, phân định ba nhánh Cortex-A (ứng dụng phức tạp/hệ điều hành), Cortex-R (đáp ứng thời gian thực nghiêm ngặt) và Cortex-M (vi điều khiển tối ưu chi phí, công năng).
- Kiến trúc bus và phân vùng bộ nhớ: Trình bày bản đồ bộ nhớ (Memory Map), cấu trúc vùng Flash gồm User Flash (bắt đầu từ địa chỉ
0x08000000), System Memory (4 KB chứa Bootloader nhà sản xuất) và Option Bytes cấu hình bảo mật. Cơ chế bảo vệ đọc/ghi Flash thông qua khối điều khiển FPEC (Flash Program & Erase Controller) sử dụng khóa mở 0x45670123 và 0xCDEE89AB.
- Hệ thống xung nhịp (RCC): Cơ chế phối hợp giữa 2 nguồn dao động nội (HSI 8 MHz, LSI 32–40 kHz), 2 nguồn dao động ngoại (HSE 4–16 MHz, LSE 32.768 kHz) và khối vòng khóa pha PLL để nhân xung nhịp hệ thống lên tối đa 72 MHz.
- Chi tiết các khối ngoại vi:
- GPIO: Cấu trúc thanh ghi cấu hình (CRL, CRH), thanh ghi dữ liệu (IDR, ODR), thanh ghi xóa/đặt bit (BSRR/BRR) và tính năng Remap/Alternate Function.
- Bộ định thời: Cơ chế hoạt động của bộ chia tần 16-bit Prescaler, thanh ghi Auto-Reload, các chế độ Input Capture, Output Compare, phát xung PWM (Edge-aligned, Center-aligned), One-Pulse và khả năng đồng bộ đa Timer (Master/Slave).
- Các giao tiếp nối tiếp: Cấu trúc khối SPI (hỗ trợ CRC-8/CRC-16), I2C (hỗ trợ kiểm tra lỗi phần cứng PEC), USART (hỗ trợ UART, Half-duplex một dây, Smartcard ISO 7816-3, IrDA), bxCAN (3 mailbox truyền, 2 FIFO nhận, 14 bộ lọc) và USB 2.0 Full Speed (8 endpoints chia sẻ 512 byte SRAM với CAN).
- Các cơ chế quản lý công suất và an toàn: Nguyên lý chuyển đổi và đặc tính tiêu thụ dòng ở các chế độ Run, Sleep, Stop, Standby; hoạt động của khối PVD kết hợp ngắt EXTI16, hệ thống CSS giám sát thạch anh ngoài, bộ đếm Windowed Watchdog (đếm xuống 6-bit từ PCLK1) và Independent Watchdog (đếm xuống 12-bit từ LSI).
Chương 2: Tìm hiểu các họ của STM32
Tác giả phân loại và tổng hợp cấu hình của 14 phân họ vi điều khiển STM32 dựa trên các lõi Cortex-M khác nhau:
- Nhóm hiệu năng cao (High Performance): Dòng STM32H7 (lõi Cortex-M7 tốc độ lên đến 480 MHz, bộ nhớ Flash đến 2 MB, RAM 1 MB gồm TCM RAM, bộ điều khiển Quad-SPI và bộ nhớ ngoài 32-bit), STM32F7 (Cortex-M7, 216 MHz), STM32F4 (Cortex-M4, 84–180 MHz, tích hợp DSP, FPU, bộ nhớ CCM-SRAM, giao tiếp camera, bộ tăng tốc mã hóa phần cứng AES/SHA).
- Nhóm phổ thông (Mainstream): Dòng STM32F1 (Cortex-M3, tối đa 72 MHz), STM32F3 (Cortex-M4, 72 MHz, bổ sung các ngoại vi tương tự nâng cao), STM32G4 (Cortex-M4, 170 MHz, tối ưu ứng dụng điều khiển động cơ và nguồn số), STM32F0/G0 (Cortex-M0/M0+, tối ưu hóa chi phí cho các ứng dụng nhạy cảm về giá).
- Nhóm công suất cực thấp (Ultra-low-power): Dòng STM32L5 (Cortex-M33 tích hợp TrustZone cho bảo mật IoT), STM32L4/L4+ (Cortex-M4, 80–120 MHz, bộ tăng tốc ART Accelerator), STM32L1 (Cortex-M3) và STM32L0 (Cortex-M0+ với dải nguồn thấp đến 1.65 V).
| Dòng vi điều khiển STM32 |
Lõi CPU ARM |
Tần số xung nhịp tối đa |
Đặc điểm nổi bật được tổng hợp |
| STM32H7 |
Cortex-M7F |
480 MHz |
FPU độ chính xác kép, RAM 1 MB, Flash 2 MB, Quad-SPI, Ethernet |
| STM32F7 |
Cortex-M7F |
216 MHz |
Lõi ARM Cortex-M7 hiệu suất cao, DSP, Single FPU (SFPU) |
| STM32F4 |
Cortex-M4F |
180 MHz |
DSP, FPU, 64 KB CCM-SRAM, USB OTG HS/FS, Ethernet MAC, Camera I/F |
| STM32F3 |
Cortex-M4 |
72 MHz |
Tích hợp nhiều ngoại vi tương tự (Op-amp, Comparator), FPU, CCM RAM |
| STM32G4 |
Cortex-M4 |
170 MHz |
Thay thế dòng F3, ADC 16-bit oversampling 4 Msps, USB-C Power Delivery |
| STM32L5 |
Cortex-M33 |
110 MHz |
Công nghệ bảo mật phần cứng TrustZone cho Armv8-M, công suất cực thấp |
| STM32L4 / L4+ |
Cortex-M4F |
80 / 120 MHz |
Bộ tăng tốc ART Accelerator (0 wait-state Flash), công suất thấp |
| STM32F1 / F2 / L1 |
Cortex-M3 |
32 – 120 MHz |
Cân bằng giá thành/hiệu năng, ngoại vi đa dạng, hỗ trợ USB/CAN/Ethernet |
| STM32G0 / L0 |
Cortex-M0+ |
32 – 64 MHz |
Tiết kiệm năng lượng tối đa, vận hành điện áp thấp từ 1.65 V |
| STM32F0 |
Cortex-M0 |
48 MHz |
Dòng cấp thấp (entry-level), thay thế vi điều khiển 8-bit/16-bit |
Chương 3: Thực hành lập trình trên KIT STM32F103C8T6
Chương này mô tả toàn bộ quy trình thiết lập dự án, cấu hình xung nhịp và xây dựng mã nguồn cho 5 bài thực hành kỹ thuật:
- Thiết lập xung nhịp hệ thống: Cấu hình bộ dao động thạch anh ngoài HSE 8 MHz, kích hoạt bộ nhân tần PLL với hệ số nhân 9 (
RCC_PLL_MUL9) để đưa xung nhịp hệ thống (SYSCLK/HCLK) lên mức tối đa 72 MHz; chia bus APB1 về 36 MHz (RCC_HCLK_DIV2) và bus APB2 ở 72 MHz (RCC_HCLK_DIV1).
- Bài 1 - Cấu hình GPIO điều khiển LED đơn nhấp nháy: Thiết lập các chân từ
PB0 đến PB7 ở chế độ Output Push-Pull, dùng hàm HAL_GPIO_TogglePin() kết hợp HAL_Delay(500) để tạo chu kỳ nhấp nháy 500 ms.
- Bài 2 - Lập trình GPIO kết hợp nút nhấn (Button) điều khiển 8 hiệu ứng LED: Cấu hình chân nút nhấn
PA11 ở chế độ Input kèm điện trở kéo lên nội (GPIO_PULLUP). Xây dựng thuật toán chống dội phím (chờ 30 ms) và dùng cấu trúc điều kiện để chuyển đổi tuần tự 8 trạng thái sáng của mảng LED trên Port B.
- Bài 3 - Lập trình Timer chớp tắt LED sử dụng ngắt: Cấu hình bộ định thời Timer 1 với bộ chia tần
Prescaler = 7199 và chu kỳ đếm Counter Period = 4999. Với nguồn xung 72 MHz, Timer tạo ngắt tràn định kỳ 500 ms thông qua hàm gọi lại HAL_TIM_PeriodElapsedCallback(), giải phóng tài nguyên CPU so với phương pháp lặp trễ tuần tự.
- Bài 4 - Lập trình giao tiếp màn hình LCD 1602 chế độ 4-bit: Kết nối các chân điều khiển (
RS - PB12, RW - PB13, EN - PB14) và các chân dữ liệu 4-bit cao (D4 - PA4, D5 - PA5, D6 - PA6, D7 - PA7). Xây dựng hàm phát xung chốt chân Enable, hàm tách dữ liệu thành 2 nibble (High Nibble và Low Nibble) để ghi lệnh (RS = 0) hoặc ghi ký tự (RS = 1), khởi tạo LCD theo chuẩn hiển thị 2 dòng ma trận 5x8 và xuất chuỗi ký tự "TIME:".
- Bài 5 - Lập trình quét LED 7 thanh 4 số (Anode chung): Phân bổ 8 chân dữ liệu thanh đoạn
A, B, C, D, E, F, G, Dp nối với PA0–PA7 và 4 chân điều khiển cấp nguồn Anode qua các transistor điều khiển LED7_1 đến LED7_4 nối với PB12–PB15. Áp dụng phương pháp quét từng LED định kỳ dựa trên ngắt Timer với thời gian mỗi bước quét $T < 6\text{ ms}$ (đáp ứng giới hạn lưu ảnh võng mạc $4T < 25\text{ ms}$), thực hiện đếm và hiển thị các giá trị số từ 0 đến 100 từ bảng mã hex tương ứng.
Thiết kế và triển khai thực nghiệm
Khóa luận trình bày việc thiết kế phần mềm nhúng và cấu hình giao tiếp phần cứng trên nền tảng KIT phát triển STM32F103C8T6 Start:
[ APB2 Bus: 72MHz ] [ APB1 Bus: 36MHz ]
Kiến trúc phần cứng và kết nối ngoại vi
- KIT STM32F103C8T6 Start: Sử dụng vi điều khiển STM32F103C8T6 (vỏ đóng gói LQFP48, 48 chân), tích hợp chân cấu hình chế độ nạp (
BOOT0, BOOT1), hỗ trợ kết nối mạch nạp ngoài qua các chuẩn JTAG, SWD (mạch nạp MH-Pro, ST-Link, J-Link MH, Ulink 2) hoặc nạp qua giao tiếp Bootloader USART1.
- Khối hiển thị và giao tiếp nút nhấn:
- Khối 8 LED đơn mắc Anode chung: Cực Cathode nối qua điện trở hạn dòng về các chân
PB0–PB7 (mức logic 0: LED sáng; mức logic 1: LED tắt).
- Khối LCD 1602: Giao tiếp qua 7 đường tín hiệu (
RS, RW, EN, D4, D5, D6, D7), điện trở biến trở điều chỉnh độ tương phản.
- Khối LED 7 đoạn 4 số Anode chung: Cực Anode của 4 LED điều khiển bởi tín hiệu tích cực mức thấp từ
PB12–PB15; 8 đoạn Cathode nối trực tiếp với thanh ghi dữ liệu cổng PA0–PA7.
Bảng mã điều khiển LED 7 thanh Anode chung (Mức 0: Sáng, Mức 1: Tắt)
| Chữ số hiển thị |
A (PA0) |
B (PA1) |
C (PA2) |
D (PA3) |
E (PA4) |
F (PA5) |
G (PA6) |
Dp (PA7) |
Mã Hex xuất ra Port A |
| 0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0xC0 |
| 1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0xF9 |
| 2 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0xA4 |
| 3 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0xB0 |
| 4 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0x99 |
| 5 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0x92 |
| 6 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0x82 |
| 7 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0xF8 |
| 8 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0x80 |
| 9 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0x90 |
Kết quả và đóng góp
Kết quả triển khai thực nghiệm
- Xây dựng cấu hình hệ thống hoàn chỉnh: Thiết lập thành công chu trình xung nhịp chuẩn 72 MHz từ thạch anh ngoài thông qua cấu hình thanh ghi RCC và thư viện HAL.
- Điều khiển chính xác các khối ngoại vi cơ bản:
- Thực thi điều khiển xuất/nhập số trên các chân GPIO, hiện thực hóa các hiệu ứng nhấp nháy mảng LED và giải thuật đọc trạng thái phím bấm chống rung nhiễu.
- Vận hành thành công bộ định thời Timer 1 ở chế độ ngắt cập nhật (Update Interrupt) với thông số định thời chính xác 500 ms mà không tiêu tốn chu kỳ xử lý của CPU cho các vòng trễ rỗng.
- Xây dựng tập thư viện điều khiển hiển thị màn hình LCD 1602 ở chế độ 4-bit (tiết kiệm 4 chân I/O so với chế độ 8-bit truyền thống) và thuật toán quét đa hợp LED 7 đoạn 4 số với tần số quét lớn hơn 40 Hz, bảo đảm chất lượng hiển thị ổn định, không xuất hiện hiện tượng nhấp nháy.
Đóng góp kỹ thuật do tác giả tự nêu
- Hệ thống hóa toàn diện cơ sở lý thuyết về cấu trúc phần cứng, ngoại vi, hệ thống quản lý năng lượng và an toàn của vi điều khiển dòng ARM Cortex-M3/STM32.
- Xây dựng tài liệu hướng dẫn kỹ thuật thực hành từng bước trên phần mềm STM32CubeMX và Keil MDK-ARM, kèm theo các hàm thư viện mẫu phục vụ cho việc tái sử dụng trong các đồ án môn học và đề tài tốt nghiệp tiếp theo.
- Rèn luyện kỹ năng thiết kế phần cứng, vẽ mạch in (PCB), bố trí linh kiện và kỹ thuật lập trình nhúng thời gian thực tại đơn vị thực tập.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế của đề tài
- Các nội dung thực nghiệm mới dừng lại ở mức điều khiển các khối ngoại vi cơ bản (GPIO, Timer, ngắt, LCD 1602, LED 7 đoạn).
- Chưa triển khai thực nghiệm trên phần cứng các giao tiếp truyền thông nâng cao đã khảo sát trong phần lý thuyết (như SPI giao tiếp thẻ nhớ SD/MMC, I2C, UART kết nối máy tính, CAN bus mạng công nghiệp hoặc USB 2.0 Full Speed).
- Chưa tích hợp hệ điều hành thời gian thực (RTOS như FreeRTOS) vào quản lý đa tác vụ trên lõi Cortex-M3.
Hướng nghiên cứu tiếp theo
- Tiếp tục mở rộng xây dựng các bài thực hành giao tiếp truyền thông nối tiếp (UART, SPI, I2C, CAN) trên STM32F103C8T6.
- Ứng dụng vi điều khiển STM32 vào các bài toán đo lường, thu thập dữ liệu cảm biến và điều khiển tự động hóa hoàn chỉnh trong đồ án tốt nghiệp chính thức.
- Nghiên cứu tối ưu hóa công suất tiêu thụ trong các chế độ Sleep/Stop/Standby cho các thiết bị nhúng chạy nguồn pin dự phòng.
Giá trị tham khảo
Báo cáo thực tập có giá trị tham khảo kỹ thuật cụ thể cho sinh viên và kỹ sư trong các lĩnh vực Công nghệ Kỹ thuật Điện tử - Viễn thông, Tự động hóa, Kỹ thuật Máy tính và Cơ điện tử:
- Tài liệu học tập về kiến trúc ARM Cortex-M: Cung cấp bức tranh toàn cảnh về hệ thống bus, bản đồ bộ nhớ, các khối bảo vệ an toàn (PVD, CSS, Watchdog) và cấu trúc quản lý ngắt NVIC.
- Mẫu cấu hình và mã nguồn chuẩn HAL: Quy trình từng bước cấu hình cây xung nhịp (Clock Tree), cấu hình chân I/O và khối Timer trên công cụ STM32CubeMX là tài liệu tham khảo trực tiếp cho người mới bắt đầu chuyển đổi từ vi điều khiển 8-bit sang họ STM32 32-bit.
- Thư viện điều khiển LCD 1602 và quét LED 7 đoạn: Cung cấp thuật toán truyền nhận dữ liệu 4-bit và cơ chế phân phối thời gian quét LED bằng Timer, có thể tích hợp trực tiếp vào các mô hình nhúng thực tế.
Câu hỏi thường gặp
1. Vi điều khiển STM32F103C8T6 có cấu hình bộ nhớ và các khối ngoại vi cơ bản như thế nào?
Vi điều khiển STM32F103C8T6 dựa trên lõi ARM 32-bit Cortex-M3, có 64 KB bộ nhớ Flash chương trình, 20 KB SRAM nội, 37 chân I/O đa dụng, 2 bộ chuyển đổi ADC 12-bit (tốc độ lấy mẫu 1 MHz), 4 bộ định thời Timer 16-bit (1 Advanced Timer và 3 General Purpose Timers) và hỗ trợ các giao tiếp nối tiếp: 2x I2C, 2x SPI, 3x USART, 1x CAN 2.0B và 1x USB 2.0 Full Speed (12 Mbps).
2. Quá trình thiết lập xung nhịp (Clock Tree) của STM32F103C8T6 để đạt tần số tối đa 72 MHz được thực hiện qua các bước nào?
Hệ thống sử dụng nguồn dao động thạch anh ngoại tốc độ cao (HSE) tần số 8 MHz làm nguồn đầu vào cho khối nhân tần PLL. Cấu hình hệ số nhân PLL là 9 (RCC_PLL_MUL9) để tạo tần số đầu ra 72 MHz cấp cho xung nhịp hệ thống (SYSCLK) và bus AHB (HCLK). Đồng thời, bus ngoại vi APB1 được chia tỉ lệ 2 để vận hành ở tần số tối đa 36 MHz, còn bus APB2 giữ nguyên tỉ lệ 1 để vận hành ở tần số tối đa 72 MHz.
3. Nguyên lý hiển thị và điều kiện định thời cho thuật toán quét LED 7 thanh 4 số Anode chung là gì?
Thuật toán quét LED dựa trên hiện tượng lưu ảnh võng mạc của mắt người (xử lý hình ảnh trong khoảng 25 ms, tương đương tần số 40 hình/giây). Hệ thống lần lượt cấp nguồn cho từng LED trong chu kỳ thời gian $T$ và đẩy mã nhị phân đoạn tương ứng ra cổng dữ liệu Port A. Để hình ảnh không bị nhấp nháy, tổng thời gian quét qua cả 4 LED phải thỏa mãn điều kiện $4T < 25\text{ ms}$, suy ra khoảng thời gian cấp nguồn cho mỗi LED phải nhỏ hơn 6 ms ($T < 6\text{ ms}$).
4. Các chế độ tiết kiệm năng lượng trên STM32 có đặc tính dòng điện và thời gian đánh thức ra sao?
STM32 hỗ trợ 3 chế độ năng lượng thấp:
- Sleep mode: CPU dừng xung nhịp, ngoại vi vẫn hoạt động, dòng tiêu thụ khoảng 14 mA ở 72 MHz.
- Stop mode: Dừng toàn bộ các bộ dao động chính, duy trì nội dung SRAM và thanh ghi, dòng tiêu thụ giảm còn khoảng 14–24 µA tùy thuộc vào chế độ của bộ điều áp; thời gian đánh thức dao động từ 3.5 đến 7.2 µs.
- Standby mode: Tắt toàn bộ mạch điều áp nội, bộ dao động HSI và HSE; dòng tiêu thụ chỉ còn 2 µA, thời gian đánh thức là 50 µs thông qua các sự kiện ngắt RTC, chân Reset hoặc xung cạnh lên trên chân
WKUP (PA0).
5. Sự khác biệt giữa hai khối Watchdog (WWDG và IWDG) tích hợp trên vi điều khiển STM32 là gì?
- Windowed Watchdog (WWDG): Thuộc hệ thống chính, cấp xung từ bus APB1 (PCLK1) qua bộ chia 12-bit, hoạt động bằng bộ đếm lùi 6-bit. WWDG bắt buộc phần mềm phải làm tươi trong một cửa sổ thời gian xác định (nếu làm tươi quá sớm hoặc quá muộn sẽ kích hoạt Reset hệ thống).
- Independent Watchdog (IWDG): Hoàn toàn độc lập với hệ thống chính, nằm trong miền điện áp riêng và sử dụng nguồn xung nhịp từ bộ dao động nội tốc độ thấp (LSI tần số danh định 32–40 kHz), cho phép tiếp tục giám sát và reset hệ thống ngay cả khi khối tạo xung chính bị treo hoặc chip rơi vào chế độ Stop/Standby.
Kết luận
Báo cáo thực tập tốt nghiệp đã tổng hợp hệ thống hóa cơ sở lý thuyết về kiến trúc 32-bit ARM Cortex-M3 và các đặc tính phần cứng, ngoại vi, quản lý công suất của dòng vi điều khiển STM32. Trên cơ sở đó, tác giả đã làm chủ quy trình phát triển nhúng bằng công cụ STM32CubeMX và môi trường Keil MDK-ARM, triển khai thành công 5 bài thực nghiệm điều khiển ngoại vi (GPIO, Timer ngắt, LCD 1602 chế độ 4-bit và quét LED 7 thanh 4 số) trên KIT phát triển STM32F103C8T6. Kết quả nghiên cứu tạo nền tảng lý thuyết và thực hành vững chắc để tiếp tục mở rộng phát triển các hệ thống nhúng điều khiển tự động hóa chuyên sâu trong đồ án tốt nghiệp chính thức.