TA的每日心情 | 奋斗 2022-6-11 15:23 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
背景:单片机主频24M,串口接收使用中断(优先级最高),串口发送不使用中断;接收帧为11字节,回传帧为50字节;波特率115200;采用RS485通信
& k Q6 y& R5 U& p d( s7 S( ]; q9 t2 P 单片机程序主循环一次最长大约10ms,每次循环大约有5us的时间内中断总使能是关闭的(此期间串口无法接收数据). g; Y/ @% P, h8 h' |/ V
经实测,串口助手从发送一帧数据,到接收到一帧数据,时间大约为30ms% U4 c* P- j: O
& D! g1 m0 v' T' T
通过电脑串口助手分别以50ms和100ms为周期给单片机下发指令,发现三个现象:8 j' C- e6 Q8 J7 N. w
+ D+ [* r3 m' p7 F$ U. x0 }7 x1.50ms为周期时,丢包率较高;100ms为周期时,丢包率较低:
: z: B1 t" B8 W/ }8 D1 L 50ms丢包率大约为3%;100ms丢包率大约为0.05%
& \2 w( O" ~. D* ]& j
( w9 I- ^2 g/ {2.在以50ms为周期时,在积累一定发送和接收量后,发送周期不再是设定的50ms;以100ms为周期时未发生此现象:
- i7 m3 t- S; a3 B3 g![]()
" V% C8 h4 T8 ?* ]$ N: Z) Y8 M l9 \
3.在以50ms为周期时,在累计一定发送和接收量后,经常发生原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中;以100ms为周期时未发生此现象:
5 L. a6 @; { z3 l, c9 d3 ] * b) k. \. [4 K5 M2 @; h
8 l0 L( E- f A p/ Y# x
由此有三个疑问:
9 j# o* {, l) w3 Q1.经实测,串口助手从发送到接收到一帧数据耗时大约30ms,即便考虑程序主循环中有5us的时间中断总使能是关闭的,理论上单个周期(50ms)应该完全满足收发处理。为什么在50ms周期发送指令下,会出现较高的丢包率?
$ q( \; E! c0 v H0 a9 G1 _- i/ ^( b/ o( {2 J+ u( q( e
2.为什么在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,发送周期会偏离设定值?: I3 i, A& w/ {$ ?0 _( S3 p- A& [/ ]
3 [2 E: s% i2 S4 q4 \- @3.在串口助手发送周期为50ms(或周期较短)时,积累一定收发数据后,为什么原本应该是属于同一帧的接收数据,会断为两截,分别存在于当前一帧和下一帧中?
% q, e- ]7 C; G; N6 l1 c |
|