Skip to content
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

variant(g4): Add WeActStudio.STM32G474CoreBoard support #2615

Merged
merged 3 commits into from
Jan 4, 2025

Conversation

ALTracer
Copy link
Contributor

@ALTracer ALTracer commented Dec 26, 2024

Summary

This PR implements support for the following feature

  • Generic G474CEU variant
  • WeAct Studio G474CEU variant

This PR solves the existing problem of e.g. inaccessible GPIO PC6 LED on UFQFN48 (U) when using other variants on this board. Now you can use either the correct generic variant or the dedicated board variant with LED and button and HSE clock config.
There's no onboard SWD+VCP debugger/bridge, only USB-C to FSDev PHY and two double rows of pinheaders (and SWD). There's no SPI Flash on the bottom side of my boards, but two other revisions exist, one with such flash, one is just a Long PCB (for single row pinheaders and breadboard compatibility probably).

I'll need further assistance in adding other important changes (like CMake chores, or LPUART1 instead of USART2, or Readme 2.9.0/2.10.0 targeting tag and links, or digitalPin/analogInputPin arrays -- ADC?). I don't think this board needs a custom PeripheralPins_xxx.c.

Validation

  • Ensure CI build passes.
  • I was using the new Generic variant on 2.6.0 branch with a custom extended sketch utilizing Button, LED, HardwareSerial USART2, HardwareTimer, DAC and OPAMP for max. 7 buffered channels. (OPAMP is likely still unsupported and is out of scope of this PR)

Code formatting

  • Ensure AStyle check passes on CI
    Plain astyle 3.1 produces a lot of noise changes, it would be nice to have a git hook for formatter script for changed files only.

Closing issues

@ALTracer
Copy link
Contributor Author

I use Arduino 2 Theia IDE on Linux and Windows. I don't have Sloeber (yet), but installing that is preferred to VSCode.
I can also debug in CLI/TUI of GDB via STLink/V2/V3 or CMSIS-DAP or BMP.
What is needed to test critical features (which I add here) and nice-to-have features (which I may have forgot to do properly)? How do I replace the release SDK from Board&Library manager with my local git worktree (symlink it maybe)?
The feature request was in #2605

@fpistm
Copy link
Member

fpistm commented Dec 27, 2024

Hi @ALTracer
Thanks for the PR. I'm on vacation. I Will review it when I will be back.

@ALTracer
Copy link
Contributor Author

I Will review it when I will be back.

Thanks. If some maintainer approves CI, then I can look at any failing checks (like astyle) and fix the simpler errors. It'll be my first time in this repo, so I don't know what's enforced here.

@fpistm fpistm self-requested a review January 2, 2025 10:46
@fpistm fpistm added the new variant Add support of new bard label Jan 2, 2025
@fpistm fpistm added this to the 2.10 milestone Jan 2, 2025
Copy link
Member

@fpistm fpistm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess keeping pins numbering like the generic one is not an issue as it seems it exists 2 form factors for this board.

boards.txt Show resolved Hide resolved
README.md Show resolved Hide resolved
@fpistm
Copy link
Member

fpistm commented Jan 2, 2025

How do I replace the release SDK from Board&Library manager with my local git worktree (symlink it maybe)?

https://github.com/stm32duino/Arduino_Core_STM32/wiki/Using-git-repository

@fpistm fpistm force-pushed the feature/variant_WeAct_G474CE branch from 17504db to f267322 Compare January 2, 2025 16:28
@fpistm
Copy link
Member

fpistm commented Jan 2, 2025

I've updated your branch.

@ALTracer
Copy link
Contributor Author

ALTracer commented Jan 2, 2025

Thanks. Are the 8 Generic boards/chips autogenerated from CubeMX_DB?
Do we need to treat specially any onboard peripherals (like w25q80, optional)? LPUART1? Or that's not essential for initial bringup?
What's the targeted version in readmes, 2.9.0 or 2.10.0?

@fpistm
Copy link
Member

fpistm commented Jan 2, 2025

LPUART1 is already managed. Specific peripheral not.
And yes it is 2.10.0 my mistake.

