Skip to content

Commit eaffbac

Browse files
yn386dpgeorge
authored andcommitted
stm32/machine_adc: Add machine.ADC implementation for STM32L1.
Signed-off-by: Yuuki NAGAO <wf.yn386@gmail.com>
1 parent 42cfa7c commit eaffbac

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

ports/stm32/adc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ static void adc_config_channel(ADC_HandleTypeDef *adc_handle, uint32_t channel)
416416
if (__HAL_ADC_IS_CHANNEL_INTERNAL(channel)) {
417417
sConfig.SamplingTime = ADC_SAMPLETIME_384CYCLES;
418418
} else {
419-
sConfig.SamplingTime = ADC_SAMPLETIME_384CYCLES;
419+
sConfig.SamplingTime = ADC_SAMPLETIME_16CYCLES;
420420
}
421421
#elif defined(STM32G0)
422422
if (__HAL_ADC_IS_CHANNEL_INTERNAL(channel)) {

ports/stm32/machine_adc.c

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
#define ADC_SAMPLETIME_DEFAULT ADC_SAMPLETIME_12CYCLES_5
8181
#define ADC_SAMPLETIME_DEFAULT_INT ADC_SAMPLETIME_160CYCLES_5
8282
#elif defined(STM32L1)
83-
#define ADC_SAMPLETIME_DEFAULT ADC_SAMPLETIME_384CYCLES
83+
#define ADC_SAMPLETIME_DEFAULT ADC_SAMPLETIME_16CYCLES
8484
#define ADC_SAMPLETIME_DEFAULT_INT ADC_SAMPLETIME_384CYCLES
8585
#elif defined(STM32L4) || defined(STM32WB)
8686
#define ADC_SAMPLETIME_DEFAULT ADC_SAMPLETIME_12CYCLES_5
@@ -225,6 +225,8 @@ void adc_config(ADC_TypeDef *adc, uint32_t bits) {
225225
ADC3_COMMON->CCR = 3 << ADC_CCR_CKMODE_Pos;
226226
#elif defined(STM32L0)
227227
ADC1_COMMON->CCR = 0; // ADCPR=PCLK/2
228+
#elif defined(STM32L1)
229+
ADC1_COMMON->CCR = 1 << ADC_CCR_ADCPRE_Pos; // ADCPRE=2
228230
#elif defined(STM32WB)
229231
ADC1_COMMON->CCR = 0 << ADC_CCR_PRESC_Pos | 0 << ADC_CCR_CKMODE_Pos; // PRESC=1, MODE=ASYNC
230232
#elif defined(STM32WL)
@@ -385,6 +387,31 @@ static void adc_config_channel(ADC_TypeDef *adc, uint32_t channel, uint32_t samp
385387
}
386388
*smpr = (*smpr & ~(7 << (channel * 3))) | sample_time << (channel * 3); // select sample time
387389

390+
#elif defined(STM32L1)
391+
392+
ADC_Common_TypeDef *adc_common = ADC1_COMMON;
393+
if (channel == ADC_CHANNEL_VREFINT || channel == ADC_CHANNEL_TEMPSENSOR) {
394+
adc_common->CCR |= ADC_CCR_TSVREFE;
395+
if (channel == ADC_CHANNEL_TEMPSENSOR) {
396+
adc_stabilisation_delay_us(ADC_TEMPSENSOR_DELAY_US);
397+
}
398+
}
399+
400+
adc->SQR1 = (1 - 1) << ADC_SQR1_L_Pos;
401+
adc->SQR5 = (channel & 0x1f) << ADC_SQR5_SQ1_Pos;
402+
403+
__IO uint32_t *smpr;
404+
if (channel >= 20) {
405+
smpr = &adc->SMPR1;
406+
channel -= 20;
407+
} else if (channel >= 10) {
408+
smpr = &adc->SMPR2;
409+
channel -= 10;
410+
} else {
411+
smpr = &adc->SMPR3;
412+
}
413+
*smpr = (*smpr & ~(7 << (channel * 3))) | sample_time << (channel * 3); // select sample time
414+
388415
#elif defined(STM32G4) || defined(STM32H5) || defined(STM32H7) || defined(STM32L4) || defined(STM32WB)
389416

390417
#if defined(STM32G4) || defined(STM32H5) || defined(STM32H7A3xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xx) || defined(STM32H7B3xxQ)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy