Tôi đã học Vi điều khiển như thế nào?

Một câu hỏi mà lúc đầu ai học cũng muốn hỏi, đó là tôi nên bắt đầu từ đâu?

Nếu đã có chút tìm hiểu, tôi có nên bắt đầu học nhúng với Arduino hay không? Tôi có nên bắt đầu với STM32, và nếu bắt đầu thì dùng thanh ghi hay dùng thư viện? … Rất nhiều câu hỏi, có thể tìm thấy trên các trang, nhóm, hoặc inbox trực tiếp hỏi mình.

Có thể nói câu trả lời chính xác là không có công thức chung nào cho tất cả mọi người cả, quan trọng là bạn muốn mình học được điều gì? Tùy vào định hướng của bạn thôi. Các bạn có thể xem một số định hướng tại đây! & Roadmap tại đây!

Hôm nay mình xin chia sẻ về cách mà mình bắt đầu học Vi điều khiển để các bạn tham khảo!

1. Tản mạn một chút về kiến thức nền tảng

Nói về ngành nghề nào cũng vậy, tuy cách tiếp cận kiến thức của mỗi người là khác nhau, nhưng có một điểm chung là một người học/làm thật sự tốt thì cần phải nắm được kiến thức nền tảng, đặc biệt là trong ngành IT nói chung và ngành nhúng nói riêng.

Mình là sinh viên ngành Tự động hóa, nên trên trường cũng chỉ tiếp xúc với một số môn điện tử, 1 môn lập trình C, và một môn vi xử lý (học về 8051 ASM). Nhưng mà lúc học trên trường thì mình yêu thích ngành điện (điện nặng) nên mình thường tìm những kiến thức và công việc thực tập liên quan đến ngành này. Đến năm 4 đại học, trong máy tính vẫn toàn là tài liệu Khí cụ điện, PLC, AutoCAD, năm 3 mình cũng đi thực tập ở một công ty tủ điện.

Kiến thức về Nhúng/Vi điều khiển gần như một tờ giấy trắng.

Để học được Vi điều khiển thì tất nhiên bạn cần biết về lập trình C rồi, chưa kể Assembly (một ngôn ngữ Recommend, nhưng nên học khi đã nắm vững kiến thức khác). Các kiến thức về C như Con trỏ, Struct, Union là vô cùng quan trọng khi làm việc với hệ thống nhúng. Mình cũng may mắn đọc thêm được những điều này và học từ sớm, dù lúc đó đang theo ngành điện.

2. Vậy tại sao mình học nhúng và mình đã bắt đầu như thế nào?

Thích điện vậy tại sao không đi làm điện nặng?

Nói ra thì hơi nhát, đi lắp tủ điện một lần, cắt aptomat rồi nhưng vẫn bị điện giật :))) Nên từ đó mình chọn một cô nàng an toàn hơn, đó là Vi điều khiển, điện áp dùng chỉ bằng điện áp dò ở bên kia. Nên trên trường mình đã chọn những đồ án về Vi điều khiển.

Mình bắt đầu học với con Vi điều khiển 8051, vì học môn vi xử lý trên trường biết về con này, và cũng có kiến thức về lập trình C khá tốt. Mình tìm học trên Youtube (Kênh IT-Điện tử rất đầy đủ kiến thức về con này). Học khoảng 1 đến 2 tháng để có thể hiểu khá ok về nó, tự tin làm được đồ án về nó (Nắm được kiến trúc 8051, các ngoại vi cơ bản GPIO, Timer, UART, SPI, I2C, Interrupt, … và cách viết code).

Cùng với đó, sau khi biết một chút về 8051 thì mình cũng nghịch Arduino, con này thì thời sinh viên chủ yếu là nghịch chơi và test, trên mạng nó có rất nhiều kiến thức & Examples, nghịch mấy ứng dụng nhanh nhanh lấy tinh thần.

3. Giờ có nền tảng rồi thì mình học gì để nâng cao kiến thức?

