OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9657|回复: 4

RS485直接接RS422连线方案

[复制链接]

8

主题

163

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5609
金钱
5609
注册时间
2013-3-16
在线时间
661 小时
发表于 2015-11-23 19:57:51 | 显示全部楼层 |阅读模式
5金钱
最近遇到一个问题,两个设备,一个是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); 



一开始接收是正确的,但是接收一段时间后,就变成乱码了。 

有人遇到过这样的情况吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6769

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13157
金钱
13157
注册时间
2012-11-26
在线时间
3817 小时
发表于 2015-11-23 21:12:01 | 显示全部楼层
楼主这接法第一次见到。。。。
学无止境
回复

使用道具 举报

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-11-22
在线时间
4 小时
发表于 2015-11-24 12:40:06 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
USART_ITConfig( USART2,USART_IT_RXNE, ENABLE );这个在 USART2初始化使能一次就可以了,为什么每次进中断一次就要使能一次呢?
中断里面建议不要加过多的for循环;
485配置成输出后,是可以接422的接收端的。注意422的接收端接上下拉,并且并一个120欧姆的电阻。
你可以用示波器测下两者的电平是否匹配。
回复

使用道具 举报

8

主题

163

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5609
金钱
5609
注册时间
2013-3-16
在线时间
661 小时
 楼主| 发表于 2015-11-25 10:49:58 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
这个只把422当成接收佣
回复

使用道具 举报

8

主题

163

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5609
金钱
5609
注册时间
2013-3-16
在线时间
661 小时
 楼主| 发表于 2015-11-25 10:51:11 | 显示全部楼层
回复【3楼】悦中天:
---------------------------------
我试试,改钙
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-16 08:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表