5 Steps to Getting Started with Embedded Programing

I’ve been getting asked the question, “So how would I get started with embedded development?” more and more often lately.

This is actually a really tricky question. It’s not like, “How would I get started with Haskell?” or “How would I get started with Rust?” Embedded development is such a weird and diverse thing that it’s almost like asking, “How do I get started with programming?” except in an alternate universe where 128k is still a lot of RAM. I’m not sure where to even begin.

I think the people asking have one of two goals:

  1. “I want to make my software affect physical things.”
  2. “I want to learn what’s actually happening way down there at the bottom.”

If you’re mostly interested in the first goal, then I would recommend you check out the many good hobbyist embedded platforms available now (Arduino, Raspberry Pi, Particle, etc…). They have lots of great communities to participate in and learn from.

However, if you’re more interested in the second goal, your task is a bit harder.

1. Learn C

For a variety of reasons, the vast majority of embedded toolchains are designed to support C as the primary language. If you want to write embedded software for more than just a few hobbyist platforms, your going to need to learn C (and hopefully maybe eventually Rust).

2. Learn Some Basic Electronics

Don’t worry, you don’t need to take a class or anything. You just need a basic understanding of voltage, current, power, resistance, ohms law. You probably can get by with just a few online tutorials and some experimenting with online simulators and/or real circuits.

3. Get the Basic Equipment

Since this is embedded software and you’ll actually be interacting with the physical world, you’ll eventually need some physical equipment. You’ll at least need:

  • Soldering iron
  • Digital Multi-Meter (DMM)
  • A hardware debugger/ JTAG adapter (such as an ST-Link, or OLMEX adapter)

I also highly recommend getting a Logic Analyzer. My favorite is from Saleae, but they are many other cheaper ones.

4. Choose a Microcontroller and Toolchain

Okay, so now that we have the fundamentals, can we get to coding already?!

Almost. To actually get your programs running, you’ll need a microcontroller to run them, a compiler that can compile your programs for your target microcontroller, and other tools to load your programs onto your hardware and debug them.

I personally like the STM32 family of microcontrollers. They are well supported by my favorite embedded toolchain: arm-gcc along with openOCD. This combination is not as user friendly as an Arduino, but it’s also suitable for many more real-world applications.

  • One good starter option is to get an STM discovery kit; they are cheap, relatively accessible, and easy to get started with.
  • ARM is by far the most common architecture for embedded micros (especially 32bit micros), and arm-gcc can target pretty much all of them.
  • openOCD is an open source piece of software what will communicate with a hardware debugger and provide a gdb debugger server so you can load a program and step through your code running on target with gdb. You don’t even need to run openOCD on the computer you’re developing and running gdb on.

5. Pick Components & Dig into Their Datasheets

Now you have enough to actually get started on something. All you have to do is pick out some components and then put them together! Some good places to look for components are sparkfun and adafruit. And for broader and cheaper selection, also digikey and mouser.

Once you’ve found a few components that you think will do what you want, you’ll have to dig into their datasheets. Datasheets are essentially the manuals for electronic components. They are the key to figuring out how to use a component and to make sure it will, in fact, work for you application. Most of the questions you have about a component can be answered by its datasheets. But datasheets can be tricky. Tricky enough that I have my own 3 rules of embedded programming:

  • 1st rule of embedded programming: Read the datasheet.
  • 2nd rule of embedded programming: Read the datasheet.
  • 3rd rule of embedded programming: Don’t trust the datasheet.

Datasheets are the source of all knowledge, but also not entirely intuitive or even accurate. I recommend reading how to read a datasheet and Sparkfun’s datasheet tutorial to help get started.

Whew, that’s quite a lot to go through, but will give you a pretty solid basis when you actually get through it. :)

