Ưu đãi trong tuần: Nhập mã UD50 giảm 50k cho đơn từ 300k!
Trang chủ
Menu

Embedded Systems Bare-Metal Programming Ground Up™ (STM32)

Lập trình Embedded Systems Bare-Metal từ nền tảng (STM32)

Lập trình Embedded Systems Bare-Metal từ nền tảng (STM32)

Không dùng thư viện có sẵn, tuân thủ chuẩn CMSIS chuyên nghiệp, ARM Cortex, ADC, UART, TIMERS, DMA, SPI, I2C, RTC, GPIO, v.v.

4.5
(3,629 đánh giá)
22,451 học viên
Giảng viên
Israel Gbati
Phụ đề Việt chất lượng cao Phụ đề tiếng Anh Bán chạy Đánh giá cao
50.000đ 419.000đ -88%
✓ Xem giỏ hàng và thanh toán
Bao gồm phụ đề tiếng Việt, tiếng Anh
24.5 giờ video
136 bài giảng
Truy cập vĩnh viễn
Học trên mọi thiết bị
Cập nhật: 30/08/2026

Bạn sẽ học được gì

Viết firmware chỉ bằng embedded-c thuần (bare-metal)
Hiểu rõ kiến trúc Cortex-M
Viết driver ADC (Analog-to-Digital Converter) bằng embedded-c thuần
Viết driver PWM bằng embedded-c thuần
Viết driver UART bằng embedded-c thuần
Viết driver TIMER bằng embedded-c thuần
Viết driver ngắt (Interrupt) bằng embedded-c thuần
Viết driver SPI bằng embedded-c thuần
Viết driver I2C bằng embedded-c thuần
Thành thạo chuẩn ARM-Cortex CMSIS
Viết driver DMA bằng embedded-c thuần
Tự xây dựng từng dòng code từ đầu bằng cách ghi trực tiếp vào vùng nhớ vi điều khiển
Không sử dụng thư viện bên thứ ba hay file header có sẵn
Hiểu và tự viết từng dòng code - không Copy/Paste
Sử dụng debugger hiệu quả để phân tích và sửa lỗi
Nâng cao kỹ năng phát triển embedded và tự tin bước tiếp
Định nghĩa địa chỉ cho các ngoại vi khác nhau
Phân tích tài liệu kỹ thuật của chip
Tạo thanh ghi (registers) từ địa chỉ

Yêu cầu

Không cần kinh nghiệm lập trình trước - Tôi sẽ dạy bạn mọi thứ cần biết
Chúng ta sẽ dùng STM32 IDE miễn phí

Đối tượng phù hợp

Nếu bạn hoàn toàn mới với embedded systems, hãy tham gia khóa học này
Nếu bạn là lập trình viên embedded có kinh nghiệm và muốn học cách phát triển ứng dụng chuyên nghiệp cho vi xử lý ARM, hãy tham gia khóa học này

Nội dung khóa học

