<求助>STM32,通过串口1用DMA实现内存到外设的数据传输中,哪一步是实现数据传送到串口的?
//这是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文可以的话去看看原版官方手册,里面写的非常的详细。