Thật sự thì khi đã có kiến thức nền tảng (tự tin là chắc chắn) thì những kiến thức cao hơn mình sẽ tìm được và học, tiếp cận cũng không quá khó.

Sau khoảng 3 tháng học về 8051, mình đã quyết định chuyển sang một dòng mới, đó là AVR (cụ thể tìm hiểu con ATmega32 & ATmega8), học 8051 rồi nên học con này khá đơn giản, lần này mình chỉ mất 1 tháng, rồi có thể làm đồ án và bài tập lớn luôn dùng nó.

Thấy nhiều bạn cứ thích nhảy ngay lên học Vi điều khiển STM32, nhưng mình thấy biết về những Vi điều khiển 8 bit này cũng khá thú vị. Đồ án tốt nghiệp mình cũng dùng ATmega32, vì con này có sẵn và các chức năng của nó là đủ dùng rồi.

Rồi cũng phải bắt nhịp với thời đại, mình cũng thử tìm hiểu STM32 như mọi người xung quanh. Có vẻ mang hành trang đầy đủ nên việc tiếp cận của mình cũng không quá khó khăn.

Lần đầu mình dùng STM32F1, thử chạy thư viện HAL GPIO. Sau thấy nó khá đơn giản, nên mình thử mò vào các thanh ghi của nó xem như nào, thực tế mình xem nội dung của thư viện HAL, sau đó mở RM ra xem các thanh ghi và mapping với nội dung các hàm trong thư viện.

Lúc học thấy cái RM (Reference Manual) của nó lớn quá, nên cũng test một số cái liên quan đến GPIO, Clock thôi. Quan trọng là học cách đọc RM, cách xử lý các thanh ghi 32-bits, để lần sau nếu như có gặp module khác thì vẫn tự làm được bằng thanh ghi.

Mình có cùng làm video trên kênh Youtube Lập trình nhúng A-Z, kênh này chia sẻ rất kỹ về mấy cái thanh ghi này.

Sau đó mình tìm hiểu về Core của dòng STM32 (Giống như thói quen khi học 8051). Lần này Core Cortex M của dòng STM32 này phổ biến hơn, tài liệu Core cũng hay và rõ ràng hơn, tuy nhiên trên mạng thì ít chia sẻ. Mình hay đọc trên chính tài liệu Core chuẩn (Cortex M Device Generic User Guide), và học một số khóa trên Udemy, khóa học trên đây khá rẻ và chất lượng so với các khóa ở Việt Nam, mặc dù tiếng anh mình lúc đó hơi kém.

Vẫn là câu chuyện kiến thức nền tảng, khi biết cách sử dụng được thanh ghi thì mình cũng tìm cách viết Driver cho nó, tức là, tìm cách xây dựng một số hàm như trong thư viện chuẩn (STD). Thư viện này cũng được dùng khá phổ biến không kém HAL. Các khóa học ở Việt Nam mình hầu như dạy HAL, còn trên Udemy cái gì cũng có luôn 😊

4. Kết luận lại

Chia sẻ tiếp thì cũng sẽ khá dài, nhưng tổng hợp lại, mình mong muốn là học điều gì thì cũng nên tiếp cận với kiến thức nền tảng, biết được công dụng và trường hợp sử dụng.

Lời khuyên của mình cho các bạn mới học (tất nhiên là sinh viên, ai muốn học gấp để đi làm thì thôi 😁), là nên bắt đầu với các dòng Vi điều khiển 8 – bit, cùng với đó là học thật tốt với C. Sau đó mới học STM32 (học về Core Cortex M, lập trình thanh ghi, thư viện thì tùy vào sở thích hoặc định hướng chỗ làm). Cũng nên tiếp cận với một số Vi điều khiển phổ biến như Arduino, ESP, các công nghệ Bluetooth, Zigbee, Wifi, … để xem thế giới ngoài kia người ta làm gì không tụt hậu mất 😁

Các bạn cũng nên trang bị cho mình chút kiến thức về điện tử, thiết kế mạch để giúp việc học tập trở nên dễ dàng hơn.

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😁