25 phần • 136 bài giảng
1 Tải về Môi trường phát triển tích hợp (IDE)
2 Cài đặt Môi trường phát triển tích hợp (IDE)
3 Lấy tài liệu phù hợp cho phát triển Bare-Metal
4 Lập trình: Xác định vị trí Port và Pin của linh kiện trên board Nucleo
5 Lập trình: Định nghĩa địa chỉ module dựa trên thông tin từ tài liệu
6 Lập trình: Tạo thanh ghi cần thiết từ thông tin tài liệu
7 Lập trình: Cấu hình Pin bằng thanh ghi đã tạo
8 Lập trình: Tạo thanh ghi từ thành phần cấu trúc (Structure Members)
9 Thông báo
1 Tổng quan về module GPIO trên ARM Cortex-M
2 Lập trình: Phát triển driver GPIO Output
3 Lập trình: Điều khiển GPIO Output bằng thanh ghi BSRR (Bit Set/Reset Register)
4 Lập trình: Phát triển driver GPIO Input
1 Tổng quan về giao thức UART
2 Lập trình: Phát triển driver UART Transmitter
3 Lập trình: Kiểm thử driver UART Transmitter
4 Lập trình: Chuyển hướng (Retarget) printf
5 Lập trình: Tối ưu driver theo hướng module hóa
6 Lập trình: Phát triển driver UART Receiver
7 Lập trình: Kiểm thử driver UART Receiver
1 Giới thiệu về chuyển đổi tương tự sang số
2 Hiểu các chế độ ADC độc lập
3 Lập trình: Phát triển driver ADC chế độ chuyển đổi đơn
4 Lập trình: Phát triển driver ADC chế độ chuyển đổi liên tục
1 Tổng quan về bộ định thời System Tick
2 Lập trình: Phát triển driver System Tick Timer
1 Tổng quan về bộ định thời đa năng
2 Các thanh ghi Timer thường dùng
3 Lập trình: Phát triển driver General Purpose Timer
4 Lập trình: Phát triển driver Timer Output Compare
5 Lập trình: Phát triển driver Timer Input Capture
1 Giới thiệu về ngắt (Interrupts)
2 Lập trình: Phát triển driver ngắt GPIO
3 Lập trình: Kiểm thử driver ngắt GPIO
4 Lập trình: Phát triển driver ngắt UART Receiver
5 Lập trình: Phát triển driver ngắt ADC
6 Lập trình: Phát triển driver ngắt Systick
7 Lập trình: Phát triển driver ngắt Timer
1 Tổng quan về module DMA
2 Lập trình: Phát triển driver UART Transmitter DMA Phần 1
3 Lập trình: Phát triển driver UART Transmitter DMA Phần 2
4 Lập trình: Kiểm thử driver UART Transmitter DMA
1 Giới thiệu về I2C
2 Lập trình: Triển khai hàm khởi tạo I2C (Init function)
3 Lập trình: Triển khai hàm đọc byte I2C (Byte Read function)
4 Lập trình: Triển khai hàm đọc cụm I2C (Burst Read function)
5 Lập trình: Triển khai hàm ghi cụm I2C (Burst Write function)
6 Lập trình: Cấu hình cảm biến gia tốc ADXL345 bằng driver I2C
7 Lập trình: Kiểm thử cảm biến gia tốc ADXL345 bằng driver I2C
1 Giới thiệu về SPI
2 Lập trình: Triển khai hàm khởi tạo GPIO cho SPI
3 Lập trình: Cấu hình thông số SPI
4 Lập trình: Triển khai truyền dữ liệu SPI (SPI Transmit)
5 Lập trình: Triển khai nhận dữ liệu SPI (SPI Receive)
6 Lập trình: Cấu hình cảm biến gia tốc ADXL345 bằng driver SPI
7 Lập trình: Kiểm thử driver ADXL345 của chúng ta
1 Giới thiệu
1 Tải Keil uVision 5
2 Cài đặt Keil uVision 5
3 Thông báo
4 Cài đặt gói (Packs)
5 Thay đổi trình biên dịch (Compiler)
1 Tổng quan về module GPIO trên ARM Cortex-M
2 Lập trình: Phát triển driver GPIO dùng thông tin từ datasheet
3 Hiểu thanh ghi BSRR
4 Lập trình: Điều khiển GPIO bằng thanh ghi BSRR
5 Lập trình: Đọc tín hiệu đầu vào GPIO
6 Thông báo
1 Thông báo
2 Lập trình: Viết driver GPIO từ đầu (PHẦN I)
3 Lập trình: Viết driver GPIO từ đầu (PHẦN II)
1 Tổng quan về giao thức UART
2 Các thanh ghi UART thường dùng
3 Lập trình: Phát triển driver UART dùng thông tin từ datasheet
4 Thảo luận thêm về cấu hình chức năng thay thế (Alternate Function) UART
5 Lập trình: Nhận dữ liệu với UART
6 Lập trình: Giao tiếp UART hai chiều
1 Tổng quan về bộ định thời System Tick
2 Tổng quan về bộ định thời đa năng
3 Các thanh ghi Timer thường dùng
4 Lập trình: Phát triển driver System Tick Timer
5 Thảo luận thêm về thanh ghi System Tick
6 Lập trình: Tạo hàm Delay dùng System Tick Timer
7 Lập trình: Phát triển driver General Purpose Timer (GPTM)
8 Lập trình: Cấu hình General Purpose Timer cho chế độ Output Compare
9 Lập trình: Cấu hình General Purpose Timer cho chế độ Input Capture
10 Lập trình: Đo tần số bằng Input Capture
11 Lập trình: Cấu hình General Purpose Timer cho đầu ra PWM
1 Giới thiệu về ngắt (Interrupts)
2 Hiểu về ngắt ngoài (External Interrupts)
3 Lập trình: Phát triển driver ngắt GPIO
4 Lập trình: Làm việc với nhiều ngắt GPIO cùng lúc
5 Lập trình: Phát triển driver ngắt UART
6 Lập trình: Phát triển driver ngắt System Tick
7 Lập trình: Phát triển driver ngắt General Purpose Timer
1 Giới thiệu về chuyển đổi tương tự sang số
2 Lập trình: Phát triển driver ADC
3 Lập trình: Đọc nhiệt độ CPU bằng ADC và hiển thị qua UART
1 Lập trình: Phát triển driver LCD
2 Lập trình: Cấu hình LCD cho chế độ dữ liệu 4-bit
1 Giới thiệu về I2C
2 Phân tích đồng hồ thời gian thực DS1307
3 Lập trình: Phát triển driver I2C
1 Giới thiệu về SPI
2 Lập trình: Phát triển driver SPI đơn giản
3 Lập trình: Phát triển driver SPI cho màn hình LCD đồ họa ST7735 (Phần I)
4 Lập trình: Phát triển driver SPI cho màn hình LCD đồ họa ST7735 (Phần II)
5 Lập trình: Phát triển driver SPI cho màn hình LCD đồ họa ST7735 (Phần III)
6 Lập trình: Phát triển driver SPI cho màn hình LCD đồ họa ST7735 (Phần IV)
1 Triết lý thiết kế RISC
2 Triết lý thiết kế ARM
3 Hệ thống nhúng với vi xử lý ARM
4 Công nghệ bus ARM và giao thức bus AMBA
5 Bộ nhớ (Memory)
6 Ngoại vi (Peripherals)
7 Kiến trúc Von Neumann và Harvard
8 Bộ nhớ đệm (Cache) và bộ nhớ ghép chặt (Tightly Couple Memory)
9 Phần mở rộng quản lý bộ nhớ (Memory Management extensions)
10 Phần mở rộng đồng xử lý (Cooprocessor extensions)
1 Kiểu dữ liệu (Data Types)
2 Chế độ xử lý (Processor Modes)
3 Thanh ghi ARM7TDMI
4 Bảng vector ARM7TDMI
5 Thanh ghi ARM Cortex-M
6 Bảng vector ARM Cortex-M
7 Mô hình luồng dữ liệu ARM (ARM Data Flow Model)
8 Pipeline
9 Họ vi xử lý ARM
10 ARM Cortex-A và Cortex-R
11 ARM Cortex-M
1 Tải CubeIDE
2 Thiết lập STM32CubeIDE
3 Thông báo nhanh
4 Cài đặt gói (Packages)
5 Tổng quan
1 Lời kết

