打印

关于HC32F4A0 串口DMA 接收指定数据长度后无法自动重载的问题

[复制链接]
169|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eyesmall|  楼主 | 2025-3-16 17:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开始发错板块了,这里重新发一下
根据官方例程,串口1配置完成后收发正常,如法庖制串口2时,串口2正常,串口1接收异常,接收完预设大小的数据后计数为0,无法重置。目前根据自己理解配置DMA如下 /* DMA definition */
#define USART1_RX_DMA_UNIT                             (CM_DMA1)
#define USART1_RX_DMA_CH                               (DMA_CH0)
#define USART1_RX_DMA_FCG_ENABLE()              (FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA1, ENABLE))
#define USART1_RX_DMA_TRIG_SEL                         (AOS_DMA1_0)
#define USART1_RX_DMA_TRIG_EVT_SRC             (EVT_SRC_USART1_RI)

void APP_DMA_Config(void)
{
            int32_t i32Ret;
            stc_dma_init_t stcDmaInit;
            stc_dma_llp_init_t stcDmaLlpInit;
            stc_irq_signin_config_t stcIrqSignConfig;
            static stc_dma_llp_descriptor_t stcLlpDesc;
        stc_dma_repeat_init_t stcdmarepeatinit_t;

    /* DMA&AOS FCG enable */
            USART1_RX_DMA_FCG_ENABLE();
            USART1_TX_DMA_FCG_ENABLE();
            FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_AOS, ENABLE);

    /* USART_RX_DMA */
    (void)DMA_StructInit(&stcDmaInit);
    stcDmaInit.u32IntEn = DMA_INT_DISABLE;
    stcDmaInit.u32BlockSize = 1UL;
    stcDmaInit.u32TransCount = 512;
    stcDmaInit.u32DataWidth = DMA_DATAWIDTH_8BIT;
    stcDmaInit.u32DestAddr = (uint32_t)DMARecBuf_USART1;
    stcDmaInit.u32SrcAddr = (uint32_t)(&CM_USART1->RDR);
    stcDmaInit.u32SrcAddrInc = DMA_SRC_ADDR_FIX;
    stcDmaInit.u32DestAddrInc = DMA_DEST_ADDR_INC;
    DMA_Init(USART1_RX_DMA_UNIT, USART1_RX_DMA_CH, &stcDmaInit);
                       
//    /* Repeat Config */
        (void)DMA_RepeatStructInit(&stcdmarepeatinit_t);
        stcdmarepeatinit_t.u32Mode=DMA_RPT_DEST;
        stcdmarepeatinit_t.u32DestCount=512;
        stcdmarepeatinit_t.u32SrcCount=1;
        DMA_RepeatInit(USART1_RX_DMA_UNIT, USART1_RX_DMA_CH, &stcdmarepeatinit_t);               
//   设置触发源
        AOS_SetTriggerEventSrc(USART1_RX_DMA_TRIG_SEL, USART1_RX_DMA_TRIG_EVT_SRC);
//
        DMA_Cmd(USART1_RX_DMA_UNIT, ENABLE);
        (void)DMA_ChCmd(USART1_RX_DMA_UNIT, USART1_RX_DMA_CH, ENABLE);

测试效果  串口1接收完512字节后  DMA cnt由512变为0  之后再发送数据则无法接收, 计数一直为0,不知道是理解的问题还是怎么回事,望高人指教一二

使用特权

评论回复
沙发
wubangmi| | 2025-3-17 09:27 | 只看该作者
给你提个醒,不能两个DMA都用自动重置的方式,这样会冲突。
你可以改成一个自动重置,一个手动重置的方式。

使用特权

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

本版积分规则

13

主题

151

帖子

0

粉丝