2015-01-02 09:32 AM
Hello,
I've test the STM32F303 for using it in a new project. The configuration and libbrary are used from the CubeMX with the IAR compiler. Now I can maximum transmit 4 bytes over the UART with one DMA transfer. Here my configuration for the DMA and UART: huart2.Instance = USART2; huart2.Init.BaudRate = 57600; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; huart2.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED ; huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; hdma_usart2_rx.Instance = DMA1_Channel6; hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_usart2_rx.Init.Mode = DMA_NORMAL; hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_usart2_rx); __HAL_LINKDMA(huart,hdmarx,hdma_usart2_rx); hdma_usart2_tx.Instance = DMA1_Channel7; hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_usart2_tx.Init.Mode = DMA_NORMAL; hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_usart2_tx); __HAL_LINKDMA(huart,hdmatx,hdma_usart2_tx); I start the transmission with the function HAL_UART_Transmit_DMA (&huart2, pData, uSize); When I call this function with uSize 1,2,3 or 4 works all fine. All values bigger than 4 have the same result as 4. Have somebody a idea? Thanks, Bernd2015-02-06 12:02 AM
Hi moennicke.bernd,
Can you please provide the main.c file so that we reproduce your issue ?Thank you,Heisenberg.