void read_Angle() { // Timing delay_us(2000); uint8_t data[10] = {0}; uint8_t start_byte = 0xAA; uint8_t send_data1 = 0xFF; // Start transaction HAL_GPIO_WritePin(SPI_ANGLE_SS_GPIO_Port, SPI_ANGLE_SS_Pin, GPIO_PIN_RESET); // CS LOW // Send start byte HAL_SPI_Transmit(&hspi1, &start_byte, sizeof(start_byte), HAL_MAX_DELAY); HAL_SPI_Receive(&hspi1, data, sizeof(data), HAL_MAX_DELAY); HAL_Delay(2); // Send and receive data bytes for (uint8_t i = 1; i < 10; i++) { HAL_SPI_Transmit(&hspi1, &send_data1, sizeof(send_data1), HAL_MAX_DELAY); delay_us(7); HAL_SPI_Receive(&hspi1, data, sizeof(data), HAL_MAX_DELAY); delay_us(50); } delay_us(10); // End transaction HAL_GPIO_WritePin(SPI_ANGLE_SS_GPIO_Port, SPI_ANGLE_SS_Pin, GPIO_PIN_SET); // CS HIGH // Extract and calculate angle uint16_t data_bytes = (data[2] << 8) | data[3]; // Combine two bytes uint16_t first14 = data_bytes >> 2; // Extract first 14 bits float value = (float)(first14 / 16384.0); // Divide by 2^14 to get a value between 0 and 1 float angle = (value - 0.1) / (0.9 - 0.1) * 360; // Scale value to degrees UART_Printf("Winkel: %.2f\n", angle); }