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

Mastering Microcontroller and Embedded Driver Development

Làm chủ phát triển vi điều khiển và trình điều khiển nhúng

Làm chủ phát triển vi điều khiển và trình điều khiển nhúng

(MCU1) Học phát triển trình điều khiển bare metal bằng Embedded C: Viết driver cho STM32 GPIO, I2C, SPI, USART từ đầu

4.6
(12,843 đánh giá)
78,833 học viên
Phụ đề Việt chất lượng cao Phụ đề tiếng Anh Bán chạy Đánh giá cao
50.000đ 349.000đ -86%
✓ Xem giỏ hàng và thanh toán
Bao gồm phụ đề tiếng Việt, tiếng Anh
28.5 giờ video
536 bài giảng
20 bài quiz
Truy cập vĩnh viễn
Học trên mọi thiết bị
Cập nhật: 13/08/2026

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

Hiểu cách xử lý và lập trình ngoại vi MCU đúng chuẩn
Phát triển driver ngoại vi cho vi điều khiển của bạn
Hiểu toàn bộ các bước phát triển Driver từ đầu cho GPIO, SPI, I2C và USART
Học cách viết header driver ngoại vi, tạo nguyên mẫu API và triển khai
Khám phá datasheet MCU, tài liệu tham khảo, mã khởi động để hoàn thành công việc
Học cách xử lý/cấu hình ngắt đúng chuẩn cho các ngoại vi khác nhau
Tìm hiểu về IRQ ngoại vi, bảng vector, giao diện NVIC và nhiều hơn nữa
Tìm hiểu về thanh ghi cấu hình, trạng thái và điều khiển của các ngoại vi
Giải mã các chi tiết hoạt động ẩn sau SPI, I2C, GPIO, USART, v.v.
Khám phá bí mật của giao diện bus MCU, nguồn xung nhịp, cấu hình clock MCU, v.v.
Hiểu cách kích hoạt/cấu hình clock ngoại vi, clock nối tiếp, tốc độ baud của các giao thức nối tiếp
Tìm hiểu về giao thức bus AHB, APB của MCU
Tìm hiểu về các loại clock MCU như HCLK, PCLK, PLL, v.v.
Học cách ghi nhận, giải mã, phân tích tín hiệu của giao thức nối tiếp trên Logic analyzer
Tìm hiểu cách debug nhanh các vấn đề ngoại vi qua các case study

Yêu cầu

Kiến thức cơ bản về lập trình C
Nếu bạn hoàn toàn mới với MCU và ngôn ngữ C, hãy hoàn thành khóa "Embedded C" cho người mới bắt đầu trước

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

Chuyên gia muốn khám phá hệ thống nhúng
Người đam mê và sinh viên muốn bắt đầu sự nghiệp trong lĩnh vực nhúng
Nếu bạn nghĩ về 'embedded', hãy nghĩ đến việc tham gia khóa này. Bạn sẽ không thất vọng
Khóa học này có thể không phù hợp với những ai muốn tạo mẫu nhanh bằng board như Arduino

Nội dung khóa học

