Agreed on using uint32_t, that’s how it’s done.
Correction, it’s a 24-bit decrement timer, the system tick. Doesn’t strictly matter for the purpose of this test, knowing this.
I’ve tested the code again. This time copying the incoming array to a separate array, to create something that could get used futher on in the program.
if (rx_flag)
{
uint32_t currentMillis1 = HAL_GetTick();
memcpy(rx_string, rx_buff, sizeof(rx_buff));
memset(rx_buff,0,sizeof(rx_buff));
HAL_UART_DMAStop(&huart2);
HAL_UART_Receive_DMA(&huart2, rx_buff, sizeof(rx_buff));
rx_flag = 0;
uint32_t currentMillis2 = HAL_GetTick();
uint32_t millis_taken = currentMillis2 - currentMillis1;
sprintf(log_buffer, "rx_string: %s\r\n", rx_string);
debug_printf(log_buffer);
sprintf(log_buffer, "millis_taken: %d\r\n", millis_taken);
debug_printf(log_buffer);
}
Still takes less than 1ms.
Simplified:
if (rx_flag)
{
rx_flag = 0;
memcpy(rx_string, rx_buff, sizeof(rx_buff));
memset(rx_buff,0,sizeof(rx_buff));
HAL_UART_DMAStop(&huart2);
HAL_UART_Receive_DMA(&huart2, rx_buff, sizeof(rx_buff));
}
sending 50 chars at a time at 460800 baud. 22 seconds worth of button bashing.
millis: 12000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 14000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 16000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 1
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 18000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 1
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 20000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 1
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 22000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 24000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 26000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 1
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 28000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 30000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 1
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 32000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
millis: 34000
rx_string: 12345678901234567890123456789012345678901234567890
millis_taken: 0
I’m pretty much content with this. It works.
I’d like to directly reset the counter of the DMA register instead of DMA STOP/START, then it’s nearer on par with the efficiency of a DMA ring buffer outlined in the tutorial above. Edit: Got it.
huart2.hdmarx->Instance->CCR &= ~DMA_CCR_EN;
huart2.hdmarx->Instance->CNDTR = sizeof(rx_buff);
huart2.hdmarx->Instance->CCR |= DMA_CCR_EN;