1 # Configuración ADC1 2 3 La configuración del ADC utilizada se puede ver en el archivo `Core/main.c`, en 4 particular en la definición de la función `MX_ADC1_Init`, esta función es 5 invocada antes de iniciar el superloop en la función `main`, al momento de 6 inicializar los periféricos. 7 8 La función `MX_ADC1_Init` es auto-generada por la aplicación STM32CubeMX, 9 removiendo comentarios utilizados por la aplicación resulta como se muestra a 10 continuación: 11 12 ```c 13 static void MX_ADC1_Init(void) 14 { 15 ADC_ChannelConfTypeDef sConfig = {0}; 16 17 // Common config 18 hadc1.Instance = ADC1; 19 hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; 20 hadc1.Init.ContinuousConvMode = DISABLE; 21 hadc1.Init.DiscontinuousConvMode = DISABLE; 22 hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; 23 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; 24 hadc1.Init.NbrOfConversion = 1; 25 HAL_ADC_Init(&hadc1); 26 27 // Configure Regular Channel 28 sConfig.Channel = ADC_CHANNEL_0; 29 sConfig.Rank = ADC_REGULAR_RANK_1; 30 sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; 31 HAL_ADC_ConfigChannel(&hadc1, &sConfig); 32 } 33 ``` 34 35 Se puede ver que se utiliza solo uno de los conversores A/D del microcontrolador 36 `ADC1`, y la configuración se guarda en un handle, que se define globalmente 37 `hadc1`. El `ADC1` se configura en modo normal, es decir sin modo escaneo, ya 38 que se lee un solo canal, por lo tanto no es necesario leer multiples canales 39 secuencialmente. Y también se desactivan el modo de conversión continua y 40 discontinúa, el primero indica que el ADC se detenga al finalizar cada 41 conversión, el segundo se utiliza cuando se leen muchos canales secuencialmente 42 (por ejemplo en modo escaneo) y hace que el ADC divida los canales en grupos, de 43 manera de leer secuencialmente los grupos en cada conversion. Ademas se utiliza 44 un trigger por software, es decir, no por interrupciones externas o 45 temporizadores, y los bytes leídos se alinean a la derecha. 46 47 Para la configuración especifica del canal, se indica al ADC que se utilizará el 48 canal 0, el cual corresponde con el pin `PA0` de la placa NUCLEO-F103RB 49 utilizada, el rango `sConfig.Rank` se utiliza para definir la prioridad de la 50 lectura cuando se leen multiples canales, en este caso como solo se lee un canal 51 no tiene mucha relevancia. Por ultimo se configura el período de muestreo del 52 canal con `sConfig.SamplingTime`, en `ADC_SAMPLETIME_1CYCLE_5`, esto es 1.5 53 ciclos del reloj del ADC, el período de muestreo máximo disponible para el ADC 54 con la configuración de reloj de CPU utilizada.