ALTracer and others added 3 commits January 3, 2025 09:56
* UFQFN48 (U) boards were missing from selection, only LQFP48 were available (T)
* Copy missing linkerscript from G474CET
* Copy missing SystemClock_Config and readjust for HSI16 into PLL150 and HSI48 CRS (for USB FS Device)
Signed-off-by: Frederic Pillon <frederic.pillon@st.com>
@fpistm fpistm force-pushed the feature/variant_WeAct_G474CE branch from f267322 to 59ed28d Compare January 3, 2025 08:57
@fpistm fpistm merged commit 65677a2 into stm32duino:main Jan 4, 2025
24 of 25 checks passed
@fpistm fpistm linked an issue Jan 4, 2025 that may be closed by this pull request
@imk2021
Copy link

imk2021 commented Jan 4, 2025

Hello fpistm, ALTracer
Firstly many many thanks for all your efforts getting this new variant ready for release.
Now I have done maybe what i should have not done, inasmuch as I have downloaded the files you have prepared for the WeAct G474CE variant, boards, make, clock etc and merged them into my Win10 STM32 2.9.0 arduino boards install folder:
G473C(B-C-E)U_G474C(B-C-E)U_G483CEU_G484CEU.

I started IDE 2.3.4 and can see the new WeAct G474CE in the board menu as expected.
So built my large app that I am migrating from a F411 to the new G474 and all built correctly, however my apps behavior seemed a bit odd and after a little investigation it seems that the clock speed is not 170mhz but more like 56mHz....
So I have built a very simple timer testing sketch as can be seen below:

When I build this testing app for the WeAct G474 it runs at approximately one third the expected speed.
When I build this testing app as G431CBU and upload it to the G474 it runs at the expected speed.

So it seems that I have either jumped the gun and implemented what is not completed, or I messed up the G474 merg, or the clock definition is incorrect.

Measured by Timer One interrupt or delay in main loop both run at about 1/3 expected when built as G474
I comment out the digital toggle I am not testing with in loop or interrupt function.

Hope this help many thanks imk

#define TEST_PIN_1 PB2

HardwareTimer *MyTim;
TIM_TypeDef *Instance = TIM1; // Timer One....

void SetupOneMSIntTimer( void );
void OneMilliSecIntFromTimer( void );

// -------------------------------------- setup() ---------------------------------
void setup()
{
pinMode( TEST_PIN_1 , OUTPUT );

SetupOneMSIntTimer(); // put this last as drive interrupt test pin.
}
// -------------------------------------- loop() -----------------------------------
void loop()
{
digitalWrite( TEST_PIN_1 , !digitalRead( TEST_PIN_1 ) );
delay( 10 );
}
// -------------------------------------------- SetupOneMSIntTimer() ----------------------------------
void SetupOneMSIntTimer( void )
{
MyTim = new HardwareTimer( Instance );

MyTim->setOverflow( 1000 , HERTZ_FORMAT); // 1000 Hz
MyTim->attachInterrupt( OneMilliSecIntFromTimer );
MyTim->resume(); // Set the interrupt Timer
}
// --------------------------------------- OneMilliSecIntFromTimer() -----------------------------------
// This is called by Timer Interrupt and used to maintain critical timing and Serial Input Buffer
void OneMilliSecIntFromTimer( void )
{
//digitalWrite( TEST_PIN_1 , !digitalRead( TEST_PIN_1 ) );
}

@fpistm
Copy link
Member

fpistm commented Jan 4, 2025

I did not verify the clock config. I assumer it was tested by @ALTracer anyway will chech it next week.

@imk2021
Copy link

imk2021 commented Jan 4, 2025

I did not verify the clock config. I assumer it was tested by @ALTracer anyway will chech it next week.

many thanks fpistm have a good weekend.. imk

@imk2021
Copy link

imk2021 commented Jan 5, 2025

