использование USART в STM32L4R5

#stm32

#stm32

Вопрос:

Я использую асинхронное USART включение STM32L4R5 для связи с ПК. Я могу получать данные на стороне ПК, но я не могу получать какие-либо данные на плате nucleo, отправляемые ПК. Ниже приведен код, который я использую для передачи

 while (1)
{
  HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin); //Toggle LED
  HAL_Delay(1000);
  for(i = 0; i < 5; i  )
  {
      USART1->TDR = p[i];
      while((USART1->ISR  amp; 0x40) == 0);
  }
  while ((USART1->ISR amp; 0x20) == 0);
  uint32_t receivedByte = (uint32_t)(USART1->RDR);
}
 

В приведенной выше части отправки все работает нормально, но прием не работает. Я проверил, и подключение выполнено правильно.

Комментарии:

1. Что вы подразумеваете под «не работает»? Происходит ли сбой? Не удается скомпилировать?

2. Как я уже упоминал выше, я могу отправлять данные на ПК, но не могу получать данные на плате nucleo. Это не сбой, и я также могу его скомпилировать. Я просто не получаю данные на плате nucelo, отправляемые ПК.

3. Что происходит тогда? Он застрял while ((USART1->ISR amp; 0x20) == 0); ? Если нет, как узнать, что он не получает данные? Переменная receivedByte немедленно выходит из области видимости и не используется.

Ответ №1:

Почему бы вам просто не использовать прерывание приема USART, это поможет вам в захвате полученных данных. Вместо опроса для приема USART. Есть две причины отсутствия ответа

  1. Возможно, вы не отправляете EOD и возврат каретки при отправке данных в USART. Многие операции на основе USART основаны на этих символах. Модуль будет прослушивать USART до тех пор, пока эти символы не будут получены.
  2. Ваши аппаратные подключения неверны. Убедитесь, что вы подключаете TX к хосту к Rx ведомого устройства и наоборот.

Я предлагаю прерывание USART, потому что опрос не является хорошим методом при написании кода.

Комментарии:

1. Ваш ответ находится в серой области между комментарием и ответом. Я понимаю, что у вас недостаточно репутации для комментариев. Можете ли вы лучше описать свою идею (например, с помощью примера кода)? Это сделало бы его правильным ответом.