/* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ #define CS_PIN GPIO_PIN_8 #define CS_PORT GPIOA /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ void delay_in_us (uint16_t time_in_us) { uint8_t fac = 0; __HAL_TIM_SET_COUNTER(&htim1,0); fac = (time_in_us >= 2) ? 1 : 0; while (__HAL_TIM_GET_COUNTER(&htim1) < time_in_us-fac); } void get_angle(void) { uint8_t tx_data[10] = {0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; uint8_t rx_data[10] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Start transaction HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET); delay_in_us(20); HAL_SPI_Transmit(&hspi1, tx_data, 10, HAL_MAX_DELAY); HAL_SPI_Receive(&hspi1, rx_data, 10, HAL_MAX_DELAY); HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); // Calculation angle uint16_t data_bytes = (rx_data[2] << 8) | rx_data[3]; uint16_t first14 = data_bytes >> 2; float value = (float)first14 / 16384.0f; float angle = (value - 0.1f) / (0.9f - 0.1f) * 360.0f; } /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim1); HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); // CS_PIN high initially