Conversation
  • pramod mavaskar says:

    i am very interested in electronics.i want learn embeeded programim for every microcontroller how to make programing for Atmega8 microcontroller.

  • karthi says:

    fine

  • YC says:

    Thanks for the tips!! Very useful!
    Hope I can successfully follow the steps you mentioned above.

  • Ahmed says:

    Thanks for these advices !
    I also recommend to try out a variety of IDEs and choose one of them that’s suitable for you , and to use any simulation app such as proteus

  • Mahmoud Amin says:

    What about code warrior for kinetic k40

  • Yao says:

    Wow! This is great. I’ve got the exact tips i needed. I just started learning c. I hope i will be able to carry on to the end.

  • R BALAMANASVINI says:

    i am completed in Diplomo in ECE with 83%

  • Somanshu Mehta says:

    I am working on TM4C123 from Texax instruments. How is ARM GCC Embedded different from Code Composer Studio(Texas Instruments) or uVison from Keil ? Is a a compiler or library ?

    • Job Vranish Job Vranish says:

      Code Composer and uVision are IDE’s that use tools similar to gcc under the hood. uVision uses armcc, and Code Composer uses their own TI compiler, and I think it can optionally also use gcc.

      IDEs are nice for getting something off the ground quickly, but I highly recommending spending time to learn how to use the lower level compiler and linker tools directly. IDEs can end up being more of a hindrance than a help, especially as the project size grows.

  • it is good,continue as it is.

  • parth says:

    For the programming part , I have knowledge about C/C++/Java ,
    Should I still try to expertise in C or learn Python(as shown on some other online sources)or some other language?

  • Sam says:

    Thanks for the article!

    Do you have opinions on quality of DMM required?

  • Amar says:

    easiest to enter in embedded is starting with arduino kit I think by user point of view and if u r fresher to get in to it than start from blinking led and get info from Google , later u get more n more ideas . and if once you enter in this field its like drugs and it always keep your mind in different planet and makes u crazy (if in case u r passionate in this field)

  • Pooja jaiswal says:

    Please,tell me how to make a future in embeded system .I am appearing in ece diploma.

    • Dinesh Jangra says:

      you can make your future if you can make your own embeded system .

  • Estifanos G says:

    1st rule of embedded programming: Read the datasheet.
    2nd rule of embedded programming: Read the errata.
    3rd rule of embedded programming: Don’t trust the datasheet nor the errata.

  • waleed says:

    good read, useful ten minutes good job.

  • ankit says:

    embedded system enjoyable subject and very day learning thing and start the programming language and device start programming subject

  • Bakht zada says:

    I am the student of computer science I want to write an embedded program in C but I don’t that which one compiler is easy and best one for this purpose

  • dipongkar chakraborty says:

    Can I switch my job from marketing to embedded design engineer? Currently I’m 27 years of age. Is it possible to get job in this field without prior experience?

    • Roland says:

      Surely, but its a lot of hard work and if you are not driven by motivation or passion, youll get drained pretty quickly.

  • vnp says:

    im new to learn embeddded system .can u please tell me what is the basic rule to learn embedded system..???

  • Farid says:

    Very informative. Thank you.

  • ANKIT says:

    i am passionate in electronics ckt design and there programming. i want to learn embedded hardware and embedded c.
    i want to learn it from basic. so plz help me.
    plz tell me which study material i have to collect and how to proceed.
    my email id: [email protected]

  • manoj says:

    thanx sir

  • wiz says:

    please i love and have passion for embedded programming.please can u teach me the basics nd other tinz i need to knw

  • A.BHUVANA says:

    A.BHUVANA

    December 24,2016

    am also very interesting in embedded system

  • Justice SK Nyarko says:

    Informative and detailed article

    Big ups to Atomic Object

  • ghost says:

    mokka

  • Sunil says:

    sir,
    i am very interested in electronics. I want to learn embedded program for every microcontroller like 8051, AVR. how to make programming for Atmega328P,8051 microcontrollers.

  • Jakob says:

    Hi Job,

    Great article. I am interested in getting started and I have been recommended that STM32 board by another friend. I was curious if there was an option that included wifi and bluetooth (or is this something that I shouldn’t worry about for now?). What makes this board the best board to start with? What kinds of projects would you recommend as good starter projects with this board?

    Regards,
    Jakob

  • bharathiraja says:

    Hi guys i want to learn the embeed language. Where i learn the languge can u explain about this langage. I want to complete Certification course in thisss……

  • Esakkimuthu says:

    Yeah, It’s really interesting.Great Article.

  • Alex Stavih says:

    Hi Job, thank you for the tutorial. Before finding your post, I watched an STM32 tutorial using the board and decided to get it. Are you planning to make a more conprehensive tutorial on how stm32 keil getting started? I’m having trouble getting the toolchain working on my PC.

    Thanks,
    Alex

  • its nice website,
    let me know how to start the journey of C Embedded,
    pls provide some examples of C Embedded,

  • Ayo says:

    Very informative piece. I want to really learn everything about embedded system and i don’t wanna keep copying people’s code what do i do?

  • AKSHAY VARSHNEY says:

    how can i learn the basics to do good project in embedded systems and i am not very good in programming but i am very eager to know how to get good knowledge in embedded systems.?
    please reply…

  • punkmains says:

    Its so amazing ,this was what I was exactly thinking of (the goals). And what to do if both are my goals? Also, is it good enough to choose it as my career? because I have heard they pay less to embedded software engineers than other IT jobs.+ I dont know how is the demand of computer science engineers(B.E. in CSE)+ I am not very good in electronics (my fear)

  • Jason says:

    Thanks for the article. Very informative!

  • Comments are closed.