打印

模拟串口通信求帮助

[复制链接]
3526|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cshij2009|  楼主 | 2012-3-28 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用两个芯片做串口通信,一个芯片循环发送0到255的数据;另一个芯片每次按键之后接收三个数据,理论上三个数据应该连续。现在问题是,每接收两百次的时候出现一次错误,如0x03,0x04,0xfe。错误数据的规律是,两个数据连续,另一个数据高四位是全1,低四位任意,即0xfx.。数据采用偶校验,9600波特率。我用芯片给PC发送数据,PC接收数据完全正确,由此判断接收程序有问题,我把接收中断的流程图传上来,希望大家帮助

接收中断.rar

4.05 KB

相关帖子

沙发
NE5532| | 2012-3-28 22:18 | 只看该作者
楼主做的是软串口?进来的那个中断是什么中断?定时器的中断?外中断?怎么触发的?启动位怎么检测的?非要用软串口?还必须用定时器?

使用特权

评论回复
板凳
cshij2009|  楼主 | 2012-3-29 07:53 | 只看该作者
是的,我做的是软串口。1S定时时间到,初始化捕获比较控制寄存器(开中断,下降沿捕获,捕获源),捕获到下降沿,进入接收中断,开始接收数据。接收数据的启动位是下降沿捕获的,在接收数据中,用的定时来接收数据。

使用特权

评论回复
地板
joyme| | 2012-3-29 10:09 | 只看该作者
1S定时到开始开捕获中断,太容易把数据位的下降沿当初起始位了,串口通信是异步的,一个连续发送,一个随机接收必然会出错

使用特权

评论回复
5
cshij2009|  楼主 | 2012-3-29 10:42 | 只看该作者
4# joyme 2S的定时我也试过啦,可是有错误啊

使用特权

评论回复
6
g1234567| | 2012-3-29 11:08 | 只看该作者
看流程图是11位传输吧,一个字节时间11*1/9600s,1S定时捕捉起始位,不知道掉了多少个数据.

使用特权

评论回复
7
g1234567| | 2012-3-29 11:22 | 只看该作者
捕捉起始位的时间最少是每位的传输时间的1/2,即每位的传输时间中捕捉2次及以上(这个还与硬件有关)。

使用特权

评论回复
8
cshij2009|  楼主 | 2012-3-29 11:24 | 只看该作者
6# g1234567 好象我没有说清楚,我的这个定时时间是,每次1S定时时间到,捕获起始位,开始接收数据,接收完数据,关闭中断,把接收的数据显示出来,下一个1S定时时间到,再次开始捕获起始位,接收数据。

使用特权

评论回复
9
g1234567| | 2012-3-29 11:35 | 只看该作者
没看见怎么判断起始位的

使用特权

评论回复
10
g1234567| | 2012-3-29 11:39 | 只看该作者
呵呵。。。是4楼说的原因!

使用特权

评论回复
11
NE5532| | 2012-3-29 12:19 | 只看该作者
呵呵。。。是4楼说的原因!
g1234567 发表于 2012-3-29 11:39


呵呵,所以楼主只要把我提的几个问题过一下,自己都知道错了。1秒1次,咋能同到步呢~?还有楼主啊,只要没有其他任务需要同时做,软件串口最简单的方法就是用硬延时来做,定时器是最复杂的一种方法,如无必要,纯属自虐。

使用特权

评论回复
12
g1234567| | 2012-3-29 13:10 | 只看该作者
g1234567发表于 2012-3-24 15:13 | 只看该作者 回复 引用 编辑 评分 返回版面 TOP  得分:0
22楼: 定时器模拟的,怀疑:接收程序的起始位判断上的时序可能有问题:定时器用的几倍速率侦测端口的?什么情况下为起始位,起始位为多长时间有效。。。。

:dizzy:
我不是LZ呢
我24日就说过类似问题,LZ自己不去看,也不分析

使用特权

评论回复
13
zh_2608| | 2012-3-29 17:12 | 只看该作者
没学好

使用特权

评论回复
14
cshij2009|  楼主 | 2012-3-29 21:10 | 只看该作者
12# g1234567 你说的我不是很理解,我程序中是捕获到下降沿的时候就认为是起始位,没有判断起始位是多长时间,难道还要判断起始位的时间吗?

使用特权

评论回复
15
cshij2009|  楼主 | 2012-3-29 21:19 | 只看该作者
11# NE5532 我用的芯片是MSP430F413,没有硬件串口,只能用软串口啦!我现在打算,接收端发送接收申请,当发送端接收到发送申请的时候,发送数据。我现在糊涂的是,这样我接收数据只要判断是下降沿就可以接收数据吧,我看到7楼怎么说要判断捕捉起始位的时间呢?

使用特权

评论回复
16
g1234567| | 2012-3-30 09:32 | 只看该作者
自己2台设备之间的通讯,自己想怎么弄都可以,也不一定要严格按串口来做。

使用特权

评论回复
17
g1234567| | 2012-3-30 09:46 | 只看该作者
标准UART接收端采样时钟频率是传输的波特率的16/64倍;
标准UART的RXD前端有一个"1到0跳变检测器",当其连续接受到8个RXD上的地电平时,该检测器就认为RXD线出现了起始位,进入接受数据状态.
在接受状态,接受控制器对数据位7,8,9三个脉冲采样,并遵从三中取二的原则确定最终值.采用这一方法的根本目的还是为了增强抗干扰,提高数据传送的可靠性,采样信号总是在每个接受位的中间位置,可以避开数据位两端的边沿失真,也可以防止接受时钟频率和发送时钟频率不完全同步引起的误差.

使用特权

评论回复
18
joyme| | 2012-3-30 10:58 | 只看该作者
15楼: 11# NE5532 我用的芯片是MSP430F413,没有硬件串口,只能用软串口啦!我现在打算,接收端发送接收申请,当发送端接收到发送申请的时候,发送数据。我现在糊涂的是,这样我接收数据只要判断是下降沿就可以接收数据吧,我看到7楼怎么说要判断捕捉起始位的时间呢?
这样不如模拟IIC,速度还可以快很多

使用特权

评论回复
19
NE5532| | 2012-3-30 20:36 | 只看该作者
这样不如模拟IIC,速度还可以快很多
joyme 发表于 2012-3-30 10:58


那还不如模拟SPI,速度快几十倍,程序也简单几十倍。

使用特权

评论回复
20
cshij2009|  楼主 | 2012-4-10 20:46 | 只看该作者
4# joyme
您说的很有道理,我改了一种发送数据方式,就没有错误啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

73

帖子

0

粉丝