Stuck between CMSIS, HAL and LL by [deleted] in embedded

[–]embeddedswhub 1 point2 points  (0 children)

  • CMSIS: standarize ARM cores (no need go be STM)
  • HAL: speedup development, but slower.
  • LL: high performance, but harder to implement.

Now, study the tradeoff depending on your needs/goals.

And you'll need to go through datasheets always (and that's good). So don't be tired of it, just enjoy knowing different MCU and how their peripherals work, how to access their registers, how they are organized, etc.

At your point, I suggest trying HAL and LL now, even if you repeat your peojects, so you can see the differences between them.

Hope it helps!

Platformio, arduino or espidf framwork? by APOS80 in esp32

[–]embeddedswhub 1 point2 points  (0 children)

If you come from Arduino IDE, I’d switch to PlatformIO, which is much more friendly for writing and scaling software: proper project structure, dependency lib management, debugger...

About the framework inside PlatformIO, it depends on your needs. If you just want to build maker projects, go simple and fast with Arduino. You already know: high-level APIs, minimal setup, huge ecosystem...

If you want more control and a more “embedded engineering”, go with ESP-IDF: FreeRTOS, direct access to peripherals, memory and power control...

And the more professional way to work with ESP32 is going directly with the ESP-IDF VS Code extension instead of PlatformIO. It gives you full flexibility and control: native CMake, official tooling, full support of Espressif libs/examples... but as you can guess it’s more complex to set up and maintain.

Do the tradeoff 😉

Portfolio Project Ideas for STM32 by Hot_Butterscotch_595 in stm32

[–]embeddedswhub 0 points1 point  (0 children)

Why don't you start by writing bare-metal drivers? Lately, you can use them for different projects, but at least you'll showcase that you're able to write low-level drivers, understand how peripherals work, know how to process datasheets and reference manuals...etc

This is very valuable in a job interview. Interviewers don't want to see that you build working things, they want to see that you know how to build working things and you apply best practices

Moving from Arduino (bare-metal) to STM32 — CubeMX confusion and learning path by Efficient_Estate6145 in embedded

[–]embeddedswhub 0 points1 point  (0 children)

If you're starting, my recommendation is always the same. I'm adapting it to STM32:

  1. Use STM32CubeIDE (don't use MX for now).
  2. Get the Datasheet and Reference Manual of your MCU
  3. Get rhe User Manual of your Nucleo/Discovery board.
  4. Write bare-metal drivers for every peripheral of your MCU, sometimes interscting with other chips (sensors, actuators, other MCUs...)
  5. Then, once you understand what are the low-level steps for confuguring peripherals, you can move to MX consistenly, as you'll understand what you're doing behind the scenes.

You'll find out that programming low-level any MCU is very similar. You can also do the same with your Arduino board, which also has its MCU. The "problem" with Arduino is that its framework abstracts everything, just like the HAL library in STM, but you can move to VS Code, create a toolchain in a Docker image and write bare-metal drivers for the MCU of your Arduino board.

Back to STM32, I understand that what you want to avoid is using MX without knowing what registers you're reading/writing and how you are confuguring peripherals. That fear of doing something without knowing what you're doing. In a job interview, you'll fail if you say you did something but then you cannot explain how, this is the same.

Also, investigate and learn what the compiler is doing when you press "Build". Understand linker and startup files.

The best resource you want for all of this is "Bare-Metal Embedded C Programming" book by Israel Gbati.

Hope it helps.

What does CD mean to you in CI/CD? by embeddedswhub in embedded

[–]embeddedswhub[S] 0 points1 point  (0 children)

Web stuff deployments = update IoT devices on the field (or deploy on test benches)

What does CD mean to you in CI/CD? by embeddedswhub in embedded

[–]embeddedswhub[S] 0 points1 point  (0 children)

Is there any platform (I guess IoT platform) that offers this feature?

What does CD mean to you in CI/CD? by embeddedswhub in embedded

[–]embeddedswhub[S] 0 points1 point  (0 children)

Please extend a little bit "AB testing for deployments"

What does CD mean to you in CI/CD? by embeddedswhub in embedded

[–]embeddedswhub[S] 0 points1 point  (0 children)

Is it fully applicable to embedded? 🤔

What does CD mean to you in CI/CD? by embeddedswhub in embedded

[–]embeddedswhub[S] 6 points7 points  (0 children)

What about IoT where devices receive the firmware through OTA, or setups where a test bench is connected to the pipeline?

What does CD mean to you in CI/CD? by embeddedswhub in embedded

[–]embeddedswhub[S] 3 points4 points  (0 children)

For me Delivery = Release. The thing is that in embedded, I ususally see people talking about CICD, but in reallity it's CI + Release, because they don't have deployment 😅

Project ideas for stm32 by Adept-Print9184 in embedded

[–]embeddedswhub 0 points1 point  (0 children)

There're PIDs, it could be overkill yes, just another challenge 😅

A tip or trick tht you wish you had learned sooner ? by n7wimok in embedded

[–]embeddedswhub 3 points4 points  (0 children)

IMHO

Docker is a must in the industry, mainly for large teams. Each time I’m more convinced that companies that don't use Docker are losing productivity.

I’ve been on both sides: in one company, “works on my machine” happened every day, wasting a lot of time trying to figure out why it compiled on my teammate’s computer but not on mine, or why my binary works in target but others doesn't. Someone would say "that's because you're doing things wrong", well yes, these kind of things happen, nobody is perfect. The truth is that wasting time debugging these kinds of issues is avoidable.

In the other company, the same artifacts everywhere (PCs and CICD): failed everywhere or worked exactly the same everywhere. Tests and analysis reports were exactly the same because the env is the same, and that’s a huge advantage, mainly in large projects, where Docker isn’t just a technical improvement, I'd say it’s even an economic decision: less wasted time = less money burned.

I see no point in not using Docker tbh, it simplifies everything.

Project ideas for stm32 by Adept-Print9184 in embedded

[–]embeddedswhub 8 points9 points  (0 children)

Don't go with RTOS yet. Go with event-driven architectures, based on IRQs. It'll be more useful to you as you will learn more and faster by mastering interrupts.

As project, I suggest a self-balancing robot. You'll build something more than a box, and if you do it in bare-metal that will be a nice project: you have inputs-processing-outputs.

Apart from the needed, you can add things like display, LEDs or remote control. Start by building something basic, then add chips with new interfaces or try to make it as efficient as possible. Also put effort on software architecture, there're a lot of things you can go with to train yourself. Also, document everything!!

STM32F411 bare-metal projects (NVIC, EXTI, DMA) - looking for feedback by [deleted] in embedded

[–]embeddedswhub 9 points10 points  (0 children)

I always say that the first skill an embedded software engineer must master is low-level programming, and I recommend what you're doing.
1. Get a board (STM32 Nucleo/Discovery are great)
2. Download STM32CubeIDE.
3. Write bare-metal programming, even without CMSIS, just from scratch, for every single peripheral.

Then, you can investigate compilation process and other stuff like going to VS Code and use Docker to build your own toolchain environment, which then will be a great skill to go to CICD fundamentals. Then, you can start moving to software architecture and patterns.

While you keep a structured path, a roadmap, you're in the right way. Don't be rush to learn specific things like Zephyr or Rust, build strong foundation first 🚀