@@ -31,32 +31,86 @@ static int calibration_value = 0;
3131/* Private_Defines */
3232#if defined(ADC_MODULE_ENABLED) && !defined(ADC_MODULE_ONLY)
3333
34- #if (defined(CH32V20x) || defined(CH32V30x) || defined(CH32V30x_C) || defined(CH32V10x) )
34+ #if (defined(CH32V20x) || defined(CH32V30x) || defined(CH32V30x_C) || defined(CH32V10x) || defined(CH32L10x) || defined(CH32VM00X) )
3535
3636/* Default to use maximum sampling period */
37+ #if defined(CH32L10x) || defined(CH32VM00X)
38+
3739#ifndef ADC_SAMPLINGTIME
38- #if defined(ADC_SampleTime_239Cycles5)
39- #define ADC_SAMPLINGTIME ADC_SampleTime_239Cycles5;
40+ #if defined(ADC_SampleTime_CyclesMode7)
41+ #define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode7
42+ #elif defined(ADC_SampleTime_CyclesMode6)
43+ #define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode6
44+ #elif defined(ADC_SampleTime_CyclesMode5)
45+ #define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode5
46+ #elif defined(ADC_SampleTime_CyclesMode4)
47+ #define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode4
48+ #elif defined(ADC_SampleTime_CyclesMode3)
49+ #define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode3
50+ #elif defined(ADC_SampleTime_CyclesMode2)
51+ #define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode2
52+ #elif defined(ADC_SampleTime_CyclesMode1)
53+ #define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode1
54+ #elif defined(ADC_SampleTime_CyclesMode0)
55+ #define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode0
56+ #endif
57+ #endif /* !ADC_SAMPLINGTIME */
58+
59+ #else
60+
61+ #ifndef ADC_SAMPLINGTIME
62+ #if defined(ADC_SampleTime_239Cycles5)
63+ #define ADC_SAMPLINGTIME ADC_SampleTime_239Cycles5
4064#elif defined(ADC_SampleTime_71Cycles5)
41- #define ADC_SAMPLINGTIME ADC_SampleTime_71Cycles5;
65+ #define ADC_SAMPLINGTIME ADC_SampleTime_71Cycles5
4266#elif defined(ADC_SampleTime_55Cycles5)
43- #define ADC_SAMPLINGTIME ADC_SampleTime_55Cycles5;
67+ #define ADC_SAMPLINGTIME ADC_SampleTime_55Cycles5
4468#elif defined(ADC_SampleTime_41Cycles5)
45- #define ADC_SAMPLINGTIME ADC_SampleTime_41Cycles5;
69+ #define ADC_SAMPLINGTIME ADC_SampleTime_41Cycles5
4670#elif defined(ADC_SampleTime_28Cycles5)
47- #define ADC_SAMPLINGTIME ADC_SampleTime_28Cycles5;
71+ #define ADC_SAMPLINGTIME ADC_SampleTime_28Cycles5
4872#elif defined(ADC_SampleTime_13Cycles5)
49- #define ADC_SAMPLINGTIME ADC_SampleTime_13Cycles5;
73+ #define ADC_SAMPLINGTIME ADC_SampleTime_13Cycles5
5074#elif defined(ADC_SampleTime_7Cycles5)
51- #define ADC_SAMPLINGTIME ADC_SampleTime_7Cycles5;
75+ #define ADC_SAMPLINGTIME ADC_SampleTime_7Cycles5
5276#elif defined(ADC_SampleTime_1Cycles5)
5377#define ADC_SAMPLINGTIME ADC_SampleTime_1Cycles5
5478#endif
5579#endif /* !ADC_SAMPLINGTIME */
5680
81+ #endif /* CH32L10x */
82+
83+
5784/*
5885 * Default to use maximum sampling period
5986 */
87+
88+ #if defined(CH32L10x) || defined(CH32VM00X)
89+
90+ #ifndef ADC_SAMPLINGTIME_INTERNAL
91+ #if defined(ADC_SampleTime_CyclesMode7)
92+ #define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode7
93+ #elif defined(ADC_SampleTime_CyclesMode6)
94+ #define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode6
95+ #elif defined(ADC_SampleTime_CyclesMode5)
96+ #define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode5
97+ #elif defined(ADC_SampleTime_CyclesMode4)
98+ #define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode4
99+ #elif defined(ADC_SampleTime_CyclesMode3)
100+ #define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode3
101+ #elif defined(ADC_SampleTime_CyclesMode2)
102+ #define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode2
103+ #elif defined(ADC_SampleTime_CyclesMode1)
104+ #define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode1
105+ #elif defined(ADC_SampleTime_CyclesMode0)
106+ #define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode0
107+ #else
108+ #error "ADC sampling time could not be defined for internal channels!"
109+ #endif
110+ #endif /* !ADC_SAMPLINGTIME_INTERNAL */
111+
112+ #else
113+
60114#ifndef ADC_SAMPLINGTIME_INTERNAL
61115#if defined(ADC_SampleTime_239Cycles5)
62116#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_239Cycles5
@@ -79,6 +133,11 @@ static int calibration_value = 0;
79133#endif
80134#endif /* !ADC_SAMPLINGTIME_INTERNAL */
81135
136+
137+ #endif
138+
139+
140+
82141#ifndef ADC_CLOCK_DIV
83142#ifdef RCC_PCLK2_Div8
84143#define ADC_CLOCK_DIV RCC_PCLK2_Div8
@@ -264,13 +323,17 @@ uint32_t get_adc_channel(PinName pin)
264323 case 8 :
265324 channel = ADC_Channel_8;
266325 break ;
326+ #ifdef ADC_Channel_9
267327 case 9 :
268328 channel = ADC_Channel_9;
269329 break ;
330+ #endif
270331#ifdef ADC_Channel_10
271332 case 10 :
272333 channel = ADC_Channel_10;
273334 break ;
335+ #endif
336+ #ifdef ADC_Channel_11
274337 case 11 :
275338 channel = ADC_Channel_11;
276339 break ;
@@ -423,8 +486,13 @@ void dac_write_value(PinName pin, uint32_t value, uint8_t do_init)
423486
424487 if (do_init == 1 )
425488 {
489+ #if defined(CH32L10x)
490+ RCC_PB2PeriphClockCmd (RCC_PB2Periph_GPIOA, ENABLE );
491+ RCC_PB1PeriphClockCmd (RCC_PB1Periph_DAC, ENABLE );
492+ #else
426493 RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA, ENABLE );
427494 RCC_APB1PeriphClockCmd (RCC_APB1Periph_DAC, ENABLE );
495+ #endif
428496 /* ##-1- Configure the DAC peripheral */
429497 g_current_pin = pin;
430498
@@ -503,13 +571,21 @@ void ADC_Clock_EN(ADC_TypeDef *padc)
503571 #ifdef RCC_APB2Periph_ADC1
504572 RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC1 , ENABLE ); // ENABLE ADC1 Clock
505573 #endif
574+
575+ #ifdef RCC_PB2Periph_ADC1
576+ RCC_PB2PeriphClockCmd (RCC_PB2Periph_ADC1 , ENABLE ); // ENABLE ADC1 Clock for CH32L10x
577+ #endif
506578 }
507579#ifdef ADC2
508580 else if (padc == ADC2)
509581 {
510582 #ifdef RCC_APB2Periph_ADC2
511- RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC2 , ENABLE ); // ENABLE ADC2 Clock
583+ RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC2 , ENABLE ); // ENABLE ADC2 Clock
512584 #endif
585+
586+ #ifdef RCC_PB2Periph_ADC2
587+ RCC_PB2PeriphClockCmd (RCC_PB2Periph_ADC2 , ENABLE ); // ENABLE ADC2 Clock for CH32L10x
588+ #endif
513589 }
514590#endif
515591 /* Configure ADC GPIO pin */
@@ -582,7 +658,7 @@ uint16_t adc_read_value(PinName pin, uint32_t resolution)
582658 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
583659 ADC_InitStructure.ADC_NbrOfChannel = 1 ;
584660 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
585- #if !defined(CH32V00x) && !defined(CH32V10x)
661+ #if !defined(CH32V00x) && !defined(CH32V10x) && !defined(CH32VM00X)
586662 ADC_InitStructure.ADC_OutputBuffer = ENABLE;
587663#endif
588664 ADC_Init (padc, &ADC_InitStructure);
0 commit comments