Giới thiệu khóa học

Are you tired of Copying and Pasting code you don't understand?


With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for  ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right  information to professionally  build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely bare-metal embedded-c and register manipulations.

Still keeping it simple, this course comes in different ARM Cortex-M development boards  so that students can put the techniques to practice using an ARM Cortex-M development board of their choice. This version of the course uses the STMicroelectronics  STM32F4-NUCLEO which has an ARM Cortex-M4 microcontoller.


So with that understood, let me tell you…


                                                                                     Exactly What You’re Getting

This is dramatically different from any course you have ever taken because it’s more of a professional hands-on “field guide” to stm32 bare metal firmware development.
The reason why is because there’s no fluff or filler. It immediately gets down to the actual subject, showing you exactly what to do, how to do it, and why.

Plus, it’s easy.

And you’ll immediately “get” the entire mythology I personally use to build firmware for consumer devices in my professional life.

                                                                     

                                                                         It's About MORE Than Just Getting the Code to Work

See, this course will change your professional life forever. Here is what one student had to say about the course :


  "I would suggest this course for all the beginners. The concepts have been covered in the right sequence.And also the best part of this lecture series is getting to know how to explore the reference manual and datasheets."

Here is what another student had to say :

    "Extremly helpful to get to understand the uC programming deeper! For me it is much easier from now to develop code because I undertstand the base behind, so I'm more confident and more experienced to develop and debug the code. Really, this course is very useful to link the hardware knowledge with the coding skills. This fills the gap between them. Thanks for it! :)"

A third student :

"I am a professional semiconductor chipset application engineer with 30 years in global embedded product design in system applications. I can say this teacher is very straight forward by sharing his many years knowledge to the students with his true heart. Yes. I love his teaching pace and style!"



                                                                               Taken by 8000+ Students with 1000+ Reviews

If at least one of the following applies to you then keep reading if not then simply skip this course:


" Escape From "

  1. Copying/Pasting code you don’t understand

  2. Using third party libraries and header files like HAL, LL and StdPeriph

  3. Experiencing bugs you don’t understand

  4. Being afraid of technical documentations like the reference manual and datasheet of the chip

  5. Imposter syndrome

" Arrive At "

  1. Building every single line of code from scratch by writing to the microcontroller’s memory space directly.

  2. Using No third party libraries or header files

  3. Understanding and writing every single line of code yourself- no Copy/Paste

  4. Using the debugger effectively to analyze and resolve any bugs

  5. Developing proficiency in your embedded development skills and confidently take the next steps


So like I said, there’s more than just getting each piece of code to work.

Here’s an overview of what you’re getting...

  • Analyzing the chip documentations:

    Before developing the firmware for any chip you have to learn how to read the documentation provided by the chip manufacturer.


  • Defining Peripheral address

    All components on the microcontroller have an address range. To write to a component or read from a component you need to locate its address range in the documentation and properly define the addresses in your code.


  • Creating registers from the address:

    The addresses in the address range of a component represent the registers of that component. To access these registers you have effectively typecast the addresses.


  • Understanding CMSIS:

    Cortex-Microcontroller Interface Standard (CMSIS)CMSIS is a standard developed by Arm for all Cortex-Microcontrollers. This is the standard used in professional firmware development


But it gets better because you’re also getting…


                                                         Deep Lessons on Developing Peripheral Drivers

You will learn how to develop bare-metal drivers for the following peripherals :

  • Analog-to-Digital Converter (ADC)

  • ​Serial Peripheral Interface (SPI)

  • Inter-Integrated Circuit (I2C)

  • Direct Memory Access (DMA)

  • Nested Vector Interrupt Controller (NVIC)

  • General Purpose Timers (TIM)

  • System Tick Timer (SysTick)

  • General Purpose Input/Output (GPIO)


                                                           Specially Designed For People Who Hate Copy/Paste

Listen. If you don’t like “Copy/Paste” you’re not alone. I can’t stand it either. I’d literally rather have a piece of code that I wrote from scratch that doesn’t work than someone else’s working code I copied and pasted.

And that’s why I’ve spent months designing and recording this course in which I show you how to locate every single register used and the meaning of every hexadecimal value written into the register.


Also it comes with a money back guarantee so you have nothing to loose.


Khóa học liên quan

Khám phá thêm các khoá học cùng chủ đề

Hiển thị tất cả khoá học C Language
Hiển thị tất cả khoá học Embedded Systems
Hiển thị tất cả khoá học Microcontroller Programming
Hiển thị tất cả khoá học Stm32
Zalo
Tôi có thể tư vấn khoá học cho bạn 😊