Couldn't sleep thinking about this slow clock so had another look.
It is not the content of generic_clock.c that is incorrect it is missing definition ARDUINO_GENERIC_G474CEUX hence it never runs the clock configuration. I have hacked generic_clock.c as below at now the timing of my little test sketch is correct.
Spent half hour trying to figure out where ARDUINO_GENERIC_G474CEUX should be properly defined but couldn't find solution.
I'll continue my testing with this hack while I await expert advice.
All best and many thanks again for the variance IMK.

// Add this define to force it to build clock config in generic_clock.c
#define ARDUINO_GENERIC_G474CEUX

#if defined(ARDUINO_GENERIC_G473CBUX) || defined(ARDUINO_GENERIC_G473CCUX) ||
defined(ARDUINO_GENERIC_G473CEUX) || defined(ARDUINO_GENERIC_G474CBUX) ||
defined(ARDUINO_GENERIC_G474CCUX) || defined(ARDUINO_GENERIC_G474CEUX) ||
defined(ARDUINO_GENERIC_G483CEUX) || defined(ARDUINO_GENERIC_G484CEUX)
#include "pins_arduino.h"

etc etc etc

@fpistm
Copy link
Member

fpistm commented Jan 5, 2025

@imk2021
So you used the generic.
The define is set during the build.
Do you used Arduino IDE?

@imk2021
Copy link

imk2021 commented Jan 5, 2025

Hello Frederic,
I used the menu item WeAct G474CE which is 1st item in the menu.
Currently using IDE 2.3.4

@imk2021
Copy link

imk2021 commented Jan 5, 2025

I see in boards_db.cmake ARDUINO_WEACT_G474CE
So maybe in generic_clock.c there should be #if defined(ARDUINO_WEACT_G474CE)

I am just searching and guessing, so forgive if rubbish idea

@fpistm
Copy link
Member

fpistm commented Jan 5, 2025

Ok. So no link with the generic . The clock config used is defined here:

@imk2021
Copy link

imk2021 commented Jan 5, 2025

in variant_WEACT_G474CE.cpp I made edit to cause a build error to prove it is been called, see below:
I put some spaces in code line RCC_OscInitTypeDef RCC_OscInitStruct = {};
like so RCC_Os cInitTypeDef RCC_OscInitStruct = {};

This caused a build error so it proves it is been called so maybe the clock speed issue is in WEAK void SystemClock_Config(void)
So maybe the generic_clock.c is in the build after variant_WEACT_G474CE.cpp hence it fixes the clock speed issue
Maybe line RCC_OscInitStruct.PLL.PLLN = 75; vs RCC_OscInitStruct.PLL.PLLN = 85;

I am unfamiliar territory so just guessing

@fpistm
Copy link
Member

fpistm commented Jan 5, 2025

The generic should not be used. You use it because you add manually the define.
As said clock config have to be verified and maybe there is no issue @ALTracer simply configures it at lower speed than the max which is not an issue. Just something you don't expect.

@imk2021
Copy link

imk2021 commented Jan 5, 2025

Hello Frederic,
So does this mean that if I want to run the G474CE at full speed I need to have my own clock generator code?
As this seems to be out of line with all the other STM variants I have used.

Also will this not be confusing for other that use this board variant and expect it to run at full speed.
If so I think it should be mentioned in the release notes of this variant.
As people like myself moving from a F411 expect 70% speed increase get a 50% speed decrease.

Maybe ALTracer should comment please?

again Frederic, many many thanks for your help. IMK

@fpistm
Copy link
Member

fpistm commented Jan 5, 2025

Right, in general case , board clock configuration set it at max speed.

@imk2021
Copy link

imk2021 commented Jan 5, 2025

So I have just built my main robot app for WeAct G474CE with the generic clock hack on my test bed (not production machine) and it seems to be working as expect, some 70% or more quickly :-)
It uses serial1 at 115200, and i2c at 1mhz driving 3 VL53L5CX ToF's and a LSM6DSOX gyro without issues.
Also a hardware timer running 4 channel PWM as expected.

I have more testing to do but the only thing that looks a bit odd is PB2 as I think it maps to an analog port input port.
That was defined as digital output, maybe may migration mistake, much more testing to do.

