使用dma将数据从内存发送到串口,为什么没有串口发送函数,就会把数据发送出去


#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_dma_mtp.h"

extern uint8_t SendBuff[SENDBUFF_SIZE];

void Delay( uint32_t count )
{
    for (; count!=0;count--);
}


int main(void)
{
    uint16_t i;
    // 来到这里的时候,系统的时钟已经被配置成72M。
    LED_GPIO_Config();    
    
    USART_Config();
    
    for ( i=0; i'P';
    }
    
    USARTx_DMA_Config();
    USART_DMACmd(DEBUG_USARTx, USART_DMAReq_Tx, ENABLE);
    
    while (1)
    {
        LED_B(ON);
    }
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/212153
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:百度DMA+小度App的蓝牙语音解决方案入局
  • 除此之外, 这篇博客: 实现DMA从存储器到外设的数据传输中的 存储器数据写入 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 本来我对这段代码不了解,后来搞懂了回车换行就清楚了,代码写得很好。
    它要把数据放入输入数据缓冲区中,填入的是整数个TEXT_TO_SEND里面的内容。
    u8 SendBuff[SEND_BUF_SIZE]; //发送数据缓冲区
    开始写入第一句未写完执行外层if的else情况,直至写完执行内层if语句的else情况,写入0X0D(为回车符’\r’),同时mask加1,接着执行上一部分,写入0X0A(为换行符’\n’),同时将t清零,开始写第二句,如此重复,直至写满数据缓冲区。

    	j=sizeof(TEXT_TO_SEND);	   
    	for(i=0;i<SEND_BUF_SIZE;i++)//填充ASCII字符集数据
        {
    		if(t>=j)//加入换行符
    		{
    			if(mask)
    			{
    				SendBuff[i]=0x0a;
    				t=0;
    			}else 
    			{
    				SendBuff[i]=0x0d;
    				mask++;
    			}	
    		}else//复制TEXT_TO_SEND语句
    		{
    			mask=0;
    			SendBuff[i]=TEXT_TO_SEND[t];
    			t++;
    		}   	   
        }