Tengo una placa de descubrimiento STM32F303 para la cual el mems gyro L3GD20H está conectado al periférico SPI1 por defecto, es decir, Sclk, MISO y MOSI están conectados a los pines PA5, PA6 y PA7 respectivamente. El chip habilitado está conectado a PE3. Necesito entender las funciones de alto nivel de la biblioteca HAL para el microcontrolador STM32F3. Por lo tanto, para la experimentación, trato de comunicarme con el giroscopio usando HAL_SPI_Transmit () y HAL_SPI_Receive () .
Uso CubeMX para inicializar todos los periféricos. La configuración para el SPI1 se muestra a continuación
ComoCubeMXseencargadelcódigodeinicialización,solomostraréelcódigoadicionalquehabilitaelregistrodecontrolctrlReg1con0x0f(verfigura)
No me importan las configuraciones, solo deseo obtener algunos datos en el modo de sondeo. El registro XDataOut_L (0x28) es el que trato de leer
Uso CubeMX y AC6, que es System Workbench (basado en Eclipse), para compilar / compilar y ejecutar / depurar el proyecto. El código definido por el usuario es el siguiente
uint8_t data_ctrl1, address_ctrl1;
uint8_t data_out1, address_out1;
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_3, GPIO_PIN_RESET);
address_ctrl1 = 0x20;
data_ctrl1 = 0x0f;
HAL_SPI_Transmit(&hspi1, &address_ctrl1, 1, 50);
HAL_SPI_Transmit(&hspi1, &data_ctrl1, 1, 50);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_3, GPIO_PIN_SET);
while(1)
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
address_out1 = 0x28 | 0x80; // MSB bit = 1 to read
HAL_SPI_Transmit(&hspi1, &address_out1, 1, 50);
HAL_SPI_Receive(&hspi1, &data_out1, 1, 50);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
HAL_Delay(100);
}
El código se basa en un ejemplo en YouTube (MohamedYaqoobSTM) donde Mohamed lee con éxito su LIS302DL en su tablero de descubrimiento STM32F4.
Mi pregunta es ¿por qué no funcionará SPI_HAL_Receive () como se esperaba? Siempre obtengo el resultado 255 en el búfer data_out1 ...