76 phần • 278 bài giảng
1 Về giảng viên
2 Lưu ý quan trọng
3 Khóa học này nói về điều gì?
4 Mã nguồn và Slide
5 Đánh giá và nhận xét
1 Về board phát triển MCU
1 Yêu cầu phần cứng/phần mềm
1 Tải STM32CubeIDE
2 Cài đặt - Windows
3 Cài đặt - Ubuntu
4 Mục tiêu nhúng
5 Tài liệu cần thiết
1 Tạo dự án Hello-World
2 Nguyên lý hoạt động của SWV
3 Kiểm tra Hello-World qua SWV
4 Sử dụng OpenOCD và Semihosting để dùng printf
1 Tùy chọn debug
2 Single stepping
3 Cửa sổ Disassembly và Register
4 Breakpoints
5 Cửa sổ Expression và variable
6 Cửa sổ Memory browser
7 Call stack và fault analyzers
8 Data watch-points
9 Cửa sổ SFR
10 Các tính năng cơ bản khác của IDE
1 Hiểu bản đồ bộ nhớ MCU: Phần 1
2 Hiểu bản đồ bộ nhớ MCU: Phần 2
3 Hiểu bản đồ bộ nhớ MCU: Phần 3
1 Giải thích giao diện Bus MCU Phần 1: I-Code/D-Code/S-Bus
2 Giải thích giao diện Bus MCU Phần 2: AHB/APB1/APB2
3 Giải thích giao diện Bus MCU Phần 3: Hỏi đáp
4 Hiểu về Bus Matrix của MCU
1 Hiểu hệ thống Clock MCU: Phần 1
1 Hiểu nguồn clock MCU và HSE
2 HSI và các thanh ghi RCC
3 Cấu hình clock ngoại vi
4 Bài tập: Đo lường HSI
5 Về USB logic analyzer
6 Triển khai code
7 Bài tập: Đo lường HSE
1 Hiểu bảng Vector MCU
1 Hiểu thiết kế ngắt MCU, NVIC, xử lý ngắt: Phần 1
2 Hiểu thiết kế ngắt MCU, NVIC, xử lý ngắt: Phần 2
3 Hiểu thiết kế ngắt MCU, NVIC, xử lý ngắt: Phần 3
1 Tầm quan trọng của từ khóa "Volatile": Phần 1
2 Tầm quan trọng của từ khóa "Volatile": Phần 2
1 Chân GPIO và cổng GPIO
2 Bên trong hoạt động của GPIO
3 Chế độ input GPIO với trạng thái trở kháng cao
4 Chế độ input GPIO với trạng thái pull-up/pull-down
5 Chế độ output GPIO với trạng thái open drain
6 Chế độ output GPIO với trạng thái push pull
7 Tối ưu hóa mức tiêu thụ điện I/O
1 Cấu trúc lập trình GPIO
2 Khám phá PORT và chân GPIO trên board STM32F4xx Discovery
3 Thanh ghi Mode GPIO (dùng để thiết lập chế độ cho chân)
4 Cấu hình Input cho chân GPIO của vi điều khiển
5 Cấu hình Output cho chân GPIO ở chế độ Push pull
6 Cấu hình Output cho chân GPIO ở chế độ Open drain
7 Tầng Input của chân GPIO trong cấu hình output
8 Cấu hình chức năng Alternate cho chân GPIO
9 Giải thích thanh ghi loại output GPIO
1 Thanh ghi tốc độ output GPIO và ứng dụng của nó
2 Thanh ghi Pull up và Pull down GPIO
3 Thanh ghi dữ liệu input GPIO
4 Thanh ghi dữ liệu output GPIO và tóm tắt các chế độ đã thảo luận
1 Cài đặt chức năng Alternate cho chân GPIO với ví dụ: Phần 1
2 Cài đặt chức năng Alternate cho chân GPIO với ví dụ: Phần 1
3 Yêu cầu đánh giá
1 Bật và tắt clock ngoại vi GPIO
1 Tổng quan phát triển driver GPIO
2 File header đặc thù MCU và nội dung của nó
3 Tạo dự án mới và tạo file header đặc thù MCU
4 Cài đặt đường dẫn include
5 Lưu ý quan trọng về cách sử dụng IDE
1 Viết macro C địa chỉ cơ sở cho bộ nhớ nhúng của MCU: Phần 1
2 Viết macro C địa chỉ cơ sở cho bộ nhớ nhúng của MCU: Phần 2
3 Định nghĩa địa chỉ cơ sở của các bus domain khác nhau
4 Định nghĩa địa chỉ cơ sở của ngoại vi AHB1
5 Định nghĩa địa chỉ cơ sở của ngoại vi APB1 và APB2
6 Kết luận định nghĩa địa chỉ cơ sở
1 Địa chỉ của các thanh ghi ngoại vi
2 Cấu trúc hóa các thanh ghi ngoại vi
3 Macro định nghĩa ngoại vi
1 Viết macro C bật và tắt clock ngoại vi
2 Cài đặt include dự án và build
1 Tạo file header và source cho driver GPIO
2 Định nghĩa cấu trúc handle và cấu hình GPIO
3 Yêu cầu driver API và thêm nguyên mẫu API
4 Tham số đầu vào và kiểu trả về của driver API
5 Triển khai API rỗng và tài liệu cho driver
1 Triển khai API điều khiển clock ngoại vi GPIO
1 Viết macro có thể cấu hình bởi người dùng
2 Triển khai API khởi tạo GPIO
3 Triển khai API khởi tạo GPIO (tiếp)
4 Cấu hình thanh ghi chức năng Alternate
5 Triển khai API hủy khởi tạo GPIO
1 Triển khai API đọc cổng input và đọc chân input GPIO
2 Triển khai API ghi cổng output và ghi chân output GPIO
3 Triển khai API đảo trạng thái chân GPIO
1 Bài tập: Đảo trạng thái LED với cấu hình PUSH PULL
2 Bài tập: Đảo trạng thái LED với cấu hình OPEN DRAIN
3 Bài tập: Xử lý LED và nút nhấn trên board
4 Bài tập: Kết nối nút nhấn ngoài và giải thích mạch
5 Bài tập: Kiểm tra giao diện nút nhấn
6 Bài tập: Giới thiệu ngắt nút nhấn
1 Lập trình cấu hình ngắt chân GPIO: Phần 1
2 Lập trình cấu hình ngắt chân GPIO: Phần 2
3 Lập trình cấu hình ngắt chân GPIO: Phần 3
4 Lập trình cấu hình ngắt chân GPIO: Phần 4
5 Lập trình cấu hình ngắt chân GPIO: Phần 5
6 Lập trình cấu hình ngắt chân GPIO: Phần 6
7 Lập trình cấu hình ngắt chân GPIO: Phần 7
1 Bài tập: Triển khai ngắt nút nhấn ngoài
2 Bài tập: Debug ứng dụng: Phần 1
3 Bài tập: Debug ứng dụng: Phần 2
1 Thông số chân STM32
2 Đặc tính dòng điện chân
3 Mức logic
1 Giới thiệu về Bus SPI
2 So sánh SPI với các giao thức khác
3 Tầm quan trọng của chân SPI slave select
4 Cấu hình bus SPI tối thiểu
5 Nguyên lý giao tiếp dữ liệu ẩn sau SPI
1 Thảo luận cấu hình bus SPI: full duplex, half duplex và simplex
2 Giải thích sơ đồ khối chức năng SPI
1 Cài đặt NSS trong chế độ master và slave STM32
2 Quản lý slave SPI bằng phần cứng và phần mềm trên STM32
1 Thảo luận về SPI CPOL và CPHA
2 Ví dụ dạng sóng SPI CPOL và CPHA
1 Các ngoại vi SPI trên vi điều khiển của bạn
2 Tần số clock nối tiếp SPI
1 Yêu cầu API SPI và các mục cấu hình
2 Cập nhật file header đặc thù MCU với chi tiết liên quan SPI
3 SPI - Thêm nguyên mẫu API vào file header driver
1 Triển khai API điều khiển clock ngoại vi SPI
1 Viết tùy chọn cấu hình người dùng SPI và macro định nghĩa bit thanh ghi
2 Triển khai API khởi tạo SPI: Phần 1
3 Triển khai API khởi tạo SPI : Phần 2
1 Triển khai API gửi dữ liệu SPI : Phần 1
2 Triển khai API gửi dữ liệu SPI : Phần 2
3 Triển khai API gửi dữ liệu SPI : Phần 3
4 Triển khai API gửi dữ liệu SPI : Phần 4
1 Bài tập kiểm tra API Gửi Dữ liệu SPI
2 Tìm chân vi điều khiển để giao tiếp qua SPI2
3 Bài tập : Triển khai code : Phần 1
4 Bài tập : Triển khai code : Phần 2
5 Bài tập : Triển khai code : Phần 3
6 Bài tập : Kiểm thử
1 Bài tập : Giao tiếp với Arduino slave
2 Bài tập : Viết code Phần 1
3 Bài tập : Viết code Phần 2
4 Bài tập : Viết code Phần 3
5 Bài tập : Kiểm thử
1 Triển khai API nhận dữ liệu SPI : Phần 1
2 Triển khai API nhận dữ liệu SPI : Phần 2
1 Bài tập : Giao tiếp dựa trên lệnh và phản hồi SPI
2 Bài tập : Viết code Phần 1
3 Bài tập : Viết code Phần 2
4 Bài tập : Viết code Phần 3
1 Ngoại vi SPI ngắt bộ xử lý
1 Triển khai API chế độ ngắt SPI và thay đổi cấu trúc xử lý
2 Triển khai API gửi dữ liệu SPI với ngắt
3 Triển khai nhận dữ liệu SPI với ngắt
1 SPI : Xử lý ngắt
2 Triển khai trình xử lý IRQ SPI : Phần 1
3 Triển khai trình xử lý IRQ SPI : Phần 2
4 Triển khai trình xử lý IRQ SPI : Phần 3
5 Bài tập
1 Các vấn đề thường gặp trong SPI và Mẹo Gỡ lỗi
1 Giới thiệu I2C và sự khác biệt với SPI
2 Tín hiệu I2C SDA và SCL
1 Chế độ chuẩn và nhanh của I2C
1 Giải thích Giao thức I2C
2 Điều kiện START và STOP trong I2C
3 I2C ACK và NACK
4 Tính hợp lệ dữ liệu I2C
1 Ví dụ master ghi dữ liệu cho slave
2 Hiểu điều kiện START lặp lại
1 Sơ đồ khối chức năng I2C
1 Yêu cầu API driver I2C
2 Cấu trúc xử lý và cấu hình I2C
3 Macro có thể cấu hình bởi người dùng cho I2C
4 Nguyên mẫu API I2C
5 Các bước triển khai khởi tạo I2C
1 Cài đặt xung nhịp nối tiếp I2C với giải thích
2 Kéo dài xung nhịp (Clock Stretching)
1 Triển khai API khởi tạo I2C : Phần 1
2 Triển khai API khởi tạo I2C : Phần 2
3 Triển khai API khởi tạo I2C : Phần 3
1 Biểu đồ trình tự truyền I2C cho master gửi dữ liệu
2 Triển khai API master I2C gửi dữ liệu : Phần 1
3 Triển khai API master I2C gửi dữ liệu : Phần 2
4 Triển khai API master I2C gửi dữ liệu : Phần 3
5 Triển khai API master I2C gửi dữ liệu : Phần 4
6 Triển khai API master I2C gửi dữ liệu : Phần 5
1 Thảo luận về điện trở kéo lên, thời gian tăng và điện dung bus I2C
2 Tính toán thời gian tăng I2C
1 Bài tập : Giới thiệu
2 Bài tập : Viết code Phần 1
3 Bài tập : Viết code Phần 2
4 Bài tập : Kiểm thử
1 Biểu đồ trình tự truyền I2C cho master nhận dữ liệu
2 Bài tập : Triển khai API master I2C nhận dữ liệu
3 Triển khai API master I2C nhận dữ liệu : Phần 1
4 Triển khai API master I2C nhận dữ liệu : Phần 2
1 Bài tập : Đọc dữ liệu từ slave I2C
2 Bài tập : Viết code Phần 1
3 Bài tập : Viết code Phần 2
4 Bài tập : Viết code Phần 3
5 Bài tập : Kiểm thử START lặp lại
1 Thảo luận về IRQ và ngắt I2C
2 Lỗi I2C và tầm quan trọng của cờ BUSY
3 Sửa đổi cấu trúc xử lý I2C
4 Thêm macro và API ngắt liên quan cho I2C
1 Bài tập : Triển khai API ngắt I2C
2 Triển khai API dựa trên ngắt I2C
1 Triển khai trình xử lý IRQ I2C Phần 1
2 Triển khai trình xử lý IRQ I2C Phần 2
3 Triển khai trình xử lý IRQ I2C Phần 3
4 Triển khai trình xử lý IRQ I2C Phần 4
5 Triển khai trình xử lý IRQ I2C Phần 5
6 Triển khai trình xử lý IRQ I2C Phần 6
7 Triển khai trình xử lý IRQ I2C Phần 7
8 Triển khai trình xử lý IRQ I2C Phần 8
9 Triển khai trình xử lý IRQ lỗi I2C
1 Bài tập : Kiểm thử API ngắt I2C phần 1
2 Bài tập : Kiểm thử API ngắt I2C phần 2
1 Thảo luận về lập trình I2C slave
2 Biểu đồ trình tự truyền I2C cho slave transmitter
3 Hỗ trợ I2C slave trong driver
1 Bài tập : Lập trình I2C slave
2 Bài tập : Viết code Phần 1
3 Bài tập : Kiểm thử
4 Bài tập : Sửa đổi giao dịch I2C
1 Các vấn đề thường gặp trong I2C và Mẹo Gỡ lỗi
1 Giới thiệu UART vs USART
2 Tìm hiểu các chân UART
3 Định dạng khung UART
4 Tốc độ Baud
5 Các bit đồng bộ
6 Parity UART
1 Khám phá khối chức năng UART
2 Xung nhịp ngoại vi UART
1 Bộ phát UART
2 Bộ thu UART
1 Các mục có thể cấu hình khi phát triển driver USART
2 Nguyên mẫu API driver USART
3 Tùy chọn cấu hình và thanh ghi USART
4 API Driver USART : Khởi tạo USART
5 API Driver USART : Bài tập Tx và Rx
6 API Driver USART : Gửi dữ liệu
1 Lấy mẫu quá mức USART
2 Tính toán tốc độ Baud USART Phần-2
3 Tính toán tốc độ Baud USART Phần-2
4 Viết code tốc độ baud USART
1 Bài tập : USART gửi dữ liệu tới arduino
2 Giao tiếp với PC qua UART
1 Thảo luận về ngắt USART
2 Bài tập
3 Triển khai trình xử lý IRQ USART : Bài tập
1 Đồng hồ thời gian thực trên LCD
2 Các thanh ghi RTC DS1307
3 Triển khai code RTC
4 Viết code RTC để đặt thời gian và ngày
5 Viết code RTC để lấy thời gian và ngày
6 Các hàm thao tác BCD và Binary
7 Viết ứng dụng RTC
8 RTC và Systick
9 Kết nối LCD
10 Ý nghĩa các chân LCD
11 Khởi tạo LCD
12 Lưu đồ khởi tạo LCD
13 Gửi lệnh và dữ liệu tới LCD
14 Tạo mã lệnh LCD
15 Kiểm thử
1 BÀI GIẢNG BỔ SUNG

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

