OpenEdv-开源电子网

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

一句话:能不能同时让PA10实现串口1接收和中断

[复制链接]

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
发表于 2014-12-5 14:52:54 | 显示全部楼层 |阅读模式
5金钱
一句话:同时让PA10实现串口1接收和中断
本来项目是用RS485的,交货后,反应慢,威胁喊退单
时间与成本控制,继续使用现在的硬件,压力转到程序上
无奈之下,学CAN的通讯,需要检查总线是否空闲。
目前的想法:发现PA10有电平变化的时候把空闲标记位置位,接收完数据后,随机延时,再把空闲标记位清空。
空闲标记位清空的情况下才发送数据。

最佳答案

查看完整内容[请看2#楼]

顺便说一下,经测试,PA10可用同时实现串口1接收、EXTI15_10_IRQn中断,使用下降沿触发,这样检测冲突就类似CAN的总线空闲检测了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-5 14:52:55 | 显示全部楼层
顺便说一下,经测试,PA10可用同时实现串口1接收、EXTI15_10_IRQn中断,使用下降沿触发,这样检测冲突就类似CAN的总线空闲检测了
回复

使用道具 举报

22

主题

2254

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4486
金钱
4486
注册时间
2013-4-22
在线时间
337 小时
发表于 2014-12-5 16:31:16 | 显示全部楼层
我们也是485,2400bps都不慢,你们客户是要求多快啊!会不会是程序结构不合理导致
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11560
金钱
11560
注册时间
2014-4-1
在线时间
1318 小时
发表于 2014-12-5 16:43:03 | 显示全部楼层
PA10是接收端,与你的发送有什么关系?

不明白你要求什么。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-5 22:34:04 | 显示全部楼层
串口有接收中断。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-6 22:21:59 | 显示全部楼层
回复【3楼】xuande:
---------------------------------
是当485上面出现数据的时候就不能发送数据了
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-6 22:25:18 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
大师,我的意思是,485上面出现数据的时候就不能发送了,串口中断时结束完成的时候才有。。
学CAN那样,可以检测总线是否是空闲状态
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11560
金钱
11560
注册时间
2014-4-1
在线时间
1318 小时
发表于 2014-12-6 22:29:57 | 显示全部楼层
明白了,你是用半双工,要提高效率。

电平倒是可以检测,那对方是不是也要检测?!

修改通信协议吧。

回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-6 22:30:48 | 显示全部楼层
回复【2楼】三叶草:
---------------------------------
做门禁的,刷卡机通过485连到电脑。
标准做法是:电脑查询刷卡机有没读卡,有没数据需要上传。
不支持现成环境什么情况,干扰明显,有百分几的通信失败,一旦有一个点通信失败,整个刷卡系统就会等上大约1秒,刷卡机多了,读卡速度反应就变成很慢。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11560
金钱
11560
注册时间
2014-4-1
在线时间
1318 小时
发表于 2014-12-6 22:34:33 | 显示全部楼层
回复【8楼】LearningASM:
---------------------------------
一个PC对多个卡机?你要改动哪一方?
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-6 23:35:21 | 显示全部楼层
回复【7楼】xuande:
---------------------------------
通信协议估计不变了,改成卡机能主动上传
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-6 23:36:10 | 显示全部楼层
回复【9楼】xuande:
---------------------------------
主要还是改卡机,如果卡机能主动上传了,PC省事多了,
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-7 00:17:10 | 显示全部楼层
回复【6楼】LearningASM:
---------------------------------
485是单工的,既然你这边在发送,又如何能检测到对方发过来的数据啊?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-7 00:46:38 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
所以发送前检测是否有设备使用485
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-7 00:54:39 | 显示全部楼层
回复【13楼】LearningASM:
---------------------------------
那你就判断是否有接受中断即可啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11560
金钱
11560
注册时间
2014-4-1
在线时间
1318 小时
发表于 2014-12-7 11:43:27 | 显示全部楼层
即使检测到总线空闲,又如何保证,PC会停下来、给你让路?
即使PC会,其他卡机也会吗?

基本明白你的硬件结构了,但这还要上下位机的协议,能够配合起来。

一定要把原理搞顺。
没有原理支撑的方案,不能彻底解决问题,最后会越来越头大。

回到现状:
波特率、协议都是知道的,计算一下,响应时间、延迟时间究竟有多长,够不够用;
如果太慢,就提高波特率;
如果够快,就去查找误码的原因。

回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-7 11:57:18 | 显示全部楼层
回复【15楼】xuande:
---------------------------------
不在现场,目前推断最大可能是误码,除非公司派工程愿意跑一趟,要不具体原因很难知道。
现在情况就是必须继续使用RS485通信,因为已经按这个施工了,系统已经装上去了,硬件不能改变了。
在协议中,默认发送超时是1秒,线上有几个卡机出现超时的话,怎个系统都会卡上几秒。对于刷卡人来说,刷卡一两秒内无反应表示不可接受。

对PC检测到总线空闲,牺牲一台卡机作为缓冲,防冲突,这样硬件成本可以接受。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11560
金钱
11560
注册时间
2014-4-1
在线时间
1318 小时
发表于 2014-12-7 12:29:23 | 显示全部楼层
回复【16楼】LearningASM:
---------------------------------
建议发帖时把文字理一理,有没有笔误,有没有错别字?尽可能说清楚,不要有歧义。

这个1秒,看来很关键了。
485通信,一般是这样:
1、系统有且只有一个主机(PC),其他都是子机;
     只有主机可以主动说话;子机平时必须沉默,只有收到主机呼叫才可以说话。
2、主机按地址,逐个查询子机;
3、被叫子机返回数据,主机接收。其他子机保持沉默;
4、调整查询地址,返回步骤2。

这个1s,应当发生在步骤3,子机超过1s没有回话,主机则认为出错。
估计问题是这样:
子机或者没有回话,或者误码,主机自然就认为出错,要等待1s时间;而下一个子机又出现同样情况。
如果每个子机都有问题,查询一圈的时间就是N倍。

如果是这样,那么:
1、为什么有这么大的误码。波特率误差?现场干扰?这个问题的影响最大。
2、这个1s是主机程序控制的,能不能缩短?
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-7 12:48:37 | 显示全部楼层
回复【17楼】xuande:
---------------------------------
完全正确!

1、为什么误码很大,这个目前还不知道,需要去现场才知道
2、突然想起,如果把1s改成100ms,事情简单多了。

现在先看一下,修改这个超时时间目前最简单。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 02:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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