crcresult = getCRC16(TxBuffer,Uart4_TX_counter);
TxBuffer[Uart4_TX_counter] = crcresult & 0xff;
TxBuffer[Uart4_TX_counter+1] = (crcresult >> 8) & 0xff;
Uart4_TX_counter = Uart4_TX_counter+2;
Uart4_TX_pointer = TxBuffer;//set USART DMA send buffer size
DMA_Cmd(UART4_Tx_DMA_Channel, DISABLE); //disable DMA channel
DMA_DeInit(UART4_Tx_DMA_Channel);
DMA_InitTypeDef DMA_InitStructure;
/* UART4 TX DMA2 Channel (triggered by UART4 Tx event) Config */
DMA_DeInit(UART4_Tx_DMA_Channel);
DMA_InitStructure.DMA_PeripheralBaseAddr = UART4_DR_Base;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)TxBuffer;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize = Uart4_TX_counter;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(UART4_Tx_DMA_Channel, &DMA_InitStructure);
DMA_Cmd(UART4_Tx_DMA_Channel, ENABLE); //enable DMA channel //copy received data to output buffer
while(UART4_Tx_DMA_Channel->CNDTR !=0)
;
while(!(DMA2->ISR & UART4_Tx_DMA_FLAG))//INDICATES DMA TRAN COMPLETED
;
while(!(UART4->SR & 0x040))
;
GPIO_ResetBits(GPIOC, GPIO_Pin_12);//rs485 RX enable
|