>> Your Search for an in-depth microcontroller programming course ends here !!<<<

Course code: MCU1

Learn bare-metal driver development using Embedded C : Writing drivers for STM32 GPIO,I2C, SPI,USART from scratch

English Subtitles/CCs are enabled for this course.

Update 6: videos are updated with the latest STM32CUBEIDE

Update 5: All drivers are developed in a live session with step-by-step coding and added stm32-Arduino communication exercises using SPI and I2C.

Update 4: Dedicated support team is assigned to address student's Q/A

Update 3: English Closed captions are fixed

Update 2  : Added Bus matrix / memory map /vector table /interrupt design discussion with code examples.

Update 1: Eclipse IDE setup for ARM Cortex M based MCUs added


The course is designed for beginners to advanced audiences.


Brief Description:

This course Demystifies the internal working of the Microcontroller and its Peripherals.

Coding for the Peripherals STEP-BY-STEP and Developing software drivers entirely from scratch by extracting maximum information from Datasheets, Reference manuals, specs, etc

Protocol Decoding Using logic analyzers, Debugging, Testing along with Hints and Tips.


Long Description:

Learning Embedded System Programming can be a challenge. Since it's a relatively complex field, there's no actual gold standard yet for how things are practiced, or taught, which can frustrate people who are just trying to learn new things and couldn't connect the dots.

