Задать вопрос
@Klaxons

Как прочитать и сравнить данных по UART в STM32f4?

Добрый день, привязал bluetooth к плате и пытаюсь через com-порт читать и сравнивать данные

void UART4_IRQHandler(void)
{
  static int cnt = 0;
  if( USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)
  {
    USART_ClearITPendingBit(UART4, USART_IT_RXNE);
    char ch = UART4->DR;
    if(ch != '\n')
    {
        received_str[cnt] = ch;
        cnt++;
    }
    else
    {
      received_str[cnt] = '\0'; 
      cnt = 0;
      if (USART_GetFlagStatus(UART4, USART_FLAG_RXNE)==RESET)
      {
        LED_Flag = 1;
        LED_Command = (int)received_str;
        USART_puts(UART4, LED_Command); // здесь выводит мое введенное число
        USART_puts(UART4, "\n");
      }
    }
  }
}


сравнение полученных данных
main.c
...
while(1)
{
   switch (LED_Command)
   {
     case 500: USART_puts(UART4, "LED_Command = 500"); break;
     case 600: USART_puts(UART4, "LED_Command = 600"); break;
     case 700: USART_puts(UART4, "LED_Command = 700"); break;
   }
}


ну и код вывода
void USART_puts(USART_TypeDef *USARTx, volatile char *str)
{
	while(*str)
	{
		while(USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET);
		USART_SendData(USARTx, *str);
		*str++;
	}
}


Когда в терминале ввожу 500, 600 или 700 UART4_IRQHandler выводит их корректно, но вот почему-то в switch считает, что LED_Command не равен этим значениям
  • Вопрос задан
  • 659 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@vilgeforce
Раздолбай и программист
received_str у вас же массив символов? (int)received_str; - ни разу не преобразование строки в число.
Ответ написан
Комментировать
@Klaxons Автор вопроса
А как тогда преобразовать к типу int

пробовал так
LED_Command = atoi(received_str);

в терминале теперь выводится непонятно что q.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы