Usando el chip STM32F103RBT6 (específicamente la placa STM32-H103 de Olimex), Keil u5. Comunicación con el sensor magnético AS5311
El periférico SPI se configura en modo maestro solo unidireccional rx. CPHA = 1 y CPOL = 1. El pin del reloj se configura como función alternativa push pull. La inicialización de SPI está abajo:
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
hspi1.Init.CRCPolynomial = 10;
HAL_SPI_Init(&hspi1);
Luego, entro en un bucle con el siguiente código simplemente en un modo de recepción constante
while (1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_SPI_Receive(&hspi1, (uint8_t *)Rx_Buffer, 3, HAL_MAX_DELAY);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(1);
}
He comprobado la polaridad y la fase en el visor perihperal y puedo ver que los registros están configurados como 1 para CPOL y CPHA. Sin embargo, al usar un analizador lógico de saleae, puedo ver que después de la transferencia de datos el reloj no está inactivo.
En términos de hardware, el reloj está conectado directamente sin resistencias de subida / bajada.
¿Alguna idea de por qué el reloj no está inactivo?