STM32 прерывание usart не может преобразовать правильные данные в другие функции
У меня возникла проблема, когда я с помощью платы обнаружения stm32 отправляю данные другой, и она может получать правильные данные и печатать в функции обратного вызова, но не может печатать правильно в другой функции.
void UART7_IRQHandler()
{
HAL_UART_IRQHandler(&huart7);
HAL_UART_Receive_IT(&huart7, (uint8_t *)UART7RxBuffer, 16);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart)
{
if(huart->Instance == UART7) {
X = (UART7RxBuffer[1]-48) + (UART7RxBuffer[3]-48)*0.1 + (UART7RxBuffer[4]-48)*0.01 + (UART7RxBuffer[5]-48)*0.001;
}
}
Но я получаю неправильные данные, как это
void controller(){
printf("%.3f\t\n", X);
}
Это должно быть 0,012, и это правильно в HAL_UART_RxCpltCallback(), я получаю -38,02, -0,009, 0,512, 0,012, -1,948 и так далее в контроллере. Как я должен сделать, чтобы предотвратить эту ситуацию?
1 ответ
Не зная, действительно ли ваш MCU поддерживает плавающую точку и т. Д., Я бы, вероятно, сделал что-то подобное для диагностики / отладки происходящего:
void UART7_IRQHandler()
{
HAL_UART_IRQHandler(&huart7);
HAL_UART_Receive_IT(&huart7, (uint8_t *)UART7RxBuffer, 16);
}
char d1;
char d2;
char d3;
char d4;
float X1;
float X2;
float X3;
float X4;
float X;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart)
{
if(huart->Instance == UART7) {
d1 = UART7RxBuffer[1]-48; /* add breakpoint here, and single step from here while inspecting variables */
d2 = UART7RxBuffer[3]-48;
d2 = UART7RxBuffer[4]-48;
d3 = UART7RxBuffer[5]-48;
X1 = d1;
X2 = d2 * 0.1;
X3 = d3 * 0.01;
X4 = d4 * 0.001;
X = X1 + X2 + X3 + X4;
}
}