This is the motivation behind creating this course to help engineers and students learn different aspects of embedded systems by providing high-quality advanced lectures at a relatively low price.


Master Behind the Scene working;

created this course because I believe your time is precious, and you shouldn't have to hunt around to get a practical foundation In Embedded System Programming. In this course, you will learn to write your peripheral driver for most commonly used peripherals such as GPIOs, I2C, SPI, USART, etc., and the exciting thing is that you will learn everything from scratch.

No 3rd party libraries!

No blind coding!

Write your driver APIs by dealing with the peripheral registers of the MCU!

Code and Implement APIs from scratch, diving into the datasheet and reference manual of the MCU. I will thoroughly explain how to extract the maximum information from datasheets, Technical Reference manuals to configure and handle peripherals. These techniques you can go and apply to any MCUs you have at your hand.

In this course, I will walk you through step-by-step procedures on configuring various Peripherals like GPIOs, SPI, USART, I2C by taking you into the reference manual and datasheet. We will develop a fully working driver code, interrupt handlers, sample application everything from scratch to understand the big picture.

In each lecture, I assure you that you will learn something new to use in your work or projects. You'll find yourself handling these peripherals with much more clarity. You will be able to speculate and debug the problem quickly. I'll show you tricks and tips to debug the most common issues using debugging tools such as logic analyzers.


