STM32F103C8T6串口DMA不发送

2019-07-20 23:32发布

uint8_t printf_tx_dma_save[64]={0};
uint8_t printf_rx_dma_save[64]={0};
void printf_init(void)
{
                LL_DMA_ConfigAddresses(DMA1,LL_DMA_CHANNEL_4,(uint32_t)*&printf_tx_dma_save,LL_USART_DMA_GetRegAddr(USART1),LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
                LL_DMA_ConfigAddresses(DMA1,LL_DMA_CHANNEL_5,LL_USART_DMA_GetRegAddr(USART1 ), (uint32_t)*&printf_rx_dma_save, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
}


uint8_t printf_tx(char* format, ...)
{
        unsigned int i = 0;
        LL_DMA_ClearFlag_TC4(DMA1);
        LL_DMA_DisableChannel(DMA1 ,LL_DMA_CHANNEL_4);
        va_list ap;                            //定义一个va_list型的变量,这个变量是指向参数的指针.
        va_start(ap, format);                 //用va_start宏初始化变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数
        i = vsnprintf((char*)printf_tx_dma_save, 64, format, ap); //注意,不要漏掉前面的_
        va_end(ap);                            //用va_end宏结束可变参数的获取
        LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_4,i);//DMA输出长度
        LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_4);//启动DMA传输
        return i;                                    //返回参数的字符个数中间有逗号间隔
}
这是使用代码
这里是配置的内容,使用的是LL库(cube生成)
LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_4, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);

  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PRIORITY_LOW);

  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MODE_NORMAL);

  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PERIPH_NOINCREMENT);

  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MEMORY_INCREMENT);

  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PDATAALIGN_BYTE);

  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MDATAALIGN_BYTE);



QQ截图20190620221553.png
QQ截图20190620221514.png

感觉就像DMA根本没有开始传输,但是该打开的都打开了==
同时DMA1 第1通道循环模式搬运ADC数据,运行的很正常
怀疑有可能1通道挤占了4通道,但是我后来把1通道给关了,依旧没用==
求大佬解惑
QQ截图20190620222043.png
这是cube的设置

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。