本帖最后由 yangjiaoshai 于 2021-9-13 14:34 编辑
自己照着论坛和手册改的一个模板出来,
发送函数:
void usart_send(uint8_t *pbuff, uint16_t size)
{
uint16_t i;
DMA_SetBlockSize(DMA_UNIT1, DMA_CH1_TX, 1);
DMA_SetTransferCnt(DMA_UNIT1, DMA_CH1_TX, 13);
DMA_SetSrcAddress(DMA_UNIT1, DMA_CH1_TX, (uint32_t)(uart1_rcv));
DMA_ChannelCmd(DMA_UNIT1, DMA_CH1_TX, Enable);
DMA_ClearIrqFlag(DMA_UNIT1, DMA_CH1_TX, TrnCpltIrq);
USART_FuncCmd(USART_CH1, UsartTx, Enable);
USART_FuncCmd(USART_CH1, UsartTxEmptyInt, Enable);
}
发送DMA配置:
static void DmaUartTxInit(void)
{
stc_dma_config_t stcDmaInitTX;
stc_irq_regi_conf_t stcIrqRegiCfgTX;
/* Enable peripheral clock */
PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_DMA1 | PWC_FCG0_PERIPH_DMA2,Enable);
/* Enable DMA. */
DMA_Cmd(DMA_UNIT1,Enable);
/* Initialize DMA. */
MEM_ZERO_STRUCT(stcDmaInitTX);
stcDmaInitTX.u16BlockSize = 1u; /* 1 block */
stcDmaInitTX.u16TransferCnt = 11u;
stcDmaInitTX.u32SrcAddr = (uint32_t)(uart1_TX); /* Set source address. */
stcDmaInitTX.u32DesAddr = ((uint32_t)(&USART_CH1->DR));//&USART_CH->DR); /* Set destination address. */
stcDmaInitTX.stcDmaChCfg.enSrcInc = AddressIncrease; /* Set source address mode. */
stcDmaInitTX.stcDmaChCfg.enDesInc = AddressFix; /* Set destination address mode. */
stcDmaInitTX.stcDmaChCfg.enIntEn = Enable; /* Enable interrupt. */
stcDmaInitTX.stcDmaChCfg.enTrnWidth = Dma8Bit; /* Set data width 8bit. */
DMA_InitChannel(DMA_UNIT1, DMA_CH1_TX, &stcDmaInitTX);
/* Set DMA trigger source. */
DMA_SetTriggerSrc(DMA_UNIT1, DMA_CH1_TX, EVT_USART1_TI);
/* Set DMA block transfer complete IRQ */
stcIrqRegiCfgTX.enIRQn = Int003_IRQn;//DMA_BTC_TX_INT_IRQn;//DMA_BTC_INT_IRQn;//int numb
stcIrqRegiCfgTX.pfnCallback = &DmaTXBtcIrqCallback;//callback fun
stcIrqRegiCfgTX.enIntSrc = INT_DMA1_TC1;//DMA_BTC_TX_INT_NUM;//int sourc
enIrqRegistration(&stcIrqRegiCfgTX);
NVIC_SetPriority(stcIrqRegiCfgTX.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
NVIC_ClearPendingIRQ(stcIrqRegiCfgTX.enIRQn);
NVIC_EnableIRQ(stcIrqRegiCfgTX.enIRQn);
}
电脑发数给板子,板子收到数据后,置一个标志,然后去主while里去调用发送函数,发送长度是直接设置的,与接收数据个数没关系。接收数组长度为20,大于发送数据的个数 |