What I will say is ALTracer many thanks for the big job you have done here with this variant and many thanks Frederic for your support. BTW is there some credit I can make/set against your avatars for this project?
All best IMK

@ALTracer
Copy link
Contributor Author

ALTracer commented Jan 5, 2025

As people like myself moving from a F411 expect 70% speed increase get a 50% speed decrease.

Maybe ALTracer should comment please?

@imk2021 While your expectations are valid, it's not always possible to reach max clocks. On single PLL devices like F411 and G474, USB48 constrains VCO to an integer multiple of it like 96, 192, 288, even though rated clocks are 100 and 150/170 -- hence I left the DIVQ to 6 which can provide 144/6=48MHz; but using CRS HSI48 is preferable.

@fpistm It is possible I misplaced some define/macro because I'm not familiar with this buildsystem; however I finally managed to set up bleeding edge (downloads of xPack and STM32_SVD from Github/Amazon/AWS are terribly slow, git clone --depth=1 outright fails over HTTPS but not SSH) and flashed a couple sketches. It is as they say, Blink has ~1/3 rate, and SystemCoreClock is neither 16 MHz (HSI16) nor 150/170 but actually 255 MHz? I'll need to re-check and re-generate SystemClockConfig from CubeMX, these were not directly copy-pasted.

Still, note that this board gets the correct clock.c implementation TU, not generic. There is a HSE8 we can use. It is not 24 or 25 MHz. Where do I set HSE speed, gcc cmdline or headers?

Hardware watchpoint 1: SystemCoreClock

Old value = 16000000
New value = 255000000
0x08000fc8 in HAL_RCC_ClockConfig (RCC_ClkInitStruct=0x2001ff84, FLatency=4)
    at /home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc.c:939
939       return HAL_InitTick(uwTickPrio);
(gdb) bt
#0  0x08000fc8 in HAL_RCC_ClockConfig (RCC_ClkInitStruct=0x2001ff84, FLatency=4)
    at /home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc.c:939
#1  0x080043a0 in SystemClock_Config ()
    at /home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/variants/STM32G4xx/G473C(B-C-E)U_G474C(B-C-E)U_G483CEU_G484CEU/variant_WEACT_G474CE.cpp:131
#2  0x0800314a in hw_config_init ()
    at /home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/libraries/SrcWrapper/src/stm32/hw_config.c:73
#3  0x0800462e in init ()
    at /home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino/board.c:11
#4  0x080043f4 in premain ()
    at /home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino/main.cpp:42
#5  0x080056c8 in __libc_init_array ()
#6  0x0800443e in Reset_Handler ()
GCC and linker two lines from Arduino 2.3.4 console

