USART2_DMA_Buf 已经初始化值{1,3,4};
下面代码是DMA的初始化。
3.使用dma传输
DMA_ClearFlag(DMA1_FLAG_TC7); //清DMA发送完成标志
DMA_Cmd(DMA1_Channel7, DISABLE); //停止DMA
DMA_Cmd(DMA1_Channel7,ENABLE);
4. 正常是目的是想循环输出 1 3 4
求解谢谢。
/****************************************************************/
void USART_DMA_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);
//启动USART1
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//启动串口2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
//启动DMA时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 19200; //
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART2, &USART_InitStructure);
DMA_DeInit(DMA1_Channel7);//串口1的DMA传输通道是通道4 (串口2的Tx通道是7)
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)USART2->DR; //USART2->DR ;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)USART2_DMA_Buf;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//外设作为DMA的目的端
DMA_InitStructure.DMA_BufferSize = 10;//传输大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不增加
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址自增1
DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_Byte ;// DMA_PeripheralDataSize_Byte; //DMA_PeripheralDataSize_Word
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//DMA_Mode_Normal(只传送一次), DMA_Mode_Circular (不停地传送)
DMA_InitStructure.DMA_Priority =DMA_Priority_High ;// DMA_Priority_High;//(DMA传送优先级为中等)
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel7, &DMA_InitStructure);
DMA_Cmd(DMA1_Channel7,ENABLE) ;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Enable the USARTy Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
// USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_Cmd(USART2, ENABLE);
}
//如果使用printf("xxxfda\n"); 串口2能够打印。
//DMA1_Channel7就是调试不通。求解。 |