In order to go beyond what the simple Arduino framework provides, you must have good programming skills and ESPECIALLY in C/C++. You must have good mastery of C/C++ basics like : Data-types, functions, arrays, strings, structs. You need good understanding of pointers to be able to handle memory related tasks easily. You will also need to know about the basics of the C preprocessor. Finally, a good knowledge of Object-Oriented programming is also critical to understand how C++ libraries are designed and how to use them correctly. Below you find the resources to learn all that.
In order to go beyond Arduino, you first need to be already good with using the Arduino framework. For this I can't recommend enough THIS PLAYLIST or this book C programming for Arduino . You should do as many projects as possible to reach the point where you really need more out of your microcontroller.
In order for you to be able to open the ATMEGA328p or any MCU reference manual and understand what is going on, you must have a good foundation in Digital Systems
, and you should learn about the Basics of Computer Architecure
. For this I can't recommend enough this playlist from ben eater YouTube channel .
-
Open the atmega328p reference manual and try to read a chapter about a peripheral of your liking, then configure and test what you learned.
-
Try the prev step for few times then switch to other micro like stm32 preferably and/or ESP
At this point you're most likely very interested in learning and working with embedded systems. I leave you with the following additional resources where you can continue feeding your curiosity:
- Modern Embedded systems programming course (best embedded playlist ever, it is equivalent to 2 or 3 university courses !)
- build systems like Make or better: CMake
- Sober YT channel (c programming, Operating systems and embedded)
- Embedded Artistry blog (every other resource you need is here)
- Embedded.fm podcast
- battery uni(Everything you need to know about batteries)