/home/altracer/.arduino15/packages/STMicroelectronics/tools/xpack-arm-none-eabi-gcc/13.2.1-1.1/bin/arm-none-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DVECT_TAB_OFFSET=0x0 -DUSE_HAL_DRIVER -DUSE_FULL_LL_DRIVER -mthumb @/home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/sketch/build.opt -c -Og -g -std=gnu17 -ffunction-sections -fdata-sections --param max-inline-insns-single=500 -MMD -I/tmp/.arduinoIDE-unsaved202505-466-wefwf0.tqndt/Blink -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino/avr -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino/stm32 -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino/../../libraries/SrcWrapper/inc -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino/../../libraries/SrcWrapper/inc/LL -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Drivers/STM32G4xx_HAL_Driver/Inc -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Drivers/STM32G4xx_HAL_Driver/Src -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/STM32G4xx -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino/../../libraries/USBDevice/inc -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Middlewares/ST/STM32_USB_Device_Library/Core/Src -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino/../../libraries/VirtIO/inc -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Middlewares/OpenAMP -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Middlewares/OpenAMP/open-amp/lib/include -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Middlewares/OpenAMP/libmetal/lib/include -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Middlewares/OpenAMP/virtual_driver -DSTM32G4xx -DARDUINO=10607 -DARDUINO_WEACT_G474CE -DARDUINO_ARCH_STM32 "-DBOARD_NAME=\"WEACT_G474CE\"" "-DVARIANT_H=\"variant_WEACT_G474CE.h\"" -DSTM32G474xx -DHAL_UART_MODULE_ENABLED -I/home/altracer/.arduino15/packages/STMicroelectronics/tools/CMSIS/5.9.0/CMSIS/Core/Include/ -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Drivers/CMSIS/Device/ST/STM32G4xx/Include/ -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/Drivers/CMSIS/Device/ST/STM32G4xx/Source/Templates/gcc/ -I/home/altracer/.arduino15/packages/STMicroelectronics/tools/CMSIS/5.9.0/CMSIS/DSP/Include -I/home/altracer/.arduino15/packages/STMicroelectronics/tools/CMSIS/5.9.0/CMSIS/DSP/PrivateInclude -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/cores/arduino -I/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/variants/STM32G4xx/G473C(B-C-E)U_G474C(B-C-E)U_G483CEU_G484CEU /home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/variants/STM32G4xx/G473C(B-C-E)U_G474C(B-C-E)U_G483CEU_G484CEU/generic_clock.c -o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/core/generic_clock.c.o
/home/altracer/.arduino15/packages/STMicroelectronics/tools/xpack-arm-none-eabi-gcc/13.2.1-1.1/bin/arm-none-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Og -g --specs=nano.specs -Wl,--defsym=LD_FLASH_OFFSET=0x0 -Wl,--defsym=LD_MAX_SIZE=524288 -Wl,--defsym=LD_MAX_DATA_SIZE=131072 -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--default-script=/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/variants/STM32G4xx/G473C(B-C-E)U_G474C(B-C-E)U_G483CEU_G484CEU/ldscript.ld -Wl,--script=/home/altracer/.arduino15/packages/STMicroelectronics/hardware/stm32/2.10.0/system/ldscript.ld -Wl,-Map,/home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/Blink.ino.map -Wl,--no-warn-rwx-segments -o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/Blink.ino.elf -L/home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A -Wl,--start-group /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/sketch/Blink.ino.cpp.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/sketch/requiredLibraries.cpp.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_adc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_adc_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_can.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_cec.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_comp.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_comp_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_cordic.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_cortex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_crc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_crc_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_cryp.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_cryp_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dac.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dac_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dcache.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dcmi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dcmi_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dfsdm.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dfsdm_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dma.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dma2d.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dma_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dsi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_dts.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_eth.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_eth_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_exti.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_fdcan.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_firewall.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_flash.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_flash_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_flash_ramfunc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_fmac.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_fmpi2c.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_fmpi2c_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_fmpsmbus.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_fmpsmbus_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_gfxmmu.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_gfxtim.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_gpio.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_gpio_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_gpu2d.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_gtzc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_hash.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_hash_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_hcd.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_hrtim.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_hsem.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_i2c.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_i2c_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_i2s.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_i2s_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_i3c.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_icache.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_ipcc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_irda.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_iwdg.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_jpeg.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_lcd.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_lptim.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_ltdc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_ltdc_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_mdf.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_mdios.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_mdma.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_mmc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_mmc_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_nand.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_nor.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_opamp.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_opamp_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_ospi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_otfdec.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_pccard.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_pcd.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_pcd_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_pka.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_pssi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_pwr.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_pwr_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_qspi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_ramcfg.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_ramecc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_rcc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_rcc_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_rng.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_rng_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_rtc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_rtc_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_sai.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_sai_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_sd.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_sd_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_sdadc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_sdio.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_sdram.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_smartcard.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_smartcard_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_smbus.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_smbus_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_spdifrx.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_spi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_spi_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_sram.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_subghz.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_swpmi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_tim.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_tim_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_tsc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_uart.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_uart_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_usart.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_usart_ex.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_wwdg.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HAL/stm32yyxx_hal_xspi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/HardwareTimer.cpp.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_adc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_bdma.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_comp.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_cordic.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_crc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_crs.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_dac.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_delayblock.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_dlyb.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_dma.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_dma2d.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_exti.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_fmac.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_fmc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_fmpi2c.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_fsmc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_gpio.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_hrtim.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_i2c.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_i3c.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_icache.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_lpgpio.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_lptim.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_lpuart.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_mdma.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_opamp.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_pka.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_pwr.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_rcc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_rng.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_rtc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_sdmmc.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_spi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_swpmi.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_tim.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_ucpd.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_usart.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_usb.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/LL/stm32yyxx_ll_utils.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/new.cpp.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/PortNames.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/analog.cpp.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/bootloader.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/clock.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/core_callback.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/dwt.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/hw_config.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/interrupt.cpp.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/otp.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/pinmap.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/stm32_def.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/system_stm32yyxx.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/timer.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/stm32/uart.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/libraries/SrcWrapper/syscalls.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/core/PeripheralPins.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/core/generic_clock.c.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/core/variant_WEACT_G474CE.cpp.o /home/altracer/.cache/arduino/sketches/60934D87944DC1FB6D67A271E26A848A/core/variant_generic.cpp.o /home/altracer/.cache/arduino/cores/caf91aa548e1164c0dbbc8d4ef09fdcf/core.a -lc -Wl,--end-group -lm -lgcc -lstdc++

