Abstraction is also a limitation.
Someone's else abstraction needs to be put under scrutiny; is it the right tool for the job?
Writing your own abstraction layer has the advantage of being very lean because you know what you need.
I think I have never used an ADC in such a way that I could just call a function to initialize a fixed-length transaction to a buffer, not even once. No; I may sync it to the timers, I generate interrupts, I utilize injected measurements, and so on.
If I want a computer, I use a computer, like a Raspberry Pi. Then I can run linux and have a standardized and fairly consistent and capable POSIX interface to high-level functionality.
But when I design in a microcontroller, I tend to do timing-critical control, something the software can't do alone, and something where the peripherals tend to be used beyond the "trivial" example use case. Most of my applications require at least some HW feature of some peripheral that simply can't be accessed or used through the STM32 HAL library (at least not easily / in a portable manner). Simple as that. I either don't use HAL at all, or create a strange mix of code where it is used in some places, and not used somewhere else, and where I need to write code twice (once with HAL, then without when I hit the limitations), or I could of course give up and not do the project at all.
Often the peripheral access itself is some 2-3 lines of code. I may abstract it behind my own function for easy maintainability or portability.
But I'm sure HAL is fine when you are mostly doing simple applications and are ready to call in an expert when you hit the wall.
And quite frankly, it tends to go in such a way that when others are starting the discussion about the merits of all the fine layers of abstraction (including STM32 HAL, code autogeneration, RTOS...) and how they should be used, I have already finished the project without. I have my own 71 lines-of-code long helper header to abstract the most widely used STM32 peripheral operations such as playing around with GPIO and DMA, makes code more readable.
When did it become a matter of pride to reveal you prefer a point-and-click interface instead of writing code? I mean, that's fine if it floats your boat, but really, if you want to work on actual projects and get some work done you should be confident writing code. If that feels difficult in comparison to point&click, you are writing the code wrong. And I don't blame you, many of the STM32 examples around the 'net need like 20 lines of code to toggle an IO. Really it should be an oneliner. If you struggle with code, my hint is, look for better ways to write that code (you can stay in C language, trust me, it's not the problem) instead of replacing it with a GUI autogenerating a horrible piece of spaghetti mess.