Проблема в следующем: не отправляются данные через USART1 или USART2 (другие не пробовал). Прием с ПК работает нормально.
Работаю с платой через STMCube, соответственно HAL. Упростил уже всё до предела, не понимаю в чем проблема.
Отправлял данные с USART1 на USART2 (не приходит вообще ничего), отправлял данные на ПК (смотрел четырьмя терминалами: везде приходит разный мусор).
Настройки самые обычные: 9600 бод, 8 бит данные, 1 стоп-бит. Контроль четности выключен. Приемник и передатчик (в случае USART1 -> USART2) настроены одинаково.
Смотрел двумя дебаггерами, при USART1 -> USART2 случае SR->RXNE не взводится, DR пустой (иногда содержит мусор). Изредка RXNE поднимается перед HAL_Delay, но после задержки снова становится нулем.
Что забавно, код на SPL работает.
Код
while (1)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
uint8_t send_data[] = {'A'};
if(HAL_UART_Transmit(&huart1, send_data, 1, HAL_MAX_DELAY) != HAL_OK)
Error_Handler();
HAL_Delay(1000);
uint8_t receive_data[] = {0};
if(HAL_UART_Receive(&huart2, receive_data, 1, HAL_MAX_DELAY) != HAL_OK)
Error_Handler();
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
}
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
uint8_t send_data[] = {'A'};
if(HAL_UART_Transmit(&huart1, send_data, 1, HAL_MAX_DELAY) != HAL_OK)
Error_Handler();
HAL_Delay(1000);
uint8_t receive_data[] = {0};
if(HAL_UART_Receive(&huart2, receive_data, 1, HAL_MAX_DELAY) != HAL_OK)
Error_Handler();
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
}
Если делать отправку просто через регистры, типа такого:
Код
void send_to_uart(uint8_t data)
{
while(!(USART1->SR & USART_SR_TC));
USART1->DR = data;
}
uint8_t receive_from_uart()
{
while(!(USART2->SR & USART_SR_RXNE));
return USART2->DR & 0xFF;
}
{
while(!(USART1->SR & USART_SR_TC));
USART1->DR = data;
}
uint8_t receive_from_uart()
{
while(!(USART2->SR & USART_SR_RXNE));
return USART2->DR & 0xFF;
}
То аналогично вешаемся на while в приеме не дожидаясь RXNE. Причина в конфигурации?
Уже и не знаю куда копать. Кто-нибудь может помочь?