This is not the Arduino style of programming:

I believe Arduino is for quick prototyping of projects/products but not for mastering the working of micro-controllers and their peripherals. Unlike Arduino programming, where you develop a quick solution and prototyping of products using third-party libraries, this course is entirely different. In this course, no 3rd party libraries are used. Everything we will code by referring to the technical reference manual of the MCU and will create our own library. The Power of this approach is that you can quickly speculate problems and debug like a pro when things go wrong in your project due to bugs. If one thing me and my students are good at is "debugging,." To achieve good debugging skills, it's essential to code by understanding how things work behind the scene but not by blindly using some third-party libraries, and that's the biggest TAKE away from this course.

The course is designed and explained so that it is generic across any microcontroller. The code we develop can be used as templates to quickly build a peripheral driver for your MCUs on-chip peripherals.


Software/Hardware used:

In this course, the code is developed so that it can be ported to any MCU you have at your hand. If you need any help porting these codes to different MCUs, you can always reach out to me! The course is strictly not bound to any 1 type of MCU. So, if you already have any Development board that runs with an ARM-Cortex M3/M4 processor, I recommend you continue using it. But if you don't have any development boards, then check out the below Development boards.


1. STM32F407xx based Discovery board ( This is the board used in this course)

MCU Vendor: STMicroelectronics


