TA的每日心情 | 奋斗 2022-6-11 15:23 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
背景:单片机主频24M,串口接收使用中断(优先级最高),串口发送不使用中断;接收帧为11字节,回传帧为50字节;波特率115200;采用RS485通信
3 s. Q4 H0 a. ^! _) ^ 单片机程序主循环一次最长大约10ms,每次循环大约有5us的时间内中断总使能是关闭的(此期间串口无法接收数据), P) W! r0 n( Q% i
经实测,串口助手从发送一帧数据,到接收到一帧数据,时间大约为30ms7 ~5 V- }, @0 z
# ^& y! V7 G% k) ]9 W8 i通过电脑串口助手分别以50ms和100ms为周期给单片机下发指令,发现三个现象:
3 C* P) M8 H7 I ~* t
+ `3 H" @) Y: N3 G1.50ms为周期时,丢包率较高;100ms为周期时,丢包率较低:7 J0 H" x8 P0 }4 a. T
50ms丢包率大约为3%;100ms丢包率大约为0.05%0 X: w2 b# g! ^; o H
8 t4 ]0 F3 }+ n
2.在以50ms为周期时,在积累一定发送和接收量后,发送周期不再是设定的50ms;以100ms为周期时未发生此现象:
# A) G$ {- }; c% E- N3 e3 a7 s![]()
+ l% ?: i5 I1 m( p3 r3 z) _2 L( C Q3 L \7 m
3.在以50ms为周期时,在累计一定发送和接收量后,经常发生原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中;以100ms为周期时未发生此现象:" S, P. A/ |1 |4 ~
![]()
4 C# j& u# u' ~" D# s0 k$ O y2 N- G i
由此有三个疑问:* T/ b& ?/ `! L3 \5 ^
1.经实测,串口助手从发送到接收到一帧数据耗时大约30ms,即便考虑程序主循环中有5us的时间中断总使能是关闭的,理论上单个周期(50ms)应该完全满足收发处理。为什么在50ms周期发送指令下,会出现较高的丢包率?
! c# S: U* X( \3 l2 u4 ~) I
6 v+ G0 E5 ?: _' x, E5 Z x. T2.为什么在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,发送周期会偏离设定值?+ p( ? }) A9 n; t" ~
. ~+ u1 o+ \" [3.在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,为什么原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中?* X) |7 R+ Y; o: L& ?5 y6 T6 r
|
|