@imk2021
Copy link

imk2021 commented Jan 6, 2025

Hello ALTracer, again many thanks for the contribution you are making re bringing this board into Arduino, I for one really appreciate it. Re this clock matter, I have been using Arduino AVR for years for all sorts of little projects, however these AVR chips do lack speed. So when I embarked on this currently now 3 year mission robotics project I knew I need more speed so I went for STM32 arm chips using ST's HAL and found it a steep learning curve, then I discovered STM32Duino so I abandoned HAL and have been STM32Duino committed ever since. Hence you have my admiration using the STM32 HAL clock generator which from my experience is not easy, hence I thank you again.

As for your question to fpistm re clock speed option command line or header, remember many of the Arduino users are not deeply experienced in micro-controls hence it is why we have Arduino. So my input would be whatever fits the keep it simple Arduino philosophy, which I think might be some header macros eg WEACT_G747_CLOCK_100_MHZ or WEACT_G747_CLOCK_150_MHZ or WEACT_G747_CLOCK_170_MHZ etc.

I look forward to your clock updates.

All best IMK

@ALTracer
Copy link
Contributor Author

ALTracer commented Jan 6, 2025

@imk2021 There is more to performance than Cortex-M4F clock speed -- e.g. 90nm ST NVM Flash is only 30 MHz, anything faster requires multiple wait states, luckily ST also added ART that is effectively I-cache and D-cache outside of CM4F. Using I-bus fetch from CCM SRAM is not exactly easy in Arduino paradigm -- there is __RAM_FUNC but only one RAM section comprised of SRAM1, SRAM2, CCM in that order, resulting in S-bus fetch and contention.

@fpistm I've added and tested a couple changes to WeAct variant. Basically it got HSE_VALUE from system/STM32G4xx/stm32g4xx_hal_conf_default.h of 24 MHz, which explains the 3x slowdown of millis() we both observe, and 255 MHz SystemCoreClock calculated as 24M/4*85/2 (is actually 8M/4*85/2=85 MHz?).
My PLL clock config is probably bad because it sets HSE8 div4 = 2 MHz input of a 2.66-16.0 MHz rated PLL (DS12288), I'll update it. And the multiplier can be set for 170M (max) with CRS HSI48, or 144M (USB PLL) without HSI48. CDC-ACM device works and prints millis matching host tio timestamping in both cases I just tested. Follow-up PR pending.

Advanced users can always bring their own SystemClock_Config to override the weak impl in variant.cpp. I also value the benefits of G4, like analog domain peripherals and CORDIC and proper DMAMUX and HRTIM, but I guess top clock speed is more important than working USB fsdev (G4 cannot be a USB Host or OTG/DRD).

@fpistm
Copy link
Member

fpistm commented Jan 6, 2025

I've planned to check if HSE_VALUE was correct. So, seems OK now.

@imk2021
Copy link

imk2021 commented Jan 9, 2025

