STM32 Min. velocidad del reloj mientras duerme

4

Estoy considerando usar el STMF103RB ( página del producto ST ) para un caso de uso que implica estar dormido durante 1 segundo y UARTing 500 ADC muestras y luego volver a dormir. Tengo una batería de 50 mAh y la necesito para durar al menos 10 horas, es decir, un promedio de 5 mA.

  1. Durmiendo: muestre el ADC a 500Hz, con un tiempo de muestreo de ADC de alrededor de 5 us y el DMA está en una ubicación de memoria.
  2. Despierto - UART estas 500 muestras lo más rápido posible y vuelve a dormir.

Mi problema radica en estimar la velocidad de reloj mínima requerida para procesar esto para estimar la vida útil de la batería. Si planeo usar el ADC a una frecuencia de muestreo de 500Hz, un tiempo de muestreo de 5 us (digamos 8 ciclos) y el ADC toma ~ 12 ciclos para convertir = 20 ciclos, digamos que 30 es seguro. ¿Esto significa que el reloj puede estar en (30 * 500 =) 15kHz mientras está dormido para hacer esto? ¿Es posible averiguar si esto también es correcto para el DMA por cálculo? Esta velocidad de reloj en reposo lo pondría < 1.08mA corriente típica (según la hoja de datos) y me daría espacio para las piernas más que suficiente para UART por un corto tiempo.

De manera similar, si quiero UART en 115200 Baud, ¿significa esto mi min. ¿La velocidad de reloj de AHB y APB es 115.2kHz? ¿O es simplemente demasiado lento para que el procesador procese su código también?

    
pregunta Barker76

2 respuestas

4
  

De manera similar, si quiero UART en 115200 Baud, ¿significa esto mi min. ¿La velocidad de reloj de AHB y APB es 115.2kHz?

No. El USART realiza 16x sobremuestreo; la velocidad en baudios está dada por:

$$ F_ {CK} \ over 16 \ times \ mathrm {USARTDIV} $$

Como el valor mínimo de USARTDIV es 1, el periférico debe cronometrarse a un mínimo de 1.8432 MHz (16 × 115.2 kHz) para funcionar a 115.2 kBaud.

Además, tenga en cuenta que el uso de un divisor USART de 1 no le deja espacio para sintonizarlo. Si su sistema no puede generar un reloj periférico de exactamente 1.8432 MHz, es posible que deba aumentar el reloj periférico para permitir obtener un reloj USART adecuado.

Finalmente, considere que el USART también es compatible con DMA: es posible generar datos a través del USART mientras la CPU está inactiva. Solo deberá activar la CPU durante el tiempo que sea necesario para convertir los datos del búfer ADC al formato que desea generar en el USART y configurar el DMA.

    
respondido por el duskwuff
0

Del manual STM32F103:

  

En el modo de suspensión, solo se detiene la CPU. Todos los periféricos continúan   funciona y puede activar la CPU cuando se produce una interrupción / evento.

Y:

  

Tabla 18. Consumo de corriente típico en modo de suspensión, código que se ejecuta desde   Flash o RAM

     

125 kHz (reloj externo) 0.98mA (con periféricos habilitados) 125 kHz   (RC interno con preescalador AHB) 0.43mA (con periféricos habilitados)

La tabla solo funciona a 125 kHz, si desea una velocidad inferior a esa, deberá medir la corriente con un medidor.

    
respondido por el laptop2d

Lea otras preguntas en las etiquetas