OpenEdv-开源电子网

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

求个串口算法

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-11-1
在线时间
6 小时
发表于 2016-11-1 22:54:46 | 显示全部楼层 |阅读模式
1金钱
4个18b20和一个485串口通讯应该怎么写?
让485接收中断不会打断可能正在发生的18b20收发过程。
由于是多stm32站通讯,拉长时间碰概率的方法不行。


或者哪位大神给个单片双485通讯保证不丢数据的算法?

最佳答案

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

将串口收发交给DMA处理,外部采取轮询的方式检测是否完成,数组开大点。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2016-11-1 22:54:47 | 显示全部楼层
将串口收发交给DMA处理,外部采取轮询的方式检测是否完成,数组开大点。
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2016-11-1 23:08:56 | 显示全部楼层
18b20采集温度的变化不快,可以读取多次排列取中间值,比如取7次,其中有三次为错误的还是可以保证正确的数据。
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-11-2 08:28:48 | 显示全部楼层
shop60994719.taobao.com
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-11-2 10:45:52 | 显示全部楼层
3楼的办法不错,环形队列缓冲,之前在阿mo论坛的傻孩子版主也推荐这样做,可以学习一下。
如果感觉队列不太熟练,也可以用土办法,搞一个数组,无非多浪费点ram。

看了一下,3楼的店里有不少好东西,以后用到的时候也买一点。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-11-2 15:43:13 | 显示全部楼层
东北小辉辉 发表于 2016-11-2 10:45
3楼的办法不错,环形队列缓冲,之前在阿mo论坛的傻孩子版主也推荐这样做,可以学习一下。
如果感觉队列不 ...

多谢关注、
shop60994719.taobao.com
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-11-1
在线时间
6 小时
 楼主| 发表于 2016-11-2 17:41:52 | 显示全部楼层
东北小辉辉 发表于 2016-11-2 10:45
3楼的办法不错,环形队列缓冲,之前在阿mo论坛的傻孩子版主也推荐这样做,可以学习一下。
如果感觉队列不 ...

usart只有一个一字节的寄存器。你指的是中断读寄存器然后保存到缓冲吗?

队列缓冲哪怕一字节一中断,也会耽误18b20的时序,就不准了。

难道专门开个定时器,根据定时器数值调中断来给18b20通讯?
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-11-2 17:51:51 | 显示全部楼层
长虹掩日 发表于 2016-11-2 17:41
usart只有一个一字节的寄存器。你指的是中断读寄存器然后保存到缓冲吗?

队列缓冲哪怕一字节一中断, ...

485通讯速率慢一些应该不会出问题吧,假设485通讯速率给到9600,,100us进一次中断还会有影响吗?
实在不行的话估计就像2楼说的,舍弃一些数据了。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-11-2 17:59:02 | 显示全部楼层
长虹掩日 发表于 2016-11-2 17:41
usart只有一个一字节的寄存器。你指的是中断读寄存器然后保存到缓冲吗?

队列缓冲哪怕一字节一中断, ...

另外我还有个想法,给你说一下,不知道你的485接收中断是不是周期来的,我的意思是,如果485接收中断是可以预计的话,那么可以划分一下时间片,用2楼的方法,在485接收中断直到数据接收完毕这段时间内,舍弃一些18b20传回来的数据,保证485数据的完整性,接收完485的数据以后,再开始对18b20进行收发,不知道是否可行?
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-11-1
在线时间
6 小时
 楼主| 发表于 2016-11-2 18:35:48 | 显示全部楼层
本帖最后由 长虹掩日 于 2016-11-2 18:37 编辑
东北小辉辉 发表于 2016-11-2 17:59
另外我还有个想法,给你说一下,不知道你的485接收中断是不是周期来的,我的意思是,如果485接收中断是可 ...

好的,谢谢,我看看。72m主频来算的话1um有72个机器周期,从寄存器到自定义缓冲区足够了,我发信大概也就10字节,10个中断的误差对于18b20来说可以接受。18b20通讯一位有40多um
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 16:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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