#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. Есть две причины отсутствия ответа
- Возможно, вы не отправляете EOD и возврат каретки при отправке данных в USART. Многие операции на основе USART основаны на этих символах. Модуль будет прослушивать USART до тех пор, пока эти символы не будут получены.
- Ваши аппаратные подключения неверны. Убедитесь, что вы подключаете TX к хосту к Rx ведомого устройства и наоборот.
Я предлагаю прерывание USART, потому что опрос не является хорошим методом при написании кода.
Комментарии:
1. Ваш ответ находится в серой области между комментарием и ответом. Я понимаю, что у вас недостаточно репутации для комментариев. Можете ли вы лучше описать свою идею (например, с помощью примера кода)? Это сделало бы его правильным ответом.