void LPUART_DMA_Configuration(void)
{
RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_DMA, ENABLE); /* DMA 外设DMA时钟使能 */
/*=========== LPUARTy TX DMA信道(由LPUARTy TX事件触发)配置 ===========*/
DMA_DeInit(LPUARTy_Tx_DMA_Channel); /* DMA 采用DMA的通道1,外设地址 */
LPUART_DMA_InitStructure.PeriphAddr = LPUARTy_DAT_Base; /* DMA LPUART外设数据寄存器基地址 */
LPUART_DMA_InitStructure.MemAddr = (uint32_t)TxBuffer1; /* DMA 内存源地基地址 */
LPUART_DMA_InitStructure.Direction = DMA_DIR_PERIPH_DST; /* DMA 传送方向:从内存源地基地址到LPUART外设基地址 */
LPUART_DMA_InitStructure.BufSize = TxBufferSize1; /* DMA 缓冲区大小:countof(TxBuffer1) */
LPUART_DMA_InitStructure.PeriphInc = DMA_PERIPH_INC_DISABLE; /* DMA LPUART外设基地址自增量禁能 */
LPUART_DMA_InitStructure.DMA_MemoryInc = DMA_MEM_INC_ENABLE; /* DMA 内存目的地基地址自增量使能 */
LPUART_DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_BYTE; /* DMA LPUART外设数据宽度:字节(8bit) */
LPUART_DMA_InitStructure.MemDataSize = DMA_MemoryDataSize_Byte; /* DMA 内存目的地数据宽度:字节(8bit) */
LPUART_DMA_InitStructure.CircularMode = DMA_MODE_NORMAL; /* DMA 模式:工作在正常缓存模式 */
LPUART_DMA_InitStructure.Priority = DMA_PRIORITY_VERY_HIGH; /* DMA 优先级:拥有非常高优先级 */
LPUART_DMA_InitStructure.Mem2Mem = DMA_M2M_DISABLE; /* DMA 内存到内存:禁能 */
DMA_Init(LPUARTy_Tx_DMA_Channel, &LPUART_DMA_InitStructure); /* DMA 配置进行封装 */
DMA_RequestRemap(LPUARTy_Tx_DMA_REMAP, DMA, LPUARTy_Tx_DMA_Channel, ENABLE);/* DMA 使能DMA和DMA通道1 */
DMA_ConfigInt(LPUARTy_Tx_DMA_Channel, DMA_INT_TXC, ENABLE); /* 启用LPUARTy Tx DMA通道传输完成中断 */
}
void SendAnsw(void)
{
DMA_ClearFlag(LPUARTy_Tx_DMA_FLAG,DMA); /* 清除DMA中断标志 */
DMA_EnableChannel(LPUARTy_Tx_DMA_Channel,DISABLE); /* DMA_TX通道禁能 */
DMA_SetCurrDataCounter(LPUARTy_Tx_DMA_Channel,TxBufferSize1); /* 重置DMA_TX发送数据量 */
DMA_EnableChannel(LPUARTy_Tx_DMA_Channel,ENABLE); /* DMA_TX通道使能 */
}
碰到的问题是,DMA会发送两次数据,请求帮助,谢谢! |