Estoy usando CubeMX y HAL para programar un STM32L4. Estoy tratando de comunicarme con el módulo RFM96 usando SPI, pero estoy obteniendo resultados sin sentido.
De acuerdo con el documento RFM96 hoja de datos , para leer un byte de una dirección , Tengo que enviar 1 byte, MSB configurado a 0 (que indica el modo de lectura), los otros 7 bits indican la dirección. En la captura de pantalla a continuación verá que estoy intentando leer el valor del registro 0x03, que se supone que devuelve el valor 0x0B (predeterminado). El problema es que en lugar de recibir solo 0x0B, recibo lo que parece ser TODOS los valores de registro de RFM95. Verás que 0x0B también está presente.
Hedejadoqueelrelojavance8bytesmásdelonecesario,soloparademostrarelproblema.Además,soloexperimentoesteresultadosielLSBdelprimerbytees1.Sisolicitolosdatosenladirección0x02,obtendríaunarespuestacero(imagenacontinuación).Recibolamismarespuestasienvío0x00.
Este es el código que utilizo para generar las muestras del analizador lógico anterior.
uint8_t data[10];
data[0] = 0b00000011;//sent first
data[1] = 0b00000000;
data[2] = 0b00000000;
data[3] = 0b00000000;
data[4] = 0b00000000;
data[5] = 0b00000000;
data[6] = 0b00000000;
data[7] = 0b00000000;
data[8] = 0b00000000;
data[9] = 0b00000000;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_SPI_Receive(&hspi1, (uint8_t *)data, 10, 100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
Esta es mi función de inicio SPI:
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
Este código es rudimentario; Estoy usando un analizador lógico para depurar. ¿Alguien puede detectar lo que estoy haciendo mal? Por lo que sé, le estoy dando al RFM95 todos los requisitos que necesita en términos de MOSI, SCK y NSS.