Hardware design is technically not coding, but otherwise you can use pretty much your entire software engineering mental toolkit. Here's a list of some of the projects I've worked on that needed embedded programming or hardware design.
Peripheral libraries for the ATmega328p
Arduino libraries for peripheral devices on the ATmega328p. You would expect the standard libraries on the Arduino platform to have a good API and feature set, and to be written in an optimal way. Anyways, that's not the case, so I wrote my own. The caveat is that the libraries really only support the ATmega328p.
A pipelined MIPS processor on an FPGA
A 32-bit pipelined MIPS processor written in SystemVerilog for the Zybo Z7-20 board. This was my bachelor's thesis. It's not a very practical soft-core CPU, but there was a lot of practical knowledge I got by doing it. And hey, I can now flex that I've designed my own MIPS CPU.
laughs dubiously in assembly
A digital logic analyzer on STM32
A digital logic analyzer built on an STM32 microcontroller, with a Java desktop application as the interface. You'd be surprised how much performance you can get out of a microcontroller.
An Arduino-controlled multimeter
A digital multimeter circuit controlled with an Arduino. It can measure resistance, DC voltage and current, capacitance and inductance, as well as ambient temperature, light and noise. This was a project for my bachelor's course "Introduction to Electrical and Computer Engineering" and it came out pretty well. I think the university still keeps it in a glass box in the lab, since I managed to do the whole thing without using any mechanical moving parts.