Hello ALTracer and fpistm and many thanks for the clock update I am checking it at this time and it seems to be as expected.
However I am wondering if there is a pin mapping issue or is it my misunderstanding of pin mapping
I have defined PB0 as a digital output pin and in my testing .ino it toggles as expected.
However when I call analogRead( PA10 ), PB0 changes mode and seems to become an analog input port?
Many thanks imk
BTW when is arduino stm 2.10 expected release date please

void setup()
{
pinMode( PB0 , OUTPUT );
}

void loop()
{
digitalWrite( PB0 , !digitalRead( PB0 ) );
// Remove this comment and port PB0 stops being digital out int PortValue = analogRead( PA10 );
delay( 10 );
}

@fpistm
Copy link
Member

fpistm commented Jan 9, 2025

Could you test this example:
https://github.com/stm32duino/STM32Examples/tree/main/examples/NonReg/CheckVariant

Simply install the library and example will be available

@imk2021
Copy link

imk2021 commented Jan 9, 2025

fpistm,
Sorry can't figure out how to install as Library.
Tried to compile chk variant but miss function i guess due to missing util.x
imk

@imk2021
Copy link

imk2021 commented Jan 9, 2025

hello fpistm
found lib at top level downloaded zip, install via ide2 found example loads of build errors checkDigitalPins
Never mind uses pins as i find them.
Many thanks for all your help.
Any idea when 2.10 will be released please?
imk

@fpistm
Copy link
Member

fpistm commented Jan 9, 2025

hello fpistm found lib at top level downloaded zip, install via ide2 found example loads of build errors checkDigitalPins Never mind uses pins as i find them. M

Don't understand, Is the example run? what is the result ?
Anyway looking the pin mapping, found no issue.

2.10.0 not planned before end of February (at least)

@fpistm
Copy link
Member

fpistm commented Jan 9, 2025

Moreover, your code is not correct:
digitalWrite( PB0 , !digitalRead( PB0 ) );
PB0 configured as output not input. so digitalRead usage is not correct. Use digitalToggle instead.

@imk2021
Copy link

imk2021 commented Jan 9, 2025

hello fpistm and thanks for the update.
I have replaced digitalWrite( PB0 , !digitalRead( PB0 ) ); with digitalToggle( PB0 ); test results below.
Could this issue be caused by the way I installed the variant as I just downloaded the ALTracer files and put them in my 2.9 folder (I Think) correct folders?
Would I be better waiting for official 2.10 release as I have lots of board building/soldering to do in meantime or happy to do further testing, up to you.
All best imk

Test one:
I have oscilloscope monitoring WeAct board pin B0 and can see the 50hz output
void setup()
{
pinMode( PB0 , OUTPUT );
}
void loop()
{
digitalToggle( PB0 );
delay( 10 );
}

Test two:
I have oscilloscope monitoring WeAct board pin B0 and there is no 50hz output, basically the analogRead( PA10 ); changes pin B0 to analog input as it becomes high impedance. As I can touch the scope probe and see induced noise on scope.
void setup()
{
pinMode( PB0 , OUTPUT );
}

void loop()
{
digitalToggle( PB0 );
int PortValue = analogRead( PA10 );
delay( 10 );
}

@imk2021
Copy link

imk2021 commented Jan 9, 2025

Hello fpistm
When in IDE2 looking at above test sketch and hover mouse over PB0 it pops up #define PB0 PIN_A10
Does this give clue, imk

@fpistm
Copy link
Member

fpistm commented Jan 9, 2025

No clue to have, this is correct.
I do not have this board. Tested on G431 and not issue.
Honestly, don't know what is your issue but this API are generic.
So several options:

  • Hardware issue: PCB or mcu.
  • HAL G4

@fpistm
Copy link
Member

fpistm commented Jan 9, 2025

Looking at the shematics and the mcu errata sheets. I see no issue.
Last option I can see, a wrong clock config but I can't help more as I do not have the hardware.

I lock the conversation to no pollute more this PR.

@stm32duino stm32duino locked and limited conversation to collaborators Jan 9, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
new variant Add support of new bard
Projects
Development

Successfully merging this pull request may close these issues.

STM32G474CEU6 for WeAct Boards
3 participants