Estoy usando una placa STM32L4R5 y estoy tratando de configurar el DMA en la línea UART2. Logré que la línea RX funcione como quiero, pero cuando sigo "Transmisión usando DMA" en la sección 44.5.19 del "Manual de referencia RM0432", solo se transmite un byte y nada más. Este byte solo se envía cuando escribo explícitamente un byte en el registro TDR. Luego, puedo ver que el indicador TC se borra y el primer byte de mi registro DMA se ve afectado. ¿Cómo hago para que el DMA envíe continuamente los datos al TDR para su transmisión?
Nota: este problema parece ser similar a una pregunta sin respuesta aquí
Los pasos mencionados en la hoja de datos son los que se muestran:
Mi código está aquí:
//filling in dummy info into my DMA TX buffer
memset((void*)DMA_USB_TXbuf, 0x55, 16);
//ensuring my UART is configured for DMA Transfer
huart2.Instance->CR3 |= USART_CR3_DMAT;
//steps 1-4 taken care of within this funciton
HAL_DMA_Start_IT(&hdma_usart2_tx, (uint32_t)&huart2.Instance->TDR, (uint32_t)&DMA_USB_TXbuf[0], DMA_USB_TX_SIZE);
//step 5 (just ensuring that we have the flags we want after the previous function)
__HAL_DMA_DISABLE(&hdma_usart2_tx);
__HAL_DMA_ENABLE_IT(&hdma_usart2_tx, DMA_IT_HT);
__HAL_DMA_ENABLE_IT(&hdma_usart2_tx, DMA_IT_TC);
//step 6
__HAL_UART_CLEAR_FLAG(&huart2, UART_CLEAR_TCF);
//step 7
__HAL_DMA_ENABLE(&hdma_usart2_tx);
//I shouldn't need to do this, but this seems to be the only way
// I get even 1 trasmission from DMA register
WRITE_REG(huart2.Instance->TDR, 0x55);
Había dos partes de por qué esto no funcionaba como debería.
gracias codo
codo
HAL_USART_Transmit_DMA()
?Arce
chris stratton
galán r