-
关于HC32F4A0 串口DMA 接收指定数据长度后无法自动重载的问题
开始发错板块了,这里重新发一下根据官方例程,串口1配置完成后收发正常,如法庖制串口2时,串口2正常,串口1接收异常,接收完预设大小的数据后计数为0,无法重置。目前根据自己理解配置DMA如下/*DMAdefinition*/#defineUSART1_RX_DMA_UNIT(CM_DMA1)#defineUSART1_RX_DMA_CH(DMA_CH0)#defineUSART1_RX_DMA_FCG_ENABLE()(FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA1,ENABLE))#defineUSART1_RX_DMA_TRIG_SEL(AOS_DMA1_0)#defineUSART1_RX_DMA_TRIG_EVT_SRC(EVT_SRC_USART1_RI)voidAPP_DMA_Config(void){int32_ti32Ret;stc_dma_init_tstcDmaInit;stc_dma_llp_init_tstcDmaLlpInit;stc_irq_signin_config_tstcIrqSignConfig;staticstc_dma_llp_descriptor_tstcLlpDesc;stc_dma_repeat_init_tstcdmarepeatinit_t;/*DMA&AOSFCGenable*/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);///*RepeatConfig*/(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_R
2025-03-16 2 -
关于HC32F4A0 串口DMA接收计数无法重置的问题
根据官方例程,串口1配置完成后收发正常,如法**制串口2时,串口2正常,串口1接收异常,接收完预设大小的数据后计数为0,无法重置。目前根据自己理解配置DMA如下/*DMAdefinition*/#defineUSART1_RX_DMA_UNIT(CM_DMA1)#defineUSART1_RX_DMA_CH(DMA_CH0)#defineUSART1_RX_DMA_FCG_ENABLE()(FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA1,ENABLE))#defineUSART1_RX_DMA_TRIG_SEL(AOS_DMA1_0)#defineUSART1_RX_DMA_TRIG_EVT_SRC(EVT_SRC_USART1_RI)voidAPP_DMA_Config(void){int32_ti32Ret;stc_dma_init_tstcDmaInit;stc_dma_llp_init_tstcDmaLlpInit;stc_irq_signin_config_tstcIrqSignConfig;staticstc_dma_llp_descriptor_tstcLlpDesc;stc_dma_repeat_init_tstcdmarepeatinit_t;/*DMA&AOSFCGenable*/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);///*RepeatConfig*/(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,EN
2025-03-16 0