STM32F429的UART在做RS232时收发正常,但做RS485时发送正常,接收不到数据。
void Uart5_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource12,GPIO_AF_UART5);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_UART5);
USART_DeInit(UART5);
USART_InitStructure.USART_BaudRate=4800;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_WordLength=USART_WordLength_9b;
USART_InitStructure.USART_Parity=USART_Parity_Odd;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_Init(UART5,&USART_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=UART5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_ITConfig(UART5,USART_IT_RXNE,ENABLE);
USART_Cmd(UART5,ENABLE);
}
void UART5_IRQHandler(void)
{
rec_num=0;
while(USART_GetITStatus(UART5,USART_IT_RXNE)==SET)
{
USART_ClearITPendingBit(UART5,USART_IT_RXNE);
recdata[rec_num]=USART_ReceiveData(UART5);
rec_num++;
}
USART_SendStr(UART5,recdata);
GPIO_ToggleBits(GPIOG,GPIO_Pin_14);
}
void USART_SendStr(USART_TypeDef* USARTx,uint8_t *str)
{
//USART_ITConfig(UART5,USART_IT_RXNE,DISABLE);
GPIO_SetBits(GPIOB,GPIO_Pin_4);
while(*str)
{
while((USART_GetFlagStatus(USARTx,USART_FLAG_TXE))!=SET);
USART_SendData(USARTx,*str);
str++;
}
while((USART_GetFlagStatus(USARTx,USART_FLAG_TC))!=SET);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
//USART_ITConfig(UART5,USART_IT_RXNE,ENABLE);
}
|