OpenEdv-开源电子网

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

关于STM32F4XX的485通信中断接收的问题

[复制链接]

15

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2012-8-7
在线时间
7 小时
发表于 2012-9-9 10:00:09 | 显示全部楼层 |阅读模式
关于STM32F4XX的485通信中断接收的问题,数据采用应答模式,就是上位机传个控制信号来,将下位机采集到的数据传给上位机。。。。。。。。。。

发送数据的函数如下:


接收数据的函数如下:

中断接收程序如下:




现在出现了一个很奇怪的问题:

我要是把上图中的 2 给屏蔽掉了,下位机就只能接收到第一次中断,以后上位机的中断就很难接收到了,大部分中断都丢了。。。

或者我将上图中的 1 改成后面的 GetData = USART1->DR;就正常了。。。。

请问大侠们这是神马原因??????











【好好学习天天向上】
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-9-9 11:06:03 | 显示全部楼层
STM32的RS485一直工作在发送模式,怎么能接受呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2012-8-7
在线时间
7 小时
 楼主| 发表于 2012-9-9 11:45:22 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------

一直工作在发送模式???求详解。。。。。。。。。。。。

按照这个程序,如果不改任何地方是没问题的:上位机发送过来,下位机中断接收,然后将接收到的数据重新发送出去。。。这个可以是实现,完全正常。

但是要是不发送出去的话(将途中的红色标记的函数2屏蔽掉),就只能中断接收一次,接下来的中断就接收不了了。。。。不知道原子大哥懂我的意思了不?????

还有,要是不发送出去的话,我将图中的红色标记的函数 1 改成 GetData = USART1->DR就可以正常中断发送了。。。这个问题很奇怪。。。。。。。。。。
【好好学习天天向上】
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-9-9 15:12:54 | 显示全部楼层
回复【3楼】yougen1314:
---------------------------------
你在仔细分析下,如果GetByte之后,你的模式就一直是TX模式了...还接个球...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2012-8-7
在线时间
7 小时
 楼主| 发表于 2012-9-9 16:47:02 | 显示全部楼层



问题已经找到了,把上面这个接收控制端的RX_485和TX_485屏蔽掉就可以了。。。。。。。。。。但是为什么这两个东西会让程序不能进入第二次中断呢??????
这两个东西是


真搞不懂。。。。。。。。。。。。。。
【好好学习天天向上】
回复 支持 反对

使用道具 举报

15

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2012-8-7
在线时间
7 小时
 楼主| 发表于 2012-9-9 16:48:15 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------


问题已经找到了,把UART1_GetByte()函数中接收控制端的RX_485和TX_485屏蔽掉就可以了。。。。。。。。。。但是为什么这两个东西会让程序不能进入第二次中断呢??????真不懂。。。。。。。。。。。
【好好学习天天向上】
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-9-9 20:57:00 | 显示全部楼层
因为你第一次进入就把模式给切换了,后面就没法进入了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2012-8-7
在线时间
7 小时
 楼主| 发表于 2012-9-11 14:56:21 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------

嗯,谢谢原子大哥。。。。。。

问题已经解决了:中断接收的话,在空闲状态下,应该将485的控制端处于“收”状态!!!!

再次谢谢。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
【好好学习天天向上】
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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