最近遇到一个问题,两个设备,一个是RS422通信方式,一个是RS485通信方式。问题是:怎么把他们直接连接了?
485只发送,422只接收。
我这样接可以解决问题,但是:接收时间久了422端就变成乱码了。
方法如下: 422A----485A;422B---485B.
485端我配置好后,用USB转422转换器可以正常通信。代码就不贴了。
422端代码如下:
[mw_shl_code=c,true]void USART2_IRQHandler(void) // ???????????ú??????
{
u8 i,sum = 0;
if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)
{
USART2_RX_BUF[USART2_RX_num++] = USART_ReceiveData(USART2);//(USART2->DR); //????????????????
if( USART2_RX_num >= USART2_REC_LEN ) // USART2_HeadCheck_code[10]
{
USART2_RX_num = 0;
if(USART2_RX_BUF[0] == (0x70) || USART2_RX_BUF[0] == (0x71) || USART2_RX_BUF[0] == (0x72) || USART2_RX_BUF[0] == (0x73)
|| USART2_RX_BUF[0] == (0x74) || USART2_RX_BUF[0] == (0x75) || USART2_RX_BUF[0] == (0x76) || USART2_RX_BUF[0] == (0x77)
|| USART2_RX_BUF[0] == (0x78) || USART2_RX_BUF[0] == (0x79))
{
sum = 0;
for(i = 0;i<7;i++)
{
sum += USART2_RX_BUF;
if(sum != USART2_RX_BUF[7])
USART_ITConfig( USART2,USART_IT_RXNE, ENABLE);
else
{
for(i = 0;i<8;i++)
{
RXD_FromPC2 = USART2_RX_BUF;
}
}
}
}
}
USART_ITConfig( USART2,USART_IT_RXNE, ENABLE );
}
}
[/mw_shl_code]
中断配置如下:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
一开始接收是正确的,但是接收一段时间后,就变成乱码了。
有人遇到过这样的情况吗?
|