-
外部与我50微秒通讯一次,串口时间来不急怎么办
要求外部与我50微秒通讯一次,串口2.5M,使用485,需要切换方向角我接收用串口空闲中断+DMA接收不定长数据包,发送直接在中断中轮询发送数据,能够正常通讯,但是进行其他操作时间就不充足了,必须要用DMA去发送,但是我用DMA启动时需要时间,然后我发送完数据后就来不及接收数据了,有没有大佬帮忙看看我设置有什么问题吗发送是轮询代码voidUSARTy_IRQHandler(void){uint16_tclear;if(USART_GetIntStatus(USARTy,USART_INT_IDLEF)!=RESET){/*切换到发送模式*/GPIO_SetBits(CHALF_PORT,CHALF_PIN);uint16_tlength=RxBufferSize-USARTy_Rx_DMA_Channel->TXNUM;TxCounter1=0;/**数据处理*/while(TxCounter1<length){/*SendonebytefromUSARTytoUSARTz*/USART_SendData(USARTy,TxBuffer[TxCounter1++]);/*LoopuntilUSARTyDATregisterisempty*/while(USART_GetFlagStatus(USARTy,USART_FLAG_TXDE)==RESET){}}DMA_EnableChannel(USARTy_Rx_DMA_Channel,DISABLE);clear=USARTy->STS;clear=USARTy->DAT;USART_ConfigInt(USARTy,USART_INT_IDLEF,DISABLE);GPIO_ResetBits(CHALF_PORT,CHALF_PIN);DMA_SetCurrDataCounter(USARTy_Rx_DMA_Channel,6);DMA_EnableChannel(USARTy_Rx_DMA_Channel,ENABLE);USART_ConfigInt(USARTy,USART_INT_IDLEF,ENABLE);}}发送是DMA代码voidUSARTy_IRQHandler(void){uint16_tclear;if(USART_GetIntStatus(USARTy,USART_INT_IDLEF)!=RESET){/*切换到发送模式*/GPIO_SetBits(CHALF_PORT,CHALF_PIN);USARTy_Rx_Done=1;uint16_tlength=RxBufferSize-USARTy_Rx_DMA_Channel->TXNUM;/**数据处理*/clear=USARTy->STS;clear=USARTy->DAT;DMA_EnableChannel(USARTy_Tx_DMA_Channel,DISABLE);DMA_SetCurrDataCounter(USARTy_Tx_DMA_Channel,length);DMA_EnableChannel(USARTy_Tx_DMA_Channel,ENABLE);}}voidDMA_Channel3_4_IRQHandler(void){if(DMA_GetIntStatus(USARTy_Tx_DMA_INT,DMA)!=RESET){USARTy_Tx_Done=
2025-03-24 0