TA的每日心情 | 奋斗 2022-6-11 15:23 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
背景:单片机主频24M,串口接收使用中断(优先级最高),串口发送不使用中断;接收帧为11字节,回传帧为50字节;波特率115200;采用RS485通信
* R; w8 Z5 b' n7 F 单片机程序主循环一次最长大约10ms,每次循环大约有5us的时间内中断总使能是关闭的(此期间串口无法接收数据)% x" |: d9 Y( ^% {4 N8 W/ V
经实测,串口助手从发送一帧数据,到接收到一帧数据,时间大约为30ms9 G6 T/ e8 K3 f5 U: p
# ?3 b4 f1 C+ d' J; L7 ?
通过电脑串口助手分别以50ms和100ms为周期给单片机下发指令,发现三个现象:1 s6 s& R3 Y2 F: r I1 H5 F
. u; r, L: p& y `$ E w4 _: b
1.50ms为周期时,丢包率较高;100ms为周期时,丢包率较低:
/ i$ r2 c0 B i7 y 50ms丢包率大约为3%;100ms丢包率大约为0.05%- U/ ~7 f$ \* @3 Y( K, v, ^
( G3 ?; f' s. d* |; c; @+ i$ e2.在以50ms为周期时,在积累一定发送和接收量后,发送周期不再是设定的50ms;以100ms为周期时未发生此现象:
: P1 `5 L7 T9 k% v. R+ U6 l R : {6 F: Y( b% `" @& g( b
% G# A1 o" H' Y/ a' E, \, B; B3.在以50ms为周期时,在累计一定发送和接收量后,经常发生原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中;以100ms为周期时未发生此现象:
# x* H) h' A, _7 \![]()
B" _* C+ E8 I% J0 e! K7 l4 e4 H3 Q2 Z! g
由此有三个疑问:8 P# m; Y8 G; f$ G% ]" u- H1 L; o8 \
1.经实测,串口助手从发送到接收到一帧数据耗时大约30ms,即便考虑程序主循环中有5us的时间中断总使能是关闭的,理论上单个周期(50ms)应该完全满足收发处理。为什么在50ms周期发送指令下,会出现较高的丢包率?! i7 l8 _- @, l3 F6 a8 F% j
3 y3 k% w5 t+ u6 ?; _
2.为什么在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,发送周期会偏离设定值?
; a/ I- y2 k0 i5 z, `8 h$ R
* V$ _5 A$ u) P0 ?5 b* f9 m3.在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,为什么原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中?) h: g0 G5 o& Z. K
|
|