Skip to content

Commit 9907d16

Browse files
committed
[G4] Update core to support G4
Signed-off-by: Frederic Pillon <[email protected]>
1 parent c8654e5 commit 9907d16

File tree

11 files changed

+228
-42
lines changed

11 files changed

+228
-42
lines changed

cores/arduino/pins_arduino.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,16 @@ PinName analogInputToPinName(uint32_t pin)
4040
PinName pn = digitalPinToPinName(analogInputToDigitalPin(pin));
4141
if (pn == NC) {
4242
switch (pin) {
43-
#ifdef ATEMP
43+
#if defined(ADC_CHANNEL_TEMPSENSOR) || defined(ADC_CHANNEL_TEMPSENSOR_ADC1)
4444
case ATEMP:
4545
pn = PADC_TEMP;
4646
break;
4747
#endif
48+
#if defined(ADC5) && defined(ADC_CHANNEL_TEMPSENSOR_ADC5)
49+
case ATEMP_ADC5:
50+
pn = PADC_TEMP_ADC5;
51+
break;
52+
#endif
4853
#ifdef AVREF
4954
case AVREF:
5055
pn = PADC_VREF;

cores/arduino/pins_arduino.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ static const uint8_t SCL = PIN_WIRE_SCL;
203203

204204
// ADC internal channels (not a pins)
205205
// Only used for analogRead()
206-
#ifdef ADC_CHANNEL_TEMPSENSOR
206+
#if defined(ADC_CHANNEL_TEMPSENSOR) || defined(ADC_CHANNEL_TEMPSENSOR_ADC1)
207207
#define ATEMP (NUM_DIGITAL_PINS + 1)
208208
#endif
209209
#ifdef ADC_CHANNEL_VREFINT
@@ -212,6 +212,9 @@ static const uint8_t SCL = PIN_WIRE_SCL;
212212
#ifdef ADC_CHANNEL_VBAT
213213
#define AVBAT (NUM_DIGITAL_PINS + 3)
214214
#endif
215+
#if defined(ADC5) && defined(ADC_CHANNEL_TEMPSENSOR_ADC5)
216+
#define ATEMP_ADC5 (NUM_DIGITAL_PINS + 4)
217+
#endif
215218

216219
#ifdef __cplusplus
217220
extern "C" {

cores/arduino/stm32/LL/stm32yyxx_ll_fmc.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
#include "stm32f7xx_ll_fmc.c"
99
#endif
1010
#ifdef STM32G4xx
11-
#include "stm32g4xx_ll_fmc.c"
11+
/*
12+
* Build issue as not properly guard in current
13+
* version if stm32g4xx_ll_fmc.h is not include
14+
*/
15+
/*#include "stm32g4xx_ll_fmc.c"*/
1216
#endif
1317
#ifdef STM32H7xx
1418
/*

cores/arduino/stm32/PinNames.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,12 @@ typedef enum {
210210
#endif
211211
// Specific pin name
212212
PADC_BASE = 0x100,
213-
#ifdef ADC_CHANNEL_TEMPSENSOR
213+
#if defined(ADC_CHANNEL_TEMPSENSOR) || defined(ADC_CHANNEL_TEMPSENSOR_ADC1)
214214
PADC_TEMP,
215215
#endif
216+
#if defined(ADC5) && defined(ADC_CHANNEL_TEMPSENSOR_ADC5)
217+
PADC_TEMP_ADC5,
218+
#endif
216219
#ifdef ADC_CHANNEL_VREFINT
217220
PADC_VREF,
218221
#endif

cores/arduino/stm32/analog.c

Lines changed: 176 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -239,11 +239,21 @@ static uint32_t get_adc_internal_channel(PinName pin)
239239
{
240240
uint32_t channel = 0;
241241
switch (pin) {
242-
#ifdef ADC_CHANNEL_TEMPSENSOR
242+
#if defined(ADC_CHANNEL_TEMPSENSOR)
243243
case PADC_TEMP:
244244
channel = ADC_CHANNEL_TEMPSENSOR;
245245
break;
246246
#endif
247+
#if defined(ADC_CHANNEL_TEMPSENSOR_ADC1)
248+
case PADC_TEMP:
249+
channel = ADC_CHANNEL_TEMPSENSOR_ADC1;
250+
break;
251+
#endif
252+
#if defined(ADC5) && defined(ADC_CHANNEL_TEMPSENSOR_ADC5)
253+
case PADC_TEMP_ADC5:
254+
channel = ADC_CHANNEL_TEMPSENSOR_ADC5;
255+
break;
256+
#endif
247257
#ifdef ADC_CHANNEL_VREFINT
248258
case PADC_VREF:
249259
channel = ADC_CHANNEL_VREFINT;
@@ -326,18 +336,43 @@ static uint32_t get_dac_channel(PinName pin)
326336
*/
327337
void HAL_DAC_MspInit(DAC_HandleTypeDef *hdac)
328338
{
329-
UNUSED(hdac);
330-
331339
/* DAC Periph clock enable */
340+
if (hdac->Instance == DAC1) {
341+
#ifdef __HAL_RCC_DAC_CLK_ENABLE
342+
__HAL_RCC_DAC_CLK_ENABLE();
343+
#endif
332344
#ifdef __HAL_RCC_DAC1_CLK_ENABLE
333-
__HAL_RCC_DAC1_CLK_ENABLE();
345+
__HAL_RCC_DAC1_CLK_ENABLE();
334346
#endif
335-
#ifdef __HAL_RCC_DAC_CLK_ENABLE
336-
__HAL_RCC_DAC_CLK_ENABLE();
347+
#ifdef __HAL_RCC_DAC12_CLK_ENABLE
348+
__HAL_RCC_DAC12_CLK_ENABLE();
349+
#endif
350+
}
351+
#ifdef DAC2
352+
else if (hdac->Instance == DAC2) {
353+
#ifdef __HAL_RCC_DAC2_CLK_ENABLE
354+
__HAL_RCC_DAC2_CLK_ENABLE();
337355
#endif
338356
#ifdef __HAL_RCC_DAC12_CLK_ENABLE
339-
__HAL_RCC_DAC12_CLK_ENABLE();
357+
__HAL_RCC_DAC12_CLK_ENABLE();
358+
#endif
359+
}
360+
#endif
361+
#ifdef DAC3
362+
else if (hdac->Instance == DAC3) {
363+
#ifdef __HAL_RCC_DAC3_CLK_ENABLE
364+
__HAL_RCC_DAC3_CLK_ENABLE();
365+
#endif
366+
}
367+
#endif
368+
#ifdef DAC4
369+
else if (hdac->Instance == DAC4) {
370+
#ifdef __HAL_RCC_DAC4_CLK_ENABLE
371+
__HAL_RCC_DAC4_CLK_ENABLE();
340372
#endif
373+
}
374+
#endif
375+
341376
/* Configure DAC GPIO pins */
342377
pinmap_pinout(g_current_pin, PinMap_DAC);
343378
}
@@ -362,7 +397,11 @@ void dac_write_value(PinName pin, uint32_t value, uint8_t do_init)
362397
return;
363398
}
364399
dacChannel = get_dac_channel(pin);
400+
#if defined(STM32G4xx)
401+
if (!IS_DAC_CHANNEL(DacHandle.Instance, dacChannel)) {
402+
#else
365403
if (!IS_DAC_CHANNEL(dacChannel)) {
404+
#endif
366405
return;
367406
}
368407
if (do_init == 1) {
@@ -406,13 +445,83 @@ void dac_write_value(PinName pin, uint32_t value, uint8_t do_init)
406445
*/
407446
void HAL_DAC_MspDeInit(DAC_HandleTypeDef *hdac)
408447
{
409-
UNUSED(hdac);
410448
/* DAC Periph clock disable */
411-
#ifdef __HAL_RCC_DAC1_CLK_DISABLE
412-
__HAL_RCC_DAC1_CLK_DISABLE();
449+
if (hdac->Instance == DAC1) {
450+
#ifdef __HAL_RCC_DAC_FORCE_RESET
451+
__HAL_RCC_DAC_FORCE_RESET();
452+
#endif
453+
#ifdef __HAL_RCC_DAC1_FORCE_RESET
454+
__HAL_RCC_DAC1_FORCE_RESET();
455+
#endif
456+
#ifdef __HAL_RCC_DAC12_FORCE_RESET
457+
__HAL_RCC_DAC12_FORCE_RESET();
458+
#endif
459+
#ifdef __HAL_RCC_DAC_RELEASE_RESET
460+
__HAL_RCC_DAC_RELEASE_RESET();
461+
#endif
462+
#ifdef __HAL_RCC_DAC1_RELEASE_RESET
463+
__HAL_RCC_DAC1_RELEASE_RESET();
464+
#endif
465+
#ifdef __HAL_RCC_DAC12_RELEASE_RESET
466+
__HAL_RCC_DAC12_RELEASE_RESET();
413467
#endif
414468
#ifdef __HAL_RCC_DAC_CLK_DISABLE
415-
__HAL_RCC_DAC_CLK_DISABLE();
469+
__HAL_RCC_DAC_CLK_DISABLE();
470+
#endif
471+
#ifdef __HAL_RCC_DAC1_CLK_DISABLE
472+
__HAL_RCC_DAC1_CLK_DISABLE();
473+
#endif
474+
#ifdef __HAL_RCC_DAC12_CLK_ENABLE
475+
__HAL_RCC_DAC12_CLK_ENABLE();
476+
#endif
477+
}
478+
#ifdef DAC2
479+
else if (hdac->Instance == DAC2) {
480+
#ifdef __HAL_RCC_DAC2_FORCE_RESET
481+
__HAL_RCC_DAC2_FORCE_RESET();
482+
#endif
483+
#ifdef __HAL_RCC_DAC12_FORCE_RESET
484+
__HAL_RCC_DAC12_FORCE_RESET();
485+
#endif
486+
#ifdef __HAL_RCC_DAC2_RELEASE_RESET
487+
__HAL_RCC_DAC2_RELEASE_RESET();
488+
#endif
489+
#ifdef __HAL_RCC_DAC12_RELEASE_RESET
490+
__HAL_RCC_DAC12_RELEASE_RESET();
491+
#endif
492+
#ifdef __HAL_RCC_DAC2_CLK_ENABLE
493+
__HAL_RCC_DAC2_CLK_ENABLE();
494+
#endif
495+
#ifdef __HAL_RCC_DAC12_CLK_ENABLE
496+
__HAL_RCC_DAC12_CLK_ENABLE();
497+
#endif
498+
}
499+
#endif
500+
#ifdef DAC3
501+
else if (hdac->Instance == DAC3) {
502+
#ifdef __HAL_RCC_DAC3_FORCE_RESET
503+
__HAL_RCC_DAC3_FORCE_RESET();
504+
#endif
505+
#ifdef __HAL_RCC_DAC3_RELEASE_RESET
506+
__HAL_RCC_DAC3_RELEASE_RESET();
507+
#endif
508+
#ifdef __HAL_RCC_DAC3_CLK_DISABLE
509+
__HAL_RCC_DAC3_CLK_DISABLE();
510+
#endif
511+
}
512+
#endif
513+
#ifdef DAC4
514+
else if (hdac->Instance == DAC4) {
515+
#ifdef __HAL_RCC_DAC4_FORCE_RESET
516+
__HAL_RCC_DAC4_FORCE_RESET();
517+
#endif
518+
#ifdef __HAL_RCC_DAC4_RELEASE_RESET
519+
__HAL_RCC_DAC4_RELEASE_RESET();
520+
#endif
521+
#ifdef __HAL_RCC_DAC4_CLK_DISABLE
522+
__HAL_RCC_DAC4_CLK_DISABLE();
523+
#endif
524+
}
416525
#endif
417526
}
418527

@@ -432,7 +541,11 @@ void dac_stop(PinName pin)
432541
return;
433542
}
434543
dacChannel = get_dac_channel(pin);
544+
#if defined(STM32G4xx)
545+
if (!IS_DAC_CHANNEL(DacHandle.Instance, dacChannel)) {
546+
#else
435547
if (!IS_DAC_CHANNEL(dacChannel)) {
548+
#endif
436549
return;
437550
}
438551

@@ -485,15 +598,29 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
485598
#endif
486599
#ifdef __HAL_RCC_ADC34_CLK_ENABLE
487600
__HAL_RCC_ADC34_CLK_ENABLE();
601+
#endif
602+
#if defined(ADC345_COMMON)
603+
__HAL_RCC_ADC345_CLK_ENABLE();
488604
#endif
489605
}
490606
#endif
491607
#ifdef ADC4
492608
else if (hadc->Instance == ADC4) {
609+
#ifdef __HAL_RCC_ADC34_CLK_ENABLE
493610
__HAL_RCC_ADC34_CLK_ENABLE();
611+
#endif
612+
#if defined(ADC345_COMMON)
613+
__HAL_RCC_ADC345_CLK_ENABLE();
614+
#endif
615+
}
616+
#endif
617+
#ifdef ADC5
618+
else if (hadc->Instance == ADC5) {
619+
#if defined(ADC345_COMMON)
620+
__HAL_RCC_ADC345_CLK_ENABLE();
621+
#endif
494622
}
495623
#endif
496-
497624
#ifdef __HAL_RCC_ADC_CLK_ENABLE
498625
__HAL_RCC_ADC_CLK_ENABLE();
499626
#endif
@@ -585,14 +712,39 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc)
585712
#endif
586713
#ifdef __HAL_RCC_ADC34_CLK_DISABLE
587714
__HAL_RCC_ADC34_CLK_DISABLE();
715+
#endif
716+
#if defined(ADC345_COMMON)
717+
__HAL_RCC_ADC345_FORCE_RESET();
718+
__HAL_RCC_ADC345_RELEASE_RESET();
719+
__HAL_RCC_ADC345_CLK_DISABLE();
588720
#endif
589721
}
590722
#endif
591723
#ifdef ADC4
592724
else if (hadc->Instance == ADC4) {
725+
#ifdef __HAL_RCC_ADC34_FORCE_RESET
593726
__HAL_RCC_ADC34_FORCE_RESET();
727+
#endif
728+
#ifdef __HAL_RCC_ADC34_RELEASE_RESET
594729
__HAL_RCC_ADC34_RELEASE_RESET();
730+
#endif
731+
#ifdef __HAL_RCC_ADC34_CLK_DISABLE
595732
__HAL_RCC_ADC34_CLK_DISABLE();
733+
#endif
734+
#if defined(ADC345_COMMON)
735+
__HAL_RCC_ADC345_FORCE_RESET();
736+
__HAL_RCC_ADC345_RELEASE_RESET();
737+
__HAL_RCC_ADC345_CLK_DISABLE();
738+
#endif
739+
}
740+
#endif
741+
#ifdef ADC5
742+
else if (hadc->Instance == ADC5) {
743+
#if defined(ADC345_COMMON)
744+
__HAL_RCC_ADC345_FORCE_RESET();
745+
__HAL_RCC_ADC345_RELEASE_RESET();
746+
__HAL_RCC_ADC345_CLK_DISABLE();
747+
#endif
596748
}
597749
#endif
598750
#ifdef __HAL_RCC_ADC_CLK_DISABLE
@@ -620,6 +772,11 @@ uint16_t adc_read_value(PinName pin)
620772
AdcHandle.Instance = ADC3;
621773
#else
622774
AdcHandle.Instance = ADC1;
775+
#if defined(ADC5) && defined(ADC_CHANNEL_TEMPSENSOR_ADC5)
776+
if (pin == PADC_TEMP_ADC5) {
777+
AdcHandle.Instance = ADC5;
778+
}
779+
#endif
623780
#endif
624781
channel = get_adc_internal_channel(pin);
625782
samplingTime = ADC_SAMPLINGTIME_INTERNAL;
@@ -650,8 +807,8 @@ uint16_t adc_read_value(PinName pin)
650807
AdcHandle.Init.LowPowerAutoWait = DISABLE; /* Auto-delayed conversion feature disabled */
651808
#endif
652809
#if !defined(STM32F1xx) && !defined(STM32F2xx) && !defined(STM32F3xx) && \
653-
!defined(STM32F4xx) && !defined(STM32F7xx) && !defined(STM32H7xx) && \
654-
!defined(STM32L4xx) && !defined(STM32WBxx)
810+
!defined(STM32F4xx) && !defined(STM32F7xx) && !defined(STM32G4xx) && \
811+
!defined(STM32H7xx) && !defined(STM32L4xx) && !defined(STM32WBxx)
655812
AdcHandle.Init.LowPowerAutoPowerOff = DISABLE; /* ADC automatically powers-off after a conversion and automatically wakes-up when a new conversion is triggered */
656813
#endif
657814
#ifdef ADC_CHANNELS_BANK_A
@@ -724,13 +881,13 @@ uint16_t adc_read_value(PinName pin)
724881

725882
#if defined(STM32L4xx) || defined(STM32WBxx)
726883
if (!IS_ADC_CHANNEL(&AdcHandle, AdcChannelConf.Channel)) {
727-
return 0;
728-
}
884+
#elif defined(STM32G4xx)
885+
if (!IS_ADC_CHANNEL(&AdcHandle, AdcChannelConf.Channel)) {
729886
#else
730887
if (!IS_ADC_CHANNEL(AdcChannelConf.Channel)) {
888+
#endif /* STM32L4xx || STM32WBxx */
731889
return 0;
732890
}
733-
#endif /* STM32L4xx || STM32WBxx */
734891
AdcChannelConf.Rank = ADC_REGULAR_RANK_1; /* Specifies the rank in the regular group sequencer */
735892
#if !defined(STM32L0xx)
736893
#if !defined(STM32G0xx)
@@ -763,8 +920,8 @@ uint16_t adc_read_value(PinName pin)
763920
}
764921

765922
#if defined(STM32F0xx) || defined(STM32F1xx) || defined(STM32F3xx) || \
766-
defined(STM32G0xx) || defined(STM32H7xx) || defined(STM32L0xx) || \
767-
defined(STM32L4xx) || defined(STM32WBxx)
923+
defined(STM32G0xx) || defined(STM32G4xx) || defined(STM32H7xx) || \
924+
defined(STM32L0xx) || defined(STM32L4xx) || defined(STM32WBxx)
768925
/*##-2.1- Calibrate ADC then Start the conversion process ####################*/
769926
#if defined(STM32F0xx) || defined(STM32G0xx) || defined(STM32F1xx) || \
770927
defined(STM32F373xC) || defined(STM32F378xx)

cores/arduino/stm32/backup.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ static inline void setBackupRegister(uint32_t index, uint32_t value)
124124
LL_RTC_BKP_SetRegister(BKP, index, value);
125125
#elif defined(STM32G0xx)
126126
LL_RTC_BKP_SetRegister(TAMP, index, value);
127+
#elif defined(STM32G4xx)
128+
LL_RTC_BKP_SetRegister(RTC, index, value);
127129
#else
128130
#ifdef ENABLE_BACKUP_SUPPORT
129131
LL_RTC_BAK_SetRegister(RTC, index, value);
@@ -140,6 +142,8 @@ static inline uint32_t getBackupRegister(uint32_t index)
140142
return LL_RTC_BKP_GetRegister(BKP, index);
141143
#elif defined(STM32G0xx)
142144
return LL_RTC_BKP_GetRegister(TAMP, index);
145+
#elif defined(STM32G4xx)
146+
return LL_RTC_BKP_GetRegister(RTC, index);
143147
#else
144148
#ifdef ENABLE_BACKUP_SUPPORT
145149
return LL_RTC_BAK_GetRegister(RTC, index);

cores/arduino/stm32/rtc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ static void RTC_initClock(sourceClock_t source)
125125
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_HSE_DIV128;
126126
HSEDiv = 128;
127127
#elif defined(STM32F0xx) || defined(STM32F3xx) || defined(STM32G0xx) ||\
128-
defined(STM32L4xx) || defined(STM32WBxx)
128+
defined(STM32G4xx) || defined(STM32L4xx) || defined(STM32WBxx)
129129
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_HSE_DIV32;
130130
HSEDiv = 32;
131131
#elif defined(STM32L0xx) || defined(STM32L1xx)

0 commit comments

Comments
 (0)