[技术问答] 关于串口DMA发送的问题求教

[复制链接]
1304|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 ;
}
xixi2017 发表于 2018-2-26 20:44 | 显示全部楼层
官方的DMA例子是怎么用的。
稳稳の幸福 发表于 2018-2-26 21:26 | 显示全部楼层
不太习惯这个DMA应用。
598330983 发表于 2018-2-27 14:58 来自手机 | 显示全部楼层
再次开启是不是初始化了,所以第一次的被清空了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

187

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部