¿Cómo asegurar que un maestro SPI envíe exactamente 16 pulsos de reloj al esclavo?

0

Estoy usando este sensor actual: archivo de archivoIdcc Según la hoja de datos:

¿Cómo puede el maestro SPI enviar exactamente 16 pulsos de reloj al esclavo, por lo que no recibo los 0?

Cuando estoy leyendo este sensor, obtengo una gran cantidad de 0. Entonces, pensé que podría ser la razón, que estoy enviando más de 16 pulsos de relojes. Estoy usando un Núcleo STM32 a 2 MHz, pero el reloj SPI se ha preescalado a 1 MHz . Apreciaría cualquier consejo. Este es el código que utilizo para leer el sensor y calcular la corriente:

while (1)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_SPI_Receive(&hspi1, (uint8_t *)&SPIRx, 2, 10);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
motorCurrent=motor_current();

float motor_current() {

    float Iout;
    float BIout;
    int16_t Bit15;
     Bit15 = SPIRx&0x8000;
            if(Bit15==0x8000){
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
            }
            else {
                BIout= SPIRx&0x1FFF;
                Iout = (BIout-4096)/80;
            }
        return Iout;
     }
    

1 respuesta

1

Está utilizando HAL_SPI_Receive () incorrecto, el segundo parámetro debe ser su búfer no el registro SPI. Otro problema potencial es que tiene un tiempo de espera corto (cuarto parámetro) con un reloj SPI lento.

También puede hacer que la vida sea más fácil si observa la configuración de hspi1 y cambia el tamaño de los datos a 16 bits.

EDIT

Si el segundo parámetro es su búfer y no el registro SPI, eso aumentaría el tiempo de espera y verificaría si HAL_SPI_Receive () devuelve el éxito o el error.

    
respondido por el Rokta

Lea otras preguntas en las etiquetas