IDE: STM32CUBEIDE (Free)


My promise:

I am confident that this course will save you many hours of studying/experimenting/googling time to learn about MCU programming. I will personally answer your questions about this material, either privately or in a group discussion. If you are not satisfied, for any reason, you can get a full refund from Udemy within 30 days. No questions asked. But I am confident you won't need to. I stand behind this course 100% and am committed to helping you.


Learning order of FastBit Embedded Brain Academy Courses,

If you are a beginner in the field of embedded systems, then you can take our courses in the below-mentioned order.

This is just a recommendation from the instructor for beginners.

1) Microcontroller Embedded C Programming: absolute beginners(Embedded C)

2) Embedded Systems Programming on ARM Cortex-M3/M4 Processor(ARM Cortex M4 Processor specific)

3) Mastering Microcontroller with Embedded Driver Development(MCU1)

4) Mastering Microcontroller: TIMERS, PWM, CAN, RTC,LOW POWER(MCU2)

5) Mastering Microcontroller: STM32-LTDC, LCD-TFT, LVGL(MCU3)

6) Embedded System Design using UML State Machines(State machine)

7) Mastering RTOS: Hands-on FreeRTOS and STM32Fx with Debugging(RTOS)

8) ARM Cortex M Microcontroller DMA Programming Demystified(DMA)

9) STM32Fx Microcontroller Custom Bootloader Development(Bootloader)

10) Embedded Linux Step by Step using Beaglebone Black(Linux)

11) Linux device driver programming using Beaglebone Black(LDD1)

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 😊