Well looking at this opencm3.c
file:
These are supposed to be the ISR handlers. Looking at vector.c file
At the end of the file, WEAK symbols are defined. It may be the case that when the linking is done for libopencm3, the opencm3.c
file is not yet known so it links it with the empty handlers.
A way around that may be to not link the frameworks seperately, but all at once. This can be achieved using lib_archive = no
in the platformio.ini
(docs).
This increases the size of the code in the flash from
RAM: [========= ] 86.2% (used 17664 bytes from 20480 bytes)
Flash: [= ] 5.2% (used 3424 bytes from 65536 bytes)
to
RAM: [========= ] 86.2% (used 17664 bytes from 20480 bytes)
Flash: [= ] 5.5% (used 3596 bytes from 65536 bytes)
Does that help?
Also, it shold be easily debuggable using a STLinkv2 to check if the handlers in opencm3.c
are called at all, which would give further insight into the problem. PIO’s debugger is free to use in VSCode.