surendran_raj
Junior Member level 2
Hi,
I'm trying to set up UART communication with DMA using the STM32f103C8 controller.
I'm trying to receive data with DMA but I can't able to receive data continuously.
Can anyone correct me if I made a mistake?
I'm using STM32f103C8 registers to code.
Thank you.
I'm trying to set up UART communication with DMA using the STM32f103C8 controller.
I'm trying to receive data with DMA but I can't able to receive data continuously.
Can anyone correct me if I made a mistake?
I'm using STM32f103C8 registers to code.
- communication :USART3
- pins PB10-TX, PB11-RX
- DMA channels - DMA1_channel1 for TX , DMA1_channel3 for RX
Thank you.
Code C++ - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #include<stm32f10x.h> uint8_t rx_data[13]; void USART3_config(void) { RCC->APB1ENR |= RCC_APB1ENR_USART3EN; RCC->AHBENR |= RCC_AHBENR_DMA1EN; USART3->BRR = 0x0EA6; //for 9600 baurd rate USART3->CR1 |= USART_CR1_TE | USART_CR1_RXNEIE | USART_CR1_RE; USART3->CR3 |= USART_CR3_DMAT | USART_CR3_DMAR ; USART3->CR1 |= USART_CR1_UE; NVIC_EnableIRQ(USART3_IRQn); } void USART_DMA_RX_init(void) { RCC->AHBENR |= RCC_AHBENR_DMA1EN; DMA1_Channel3->CPAR = (uint32_t)&USART3->DR; DMA1_Channel3->CMAR = (uint32_t)rx_data; DMA1_Channel3->CNDTR = 20; DMA1_Channel3->CCR |= DMA_CCR3_MINC | DMA_CCR3_TCIE | DMA_CCR3_HTIE ; DMA1_Channel3->CCR |= DMA_CCR3_EN; NVIC_EnableIRQ(DMA1_Channel3_IRQn); } int main(void) { RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN; GPIOB->CRH = 0x00008B00; USART_DMA_RX_init(); USART3_config(); while(1) { } } void DMA1_Channel3_IRQHandler(void) { if((DMA1->ISR & DMA_ISR_HTIF3) == DMA_ISR_HTIF3) { DMA1->IFCR = DMA_IFCR_CHTIF3; } else if((DMA1->ISR & DMA_ISR_TCIF3)== DMA_ISR_TCIF3) { DMA1->IFCR = DMA_IFCR_CGIF3 | DMA_IFCR_CTCIF3; } } void USART3_IRQHandler(void) { if((USART3->SR & USART_SR_RXNE) == USART_SR_RXNE) { USART3->SR &= ~ USART_SR_RXNE; } }
Last edited by a moderator: