发新帖我要提问
12
返回列表
打印

stm32 uart 同时接收和发送时存在丢失数据的现象

[复制链接]
楼主: haov000
手机看帖
扫描二维码
随时随地手机跟帖
21
maple_21| | 2015-12-29 21:29 | 只看该作者 回帖奖励 |倒序浏览
亲,我也遇到这样的问题。刚刚解决!确实是程序的问题。我是硬件初始化的参数不对,导致的!本来应该是这个值“USART_WordLength_8b;”。我写成这个值“USART_WordLength_9b;”。

使用特权

评论回复
22
hngscg| | 2016-10-19 09:39 | 只看该作者
我用DMA同时接收和发送串口,发现DMA收的时候不能发,你们遇到过没有?

使用特权

评论回复
23
hngscg| | 2016-10-19 09:41 | 只看该作者
是不是用DMA串口是一个地址,所以只能单向的吗?如果用中断接收,DMA发送会不会也一样?

使用特权

评论回复
24
hngscg| | 2016-10-19 09:46 | 只看该作者
void usart2dmaprocess(void)
{
                u16 i;
    DMA_Cmd(DMA1_Channel6,DISABLE);       // ¹Ø±ÕDMA
    DMA_ClearFlag(DMA1_FLAG_GL6);           // Çå³ýDMA±êÖ¾
    U2INDEX=2000-DMA_GetCurrDataCounter(DMA1_Channel6); //»ñµÃÊÕµ½µÄ×Ö½Ú
    DMA1_Channel6->CNDTR =2000;    //ÖØи³Öµ
    DMA_Cmd(DMA1_Channel6,ENABLE);        // ¿ªÆôDMA
          for(i=0;i<U2INDEX;i++)
          {
                        U2SENTT[i]=U2REVICE[i];
                }
                U2R**=1;
}
void USART2_IRQHandler(void)
{
        if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)
        {
                usart2dmaprocess();
                USART_ReceiveData(USART2);//Çå³ý±êÖ¾
        }
}
void usart2process(void)
{
        if(U2R**)
        {
                U2R**=0;
                DMA1_Channel7->CMAR=(u32)U2SENTT;
                USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
                MYDMA_Enable(DMA1_Channel7,U2INDEX);               
        }
}
这个是大概的程序,串口接收USART_IT_IDLE中断,然后读数据置标志主程序读标志发回去,结果发现有数据接收的时候串口DMA是不发数据的,麻烦香水城帮忙解决一下看看那里有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则