微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > <求助>STM32,通过串口1用DMA实现内存到外设的数据传输中,哪一步是实现数据传送到串口的?

<求助>STM32,通过串口1用DMA实现内存到外设的数据传输中,哪一步是实现数据传送到串口的?

时间:10-02 整理:3721RD 点击:
刚入门,知识点比较多,有点乱。

//这是DMA的配置:
DMA_InitTypeDef DMA_InitStructure;
u16 DMA1_MEM_LEN;
void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        //ê1?üDMA′?ê?
       
  DMA_DeInit(DMA_CHx);   //??DMAμ?í¨μà1??′??÷??éè?aè±ê??μ
        DMA1_MEM_LEN=cndtr;
        DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //DMAíaéèADC?ùμ??·
        DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //DMA?ú′??ùμ??·
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //êy?Y′?ê?·??ò£?′ó?ú′??áè?·¢?íμ?íaéè
        DMA_InitStructure.DMA_BufferSize = cndtr;  //DMAí¨μàμ?DMA?o′?μ?′óD?
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //íaéèμ??·??′??÷2?±?
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //?ú′?μ??·??′??÷μY??
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  //êy?Y?í?è?a8??
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //êy?Y?í?è?a8??
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  //1¤×÷?ú?y3£?o′??£ê?
        DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMAí¨μà xóμóD?Dó??è??
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMAí¨μàx??óDéè???a?ú′?μ??ú′?′?ê?
        DMA_Init(DMA_CHx, &DMA_InitStructure);  //?ù?YDMA_InitStruct?D???¨μ?2?êy3?ê??ˉDMAμ?í¨μàUSART1_Tx_DMA_Channel?ù±êê?μ???′??÷
                 
}
//使能DMA通道
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
        DMA_Cmd(DMA_CHx, DISABLE );  //1?±?USART1 TX DMA1 ?ù??ê?μ?í¨μà      
        DMA_SetCurrDataCounter(DMA1_Channel4,DMA1_MEM_LEN);//DMAí¨μàμ?DMA?o′?μ?′óD?
        DMA_Cmd(DMA_CHx, ENABLE);  //ê1?üUSART1 TX DMA1 ?ù??ê?μ?í¨μà
}          

以上哪个步骤是实现数据从串口输出的?

你不是在配置DMA的时候写了一个外设的基地址吗?然后还写了内存的基地址和数据长度吗?DMA模块会自动将内存地址的数据一个一个的写到串口的DR,也就是你的外设基地址的那个地方,写的个数也就是你设置的数据的长度。(你这里的数据是1个字节,DMA配置里面有,然后还有什么传送完成后地址加一什么的,你自己看看,还是比较好理解的。)

相当于是我配置好了,他就具有这个功能了,然后我再使能他一下,他就开始工作了么?

是的。如果你的E文可以的话去看看原版官方手册,里面写的非常的详细。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top