fzy_666 发表于 2022-12-14 07:35

LPUART串口会连续发送两次数据

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会发送两次数据,请求帮助,谢谢!

sy12138 发表于 2022-12-14 13:51

怎么看到传输两次数据的?

fzy_666 发表于 2022-12-15 07:47

是一次,已经找到,在蓝牙端的问题,谢谢!
页: [1]
查看完整版本: LPUART串口会连续发送两次数据