本帖最后由 ssssssssssss 于 2016-12-15 20:22 编辑
我想实现: 串口同步转发 串口1接收到数据转发到串口2,串口2接收到数据转发到串口1,
具体是这样的,串口2控制着一个蓝牙模块,但是我想用串口1来配置蓝牙模块,考虑到速度,我希望串口2接收到数据串口1可以立马发出来,串口1接收到数据串口2可以立马发出去,最好没有时间间隔,可以实现吗? 我实验了一下,采用dma转发会有丢数据和乱码的情况出现,比如发送20个字节可能会有三四个数据漏发或者错误!请问大神们有办法吗?
void USART1_IRQHandler(void)
{
if(USART1->SR&BIT5) //接收到数据
{
USART1_NUM++;
// UsartRx(USART1->DR);
// DMAbuffer1[0]=USART1->DR;
if((DMA1->ISR&(1<<25)))
{
USART2DMA_Enable(DMA1_Channel7,1);
}
USART1->SR &= ~BIT5;
}
}
void USART2_IRQHandler(void)
{//
if(USART2->SR&BIT5) //接收到数据
{
USART2_NUM++;
// DMAbuffer1[0]=USART2->DR;
if((DMA1->ISR&(1<<13)))
{
DMA1_MEM_LEN=1; //清除通道4传输完成标志
MYDMA_Enable(DMA1_Channel4);
}
USART2->SR &= ~BIT5;
// usart2TxLen++;
// GetSPace=0;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART1);
USART_SendData( USART2, Res);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!=SET);
}
}
一周热门 更多>