-
Notifications
You must be signed in to change notification settings - Fork 134
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add STM32C0x #1188
Add STM32C0x #1188
Conversation
You were just missing a dependency on |
I just created a commit very similar to 89d75c1, but was 30 seconds too late pushing it here 😆 |
Many thanks for your great help @salkinium and @rleh !! |
I was kinda wondering why RCC even gets pulled in for your minimal example, and for some reason the
So I defined them in the main.cpp file as a hack, just to get you unblocked for blinky. Would probably still be good to have the RCC module to go up to 48MHz and not stay at 16MHz boot frequency. |
Quite thanks for your quick and helpful suggestions!! But you're to fast for me or I'm to slow/untalented. In between I got blinky compiled well but I'm still to unfamiliar with modm and go by the docs step by step.
Yes sure! Once I get code running on it, I will try to fix the RCC issues. I also need to adapt the modules/driver for timer, uart, ADC, because my PCB needs them ;-) Also quite thanks for hinting me to the dependency SVG. Already built one before (during work through the docs), but was shocked in the first view :-) ... but I'm pretty sure once I get it running, it will be helpful!! |
Did you close this on purpose? If you want to add more changes to the PR, just push more commits to the branch, the PR will update automatically. |
Yes ;-) due to frustration... |
Okay, hard time but more clever now :-) ... or more hacky :-/
As I did not know anything about modm before, I'm pretty sure that I did it somehow wrong at some places. Some questions popped up during coding:
|
properties["bdcr"] = "CSR" if target.family in ["l0", "l1"] else "BDCR" | ||
properties["pll_ids"] = ["1", "2", "3"] if target.family in ["h7", "u5"] else [""] | ||
properties["bdcr"] = "CSR1" if target.family in ["c0"] else "CSR" if target.family in ["l0", "l1"] else "BDCR" | ||
properties["pll_ids"] = ["1", "2", "3"] if target.family in ["h7", "u5"] else [] if target.family in ["c0"] else [""] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"c0" requires an empty array for not walking through %% for id in pll_ids
in rcc.cpp.in.
Is [""] a correct option?
Reverted a couple of previous RCC hacks (like hsi48) because I felt they're wrong. Added a custom-board.hpp to the blinky sample because I had the impression that SysClock need to be enabled/activated as ref-docs say boot frequency is HSI (48MHz) divided by 4 which is 12MHz. But failed in RCC with PLL definitions because I'm to unknown. Blinky is running with a 2 second delay (instead of 0.5s), which seem to be the 1/2 boot frequency of 48MHz. Would be nice if someone can give me a hint ;-) |
I'll have a look next week in more detail when I'm on holiday, under the week I'm typically too mentally exhausted from work. |
In between I did some tries with STM32CubeMX together with STM32-VScode extension. This is not an option for me 👎 With this I can go on trying to get into my project and use modm for it 👍 So @salkinium, enjoy your holiday by reading a book or doing something funny, but don't with coding. My issue has time for somewhen after holiday! |
I ordered a NUCLEO-C031C6 dev board, will probably end of week. I also found a super cheap (~1.5CHF) STM32C011 barebone dev board on aliexpress, but that'll arrive later. |
Oh no, don't waste money for my dev issues. Edit: |
It's more to have a device to run the modm unit tests on. The nucleo boards are super cheap, and I need at least one device per family anyways. |
ba80648
to
275c0ab
Compare
Sorry for the delay, I've ported your examples to the NUCLEO-C031C6 board and they all work! Congrats and thanks for porting modm to STM32C0. I'll do my review directly in form of commits, it's just way faster this way. Sorry for force pushing to your branch, it's just simpler that way. |
275c0ab
to
0d67ea4
Compare
060af9f
to
f23a774
Compare
I'm proud to see that my PR isn't fully none-sense ;-) Already recognized and partly viewed your last commits the last days. Interesting to see the code lines I wasn't able to find ;-) I'm fully fine with your force-pushes!! Do it the way how it's easiest for you. Quite thanks for your support!! |
f23a774
to
91f73ef
Compare
91f73ef
to
525492a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you very much!
The HAL compile all CI tests passed previously, I'm not running them again, since I didn't change anything HAL related again.
@salkinium According to the HAL matrix USB is supported, but TinyUSB doesn't seem to have C0 support yet. I guess it isn't then? |
Hm, that's cos the HAL matrix checks for the |
@@ -57,6 +57,7 @@ def build(env): | |||
# (cycles per loop, setup cost in loops) | |||
tuning = { | |||
"g4": (3, 4), # CM4 tested on G476 in RAM | |||
"c0": (3, 4), # CM0+ TODO: Test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TODO?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, AFAIR that comment was from me. Did not know how to test :-/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, sorry it's the examples/generic/delay code and then you would need to run this through the code in this blog post.
I've just done this on the Nucleo-C031C6 and the delay is comparable to other CM0(+) devices:
Device | Core Type | Cycles per Loop | Minimum Cycles at Boot/High Frequency | Minimum Delay at Boot Frequency | Minimum Delay at High Frequency |
---|---|---|---|---|---|
STM32C031 | cm0+ | 3 | 15/17 | 1250ns @ 12 MHz | 354ns @ 48 MHz |
STM32F072 | cm0 | 4 | 18/19 | 1125ns @ 16 MHz | 395ns @ 48 MHz |
STM32F091 | cm0 | 4 | 18/19 | 1125ns @ 16 MHz | 395ns @ 48 MHz |
STM32G071 | cm0+ | 3 | 16/18 | 1000ns @ 16 MHz | 281ns @ 64 MHz |
STM32L031 | cm0 | 3 | 16/17 | 7629ns @ 2.097 MHz | 531ns @ 32 MHz |
~1.25us minimum delay on boot frequency is almost on the ideal line:
~400ns minimum delay at 48MHz:
Also no scaling error for longer delays:
Turns out the |
525492a
to
3420751
Compare
3420751
to
781de14
Compare
Add STM32C0x Summary:
In relation to #1187, I tried to add STM32C011F6P6 support for a custom PCB.
Well, somehow hard for an ungifted to jump into the internals, who's intention was to use modm for his project ;-)
However, can't become more dumb by trying :-)
Unfortunately I got stuck after a couple of lines and don't know if I missed something to hack in modm or if I made something wrong with my minimal blink example :-/
If I chose a supported MCU it compiles well, but all supported MCU's I found, do also have a board, so...
This is what I get now:
Any hints are welcome ;-)