
// 1.Enable DMA Clock
RCC->AHBPCENR |= RCC_AHBPeriph_DMA1; // Enable the DMA Clock
//2.Set DMA registers used to default
DMA1_Channel4->CFGR &= (uint16_t)(~DMA_CFGR1_EN); // Disnable the DMA used, to set other registers
DMA1_Channel4->CFGR = 0;
DMA1_Channel4->CNTR = 0;
DMA1_Channel4->MADDR = 0;
DMA1_Channel4->PADDR = 0;
DMA1->INTFCR |= ((uint32_t)(DMA_GIF4 | DMA_TCIF4 | DMA_HTIF4 | DMA_TEIF4)); // Clear the DMA used IRQFlags
//3.Set DMA registers
DMA1_Channel4->PADDR = (uint32_t)(&USART1->DATAR); // Set peripheralADDR
DMA1_Channel4->MADDR = (uint32_t)TxBuffer; // Set memoryADDR
DMA1_Channel4->CFGR |= (uint16_t)DMA_CFGR1_DIR; // Set DIR : MEM -> Peripheral
DMA1_Channel4->CFGR &= (uint16_t)(~DMA_CFGR1_CIRC); // Set DMA execute single operation
DMA1_Channel4->CFGR &= (uint16_t)(~DMA_CFGR1_PINC); // Disable peripheralADDR increment
DMA1_Channel4->CFGR |= (uint16_t)(DMA_CFGR1_MINC); //Enable memoryADDR increment
DMA1_Channel4->CFGR &= (uint16_t)(~DMA_CFGR1_MEM2MEM); // Disable data M2M
DMA1_Channel4->CNTR = (sizeof(TxBuffer) / sizeof(*(TxBuffer)));// Set data lenghth
USART1->CTLR3 |= USART_CTLR3_DMAT;
while(1)
{
DMA1_Channel4->CFGR &= (uint16_t)(~DMA_CFGR1_EN);
DMA1_Channel4->CNTR = (sizeof(TxBuffer) / sizeof(*(TxBuffer)));
DMA1_Channel4->CFGR |= (uint16_t)DMA_CFGR1_EN;
Delay_Ms(1000);
}