初级会员

- 积分
- 85
- 金钱
- 85
- 注册时间
- 2016-10-31
- 在线时间
- 18 小时
|

楼主 |
发表于 2016-12-31 16:08:36
|
显示全部楼层
下面是USART配置:
void UART4_Init(u32 bound)
{
USART_InitTypeDef USART_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);//ê1ÄüUSART4ê±Öó
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOE,ENABLE);
//UART4μÄIO¿úÅäÖÃ
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;//PC10ÎaUART4μÄTX¶Ë
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//íÆÃa¸′óÃêä3öÄ£ê½
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;//PC11ÎaUART4μÄRX¶Ë
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕêäèëÄ£ê½
GPIO_Init(GPIOC,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStruct);
USART_InitStruct.USART_BaudRate = bound;//′®¿ú2¨ìØÂê
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//êÕ/·¢Ä£ê½
USART_InitStruct.USART_Parity = USART_Parity_No;//ÎTÆæÅ¼D£Ñéλ
USART_InitStruct.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8λêy¾Y3¤¶è
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼tá÷¿ØÖÆ
USART_Init(UART4,&USART_InitStruct);//3õê¼»ˉ′®¿ú4
USART_Cmd(UART4,ENABLE);//ê1Äü′®¿ú4
}
/*****************************************************************************************************
*****************************************************************************************************/
void USART1_Init(u32 bound)
{
USART_InitTypeDef USART_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;//PC10ÎaUART4μÄTX¶Ë
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//íÆÃa¸′óÃêä3öÄ£ê½
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;//PC11ÎaUART4μÄRX¶Ë
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕêäèëÄ£ê½
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
USART_InitStruct.USART_BaudRate = bound;//′®¿ú2¨ìØÂê
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//êÕ/·¢Ä£ê½
USART_InitStruct.USART_Parity = USART_Parity_No;//ÎTÆæÅ¼D£Ñéλ
USART_InitStruct.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8λêy¾Y3¤¶è
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼tá÷¿ØÖÆ
USART_Init(USART1,&USART_InitStruct);//3õê¼»ˉ′®¿ú4
USART_Cmd(USART1,ENABLE);//ê1Äü′®¿ú4
}
下面是DMA配置:
void UART4_DMATX_Init(u32 cpar,u32 cmar,u16 cndtr)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); //ê1ÄüDMA2′«êä
DMA_DeInit(DMA2_Channel5);//½«DMA2μÄí¨μà5¼Ä′æÆ÷ÖØéèÎaè±ê¡Öμ
DMA1_MEM_LEN = cndtr;
DMA_InitStructure.DMA_BufferSize = cndtr;//DMAí¨μà′«êäμÄêy¾Yá¿
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//êy¾Y′«êä·½Ïò£¬′óÄú′æμ½íaéè
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//2»¿aÆôÄú′æμ½Äú′æ′«êä
DMA_InitStructure.DMA_MemoryBaseAddr = cmar;//DMAÄú′æ»ùμØÖ·
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;//êy¾Y¿í¶èÎa8λ
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//Äú′æμØÖ·¼Ä′æÆ÷μYÔö
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//1¤×÷ÔúÕy3£Ä£ê½£¬2»Ñ-»·2é¼ˉêy¾Y
DMA_InitStructure.DMA_PeripheralBaseAddr =cpar;//DMAíaéè»ùμØÖ·
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//êy¾Y¿í¶èÎa8λ
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //íaéèμØÖ·¼Ä′æÆ÷2»±ä
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;//′ËDMAí¨μàóD×î¸ßóÅÏèè¨
DMA_Init(DMA2_Channel5,&DMA_InitStructure);//3õê¼»ˉDMA2í¨μà5£¨UART4_TX£©
}
/*********************************************************************************
*********************************************************************************/
void USART1_DMARX_Init(u32 cpar,u32 cmar,u16 cndtr)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel5);
DMA1_MEM_LEN = cndtr;
DMA_InitStructure.DMA_BufferSize = cndtr;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_InitStructure.DMA_MemoryBaseAddr = cmar;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_PeripheralBaseAddr =cpar;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_Init(DMA1_Channel5,&DMA_InitStructure);
}
/******************************************************************************/
/******************************************************************************/
void UART4_DMA_Enable(void)
{
DMA_Cmd(DMA2_Channel5,DISABLE);
DMA_SetCurrDataCounter(DMA2_Channel5,1);
USART_DMACmd(UART4,USART_DMAReq_Tx,ENABLE);
DMA_Cmd(DMA2_Channel5,ENABLE);
}
/**********************************************************************************
**********************************************************************************/
void USART1_DMA_Enable(void)
{
DMA_Cmd(DMA1_Channel5,DISABLE);
DMA_SetCurrDataCounter(DMA1_Channel5,USART1_RECEIVE_MAX);
((DMA_Channel_TypeDef*)DMA1_Channel5)->CMAR=(u32)USART1_RECEIVE_BUF;
USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);
DMA_Cmd(DMA1_Channel5,ENABLE);
}
|
|