То, что я пытаюсь сделать, довольно просто.Передайте через DMA и подождите, пока он не будет передан.А затем получить и подождать, пока он не будет получен.
Когда я закомментирую принимающую часть (включая обратный вызов), она переходит в функцию обратного вызова для завершения передачи.Но когда я откомментирую полученную часть, она не переходит в обратный вызов tx cplt, а напрямую переходит в обратный вызов receive cplt.И когда я проверяю приемный буфер, я не получаю то, что ожидал (очевидно).Что могло пойти не так?
Я использую Atollic True Studio V 9.0, плату CubeMx v5.1.0, STM32F407VG-DISC1 и включил DMA для UART2.
Я попытался отправить буфер символовчерез UART DMA и получить его.Кажется, он вообще не передает, так как не входит в обратный вызов txCplt.И это прямо в Rxcplt перезвонит.
uint8_t tx_arr[10], rx_arr[10];
__IO ITStatus UartReady = RESET;
int main(void)
{
int i = 0;
for(i = 0; i<10; i++)
rx_arr[i] = 0;
for(i = 0; i<10; i++)
tx_arr[i] = i*2;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART6_UART_Init();
MX_USART2_UART_Init();
while (1)
{
if( HAL_UART_Transmit_DMA(&huart2, (uint8_t*)tx_arr, 10)!= HAL_OK )
{
Error_Handler();
}
while(UartReady != SET)
{
}
UartReady = RESET;
if( HAL_UART_Receive_DMA(&huart2, (uint8_t*)rx_arr, 10)!= HAL_OK )
{
Error_Handler();
}
while(UartReady != SET)
{
}
UartReady = RESET;
}
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
UartReady = SET;
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UartReady = SET;
}
Я ожидаю, что rx_arr будет заполнен на 0,2,4,6, ... 18, но он заполняется мусором