打印
[技术问答]

关于串口DMA发送的问题求教

[复制链接]
1108|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
18576478035|  楼主 | 2018-2-24 11:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用STM32串口DMA多次发送数据,当我第一次发送第一组串口数据时,如果发送未完成,又再次开启DMA发送第二组数据,此时会出现什么情况,求助?我测试的结果是第一组的数据发送一半就不在发送了,如果想用串口DMA发送多组不同的数据需要怎么做?必须等待第一次数据发送完成了才能发送第二组数据吗?
沙发
734774645| | 2018-2-24 12:11 | 只看该作者
你开启一次不就行了?发送完第一组,会自动排队发第二组吧。

使用特权

评论回复
板凳
18576478035|  楼主 | 2018-2-24 15:05 | 只看该作者
734774645 发表于 2018-2-24 12:11
你开启一次不就行了?发送完第一组,会自动排队发第二组吧。

不行啊

使用特权

评论回复
地板
18576478035|  楼主 | 2018-2-24 15:06 | 只看该作者

[code]        //使能DMA串口发送
       PDMA_Open(1 << 1);

                                PDMA_UART1_TxTest() ;
                                PDMA_UART2_TxTest() ;
void PDMA_UART1_TxTest(void)
{
    /* UART Tx PDMA channel configuration */
    /* Set transfer width (8 bits) and transfer count */
    PDMA_SetTransferCnt(1, PDMA_WIDTH_8, 64);
                my_strncpy(SrcArray,buf1,64) ;

    /* Set source/destination address and attributes */
           PDMA_SetTransferAddr(1, (uint32_t)SrcArray, PDMA_SAR_INC, (uint32_t)&UART0->DAT, PDMA_DAR_FIX);

   // PDMA_SetTransferAddr(1, (uint32_t)buf1, PDMA_SAR_INC, (uint32_t)&UART0->DAT, PDMA_DAR_FIX);

    /* Set request source; set basic mode. */
    PDMA_SetTransferMode(1, PDMA_UART0_TX, FALSE, 0);

    /* Single request type */
    PDMA_SetBurstType(1, PDMA_REQ_SINGLE, 0);

    /* Disable table interrupt */
    PDMA->DSCT[1].CTL |= PDMA_DSCT_CTL_TBINTDIS_Msk;
       
          UART0->INTEN |= UART_INTEN_TXPDMAEN_Msk ;
}

void PDMA_UART2_TxTest(void)
{
    /* UART Tx PDMA channel configuration */
    /* Set transfer width (8 bits) and transfer count */
    PDMA_SetTransferCnt(1, PDMA_WIDTH_8, 64);
                my_strncpy(SrcArray,buf2,64) ;

    /* Set source/destination address and attributes */
    PDMA_SetTransferAddr(1, (uint32_t)SrcArray, PDMA_SAR_INC, (uint32_t)&UART0->DAT, PDMA_DAR_FIX);

    /* Set request source; set basic mode. */
    PDMA_SetTransferMode(1, PDMA_UART0_TX, FALSE, 0);

    /* Single request type */
    PDMA_SetBurstType(1, PDMA_REQ_SINGLE, 0);

    /* Disable table interrupt */
    PDMA->DSCT[1].CTL |= PDMA_DSCT_CTL_TBINTDIS_Msk;
       
          UART0->INTEN |= UART_INTEN_TXPDMAEN_Msk ;
}

使用特权

评论回复
5
xixi2017| | 2018-2-26 20:44 | 只看该作者
官方的DMA例子是怎么用的。

使用特权

评论回复
6
稳稳の幸福| | 2018-2-26 21:26 | 只看该作者
不太习惯这个DMA应用。

使用特权

评论回复
7
598330983| | 2018-2-27 14:58 | 只看该作者
再次开启是不是初始化了,所以第一次的被清空了

使用特权

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

本版积分规则

55

主题

187

帖子

2

粉丝