初级会员

- 积分
- 55
- 金钱
- 55
- 注册时间
- 2013-11-28
- 在线时间
- 0 小时
|

楼主 |
发表于 2014-9-16 10:01:43
|
显示全部楼层
回复【2楼】fly0000:
---------------------------------
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
/********************USART_Buffer*********************************************************************************/
NVIC_InitTypeDef NVIC_InitStructure ; // ?????ò?????????á??
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn ; // ????USART2????
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1 ;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;
NVIC_Init(&NVIC_InitStructure) ;
/*****************************************************************************************************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
/****************GPIO_Pin_485_DE**********************************************************************************/
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; /****GPIO_Mode_IN; GPIO_Mode_OUT; GPIO_Mode_AF; GPIO_Mode_AN****/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; /****GPIO_Pin_Select****/
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/****GPIO_Speed_2MHz VL; GPIO_Speed_25MHz LP****/
/****GPIO_Speed_50MHz MS; GPIO_Speed_100MHz HS****/
GPIO_Init(USART2_PORT,&GPIO_InitStructure);
/*****************************************************************************************************************/
USART2_DE_RX;
/******************GPIO_Pin_485_TX********************************************************************************/
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; /****GPIO_Mode_IN; GPIO_Mode_OUT; GPIO_Mode_AF; GPIO_Mode_AN****/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; /****GPIO_Pin_Select****/
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/****GPIO_Speed_2MKHz VL; GPIO_Speed_25MHz LP****/
/****GPIO_Speed_50MHz MS; GPIO_Speed_100MHz HS****/
GPIO_Init(GPIOA,&GPIO_InitStructure);
// GPIO_PinAFConfig(USART2_PORT,USART2_TX_AF_Pin,GPIO_AF_USART2); /*****Connect The  in To The USART2******/
/******************GPIO_Pin_485_RX********************************************************************************/
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; /****GPIO_Mode_IN; GPIO_Mode_OUT; GPIO_Mode_AF; GPIO_Mode_AN****/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; /****GPIO_Pin_Select****/
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/****GPIO_Speed_2MHz VL; GPIO_Speed_25MHz LP****/
/****GPIO_Speed_50MHz MS; GPIO_Speed_100MHz HS****/
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_PinLockConfig(GPIOA,GPIO_Pin_0| \
GPIO_Pin_2| \
GPIO_Pin_3); /***********Lock The 485Pin Configuration*****************/
/*****************************************************************************************************************/
/******************GPIO_485_USART_Config*************************************************************************/
USART_InitStructure.USART_BaudRate=Modbus_RTU_USART_Parameter_USART2.Baud_Rate;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//?ò???????????÷·?????????
USART_Cmd(USART2, ENABLE);
void USART2_IRQHandler(void)
{
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
if(USART_GetITStatus(USART2,USART_IT_TXE)==SET)//????·????????÷??????
{
if(USART2_TX_Index<USART2_TX_Data_Length)//????????·????ê?????ò·?????????
{
//MB_RTU_TX2_LED_ENABLE();
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
USART2->DR=USART2_TX_Buffer[USART2_TX_Index];//?ù·????????÷????????
USART2_TX_Index+=1;
}
else //????·????ê????
{
USART_ITConfig(USART2,USART_IT_TXE,DISABLE);//??±?·????????÷????????
USART_ITConfig(USART2,USART_IT_TC,ENABLE);//?ò??·????ê????????
USART2_TX_Index=0;
}
}
else if(USART_GetITStatus(USART2,USART_IT_TC)==SET)//????·????ê????????
{
//MB_RTU_TX2_LED_DISABLE();
GPIO_SetBits(GPIOC,GPIO_Pin_3);
USART_ITConfig(USART2,USART_IT_TC,DISABLE);//??±?·????ê????????
xSemaphoreGiveFromISR( xSem_USART2_TX_OK, &xHigherPriorityTaskWoken );
if( xHigherPriorityTaskWoken != pdFALSE )
portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
else if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)//?????????????÷·?????????
{
//if(USART2->SR&0X03) //?ì?é???é?í?ó±ê???????í?ó±ê????
//USART2_Parity_Error_Flag_Index=1;
USART2_RX_Buffer[USART2_RX_Index]=USART2->DR ;//??????????
USART2_RX_Index+=1; |
|