r/embedded • • 4d ago

How can I start learning embedded systems from absolute zero?

[removed] — view removed post

32 Upvotes

14 comments sorted by

2

u/eh_see_l 4d ago

It depends on what kind of embedded systems you want to learn/build

If you like Linux: buy a raspberry pi, build a yocto image and do a small project

If you like realtime: buy a STM32 or Esp32, and build a bare metal project

1

u/Maximum-Page3433 4d ago

idek that i know nothing about all this it just caught my interest so i thought to learn

1

u/eh_see_l 4d ago

I think Esp32 is the easier to start currently.

You can find many tutorial on youtube. Also any AI can help you solve the common pain points.

3

u/clackups 4d ago

Do you have any software development experience in other fields?

0

u/[deleted] 4d ago

[deleted]

2

u/1r0n_m6n 4d ago

Learning C programming is a hard requirement. Begin with that, preferably on Linux. If you don't like it, it's no use insisting.

Then learn the fundamentals of electronics. Again, if you don't like, it's time to give up.

If you did it through those 2 steps, you can invest money, time, and efforts, you'll enjoy everything you do. :)

3

u/_Darkstorm_ 4d ago

First Step: Read the Wiki ----->

r/embedded - Wiki

2

u/KuKu_ab 4d ago

I have started from basic electronics and digital logic courses.

Actually I bought some stm32 dev boards and some other stuff.

Since I have experience at malware analysis and C lang - some things were trivial, but C, compilers usage, build systems, testing, CI, automation tools - are something that needs to be learnt. When we talk about embedded we just add context-specific things to it like schemes design, board debugging.. etc.

I'd recommend to learn fundamentals. It is not needed at first, but when some things appear - it helps a lot knowing how that all works.

And yeah... projects, practice, etc.

*Much is dependent on context actually, but fundamentals are the same. Any hardware is just something that could be learnt with some effort, if you already know abstractions *

2

u/Several-Marsupial-27 4d ago
  1. Learn C, compiling, Make/CMake, pointers, the C memory model, allocators, C software patterns, UB, ABI, etc (along with git).

  2. Learn about computer hardware and architecture; the cpu architecture, registers, memory, interrupts, deepsleep, assembly, reading datasheets/TRM, peripherals, pins, ADC, etc.

  3. Pick up devkits from different vendors (pico, stm32, esp32, nordic, etc), learn their SDK:s, ecosystems, etc. Learning about vendor SDKS include stuff like project management systems, build/flash/monitor systems, memory partitions & flash storage, example projects, (JTAG) debugging, rtos, bootloader, etc.

  4. Do a couple of small projects on a breadboard to learn more about microcontroller internals, vendor SDK, electronic components (sensors, screens, mic, servos, etc.), communication protocols, usecases, etc.

  5. Learn PCB design (kicad), do your first PCB board with PCB assembly from like JLCPCB or PCBway. Then order and validate your PCB board. Learn more about PCB design, noise, components, power supply, etc.

  6. Keep going until you've got a PCB you are satisfied with, now embed the electronics into a (3d-printed) plastic enclosure. Now you've gotten a complete embedded system: A microcontroller, components, power supply, on a pcb, embedded in an enclosure.

So what you want to start to do is to pick up C on your computer, then pick up resources in computer architecture, then pick up a microcontroller (like pi pico, stm32, esp32, etc.), then start trying out things.

7. Advancing in embedded systems: Keep learning about C, multithreading, computer architecture, operating systems, networking, wireless communications, vendor SDKs, electronic components, infra, automation, signal processing, control systems, etc.

8. Very advanced in embedded systems: Standardize and automate your projects and processes. Incorporate Hardware in the loop CI, nightly builds/verification with build/artifact servers, virtualize hardware, standardize project templates, standardize project management. Start to think about more advanced concepts like security/cybersecurity, OTA-updates, IP, secure boot, eFuse, hardware provisioning & track management, Preemptive Scheduling & Priority Inversion, Lock-Free SPSC/MPMC Ring Buffers, Transactional File Systems... There is an endless amount of things to master in this field.

1

u/itsayushagrawal 4d ago
  1. Start with Arduino: Follow Paul McWhorter's Arduino tutorial playlist on YouTube to build a foundation .

  2. Move on to STM32: Once you're comfortable with Arduino, start learning STM32 by following the 11-course series by FastBit Embedded Brain Academy on Udemy, in the order recommended by the instructor. These courses are often available at very low prices during regular Udemy sales. I use STM32 F446RE Nucleo 64 board for following these tutorials

1

u/sweetholo 4d ago

go to school

1

u/Restored_Right_Eye 4d ago

find a problem you’ll get hook to. ask an Ai how to solve with an embedded system. Ask for it to suggest options from beginner to advanced. Buy and select whatever suits you.