TA的每日心情 | 奋斗 2022-6-11 15:23 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
背景:单片机主频24M,串口接收使用中断(优先级最高),串口发送不使用中断;接收帧为11字节,回传帧为50字节;波特率115200;采用RS485通信! y; L8 _' @$ F& P; j0 F
单片机程序主循环一次最长大约10ms,每次循环大约有5us的时间内中断总使能是关闭的(此期间串口无法接收数据)
# ]/ q! S! U/ A/ i/ m& ~ 经实测,串口助手从发送一帧数据,到接收到一帧数据,时间大约为30ms
! w! U7 P4 q% I4 D8 x F( C
2 j3 l) ?1 p7 S' Y$ ?4 R" R/ I: N1 G通过电脑串口助手分别以50ms和100ms为周期给单片机下发指令,发现三个现象:
% m' f/ A9 m, L, L* b& P5 }$ [9 T \8 E8 Q
1.50ms为周期时,丢包率较高;100ms为周期时,丢包率较低:$ X2 [4 q0 u- c% t7 T
50ms丢包率大约为3%;100ms丢包率大约为0.05%1 R4 I- a4 }: P' o$ D5 i
( _7 }% P# I7 p/ ^! R' R
2.在以50ms为周期时,在积累一定发送和接收量后,发送周期不再是设定的50ms;以100ms为周期时未发生此现象:
, s1 Y# b) Q6 h9 _- F![]()
3 j" p4 K$ B( c- I
( d/ X& H3 V2 b! z3.在以50ms为周期时,在累计一定发送和接收量后,经常发生原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中;以100ms为周期时未发生此现象:8 `3 @ }6 P9 w5 u, d$ K: `. S$ q
![]()
$ @# g* g0 `- J" M/ i) P1 ?( i- e- h! V5 \: {
由此有三个疑问:& w. v9 \% U0 D# ?6 C% z
1.经实测,串口助手从发送到接收到一帧数据耗时大约30ms,即便考虑程序主循环中有5us的时间中断总使能是关闭的,理论上单个周期(50ms)应该完全满足收发处理。为什么在50ms周期发送指令下,会出现较高的丢包率?; m2 h& w6 ~5 M! h. H( g7 |
4 h" K; m | U6 h, n2.为什么在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,发送周期会偏离设定值?
! v: [1 N& S, B& w& b5 C2 I& a8 _; k0 q0 k7 f" E2 A
3.在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,为什么原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中?" O1 y! \- b) t* N0 R
|
|