串口通讯(485,9600) 数据接收如何做到 及时且准确。

2019-10-12 15:33 [复制链接] 3 120

本帖最后由 mian面mian 于 2019-10-12 15:42 编辑 " ?3 K0 s* r  k# \8 Y  Q/ Y
. d3 X) s4 H( [6 a! P8 A6 C
微信图片_20191012152512.png
; ]/ Y* X# N2 [4 v. A) [+ Q0 f& J2 d6 S4 L0 a
问题: 在有多个线程同时工作时,用上位机 给 下位机 发8-12个字节的数据(如:0xA4 0xA2 0x18 0x18 0xA1 0xA2 0xA3 0xA4 0xA5 0xA6 0xA7 0XAA),如何确保下位机能准确、及时(100ms一次时,每次都能收到12字节,不会漏数据),不打乱顺序的接收到 这 12byte 数据?+ j9 i$ _3 B2 M' t- {
4 J4 _( z1 ^8 n; }
串口通讯(485):波特率为9600,* X3 {9 ?8 K$ P. M0 c9 u

+ L( e2 R% [. M5 }' k单片机:STM32F103VET6  ;+ G. T- g& G- h* K  w+ z# A
4 C. w2 Z5 _) V' |, A
:):):):):)* t  ~( J7 `2 ]) Z9 t

5 G: q" i# a  e4 ~
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-10-12 15:54:34 | 显示全部楼层
你这不是串口最基本的功能吗?  f5 L1 D- \" c/ f! |
看这里,有例程的https://www.rt-thread.org/docume ... l/device/uart/uart/
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
本帖最后由 aozima 于 2019-10-14 11:07 编辑
7 {( ]) F  @1 N
sync 发表于 2019-10-12 15:542 V0 [6 n: k: H  V# J4 i$ V( l: m
你这不是串口最基本的功能吗?
3 }4 d- o2 U5 B! X! _8 P看这里,有例程的https://www.rt-thread.org/document/site/programming-man ...

* `# u* Q& q% a* A+ E7 k5 R6 l# X恕我愚笨,谢谢你的回复,但是 我还是没能理解,, X% A, \! O# S; s! H

% ^. s' P$ ]+ p' L5 }( L8 v我现在是按如下处理的,但是每100ms发一条0xA4 A1 A2 A3 A4 AA,不能做到每100ms都能回0XA2.
; E6 K* I4 X2 V' Z) ^+ p
/ k7 ?, V+ T) Y9 j6 `; `2 ?
  1.                 static uint8_t temp[6]={0};
    + t7 x. |2 P7 ^, Z( J4 l
  2.                 Usart_RX_set_enable();
    ( t9 O  v( N& x2 x
  3.                 __HAL_UART_FLUSH_DRREGISTER(&uart->handle);
    : ^+ F! m! |6 f& R
  4.                 while(1)
    9 C# E$ o' q5 g, h# ^
  5.                 {
    2 Y, ~8 x; b, w5 Q/ _1 q. L* e5 ?
  6.                         rt_memset(temp,0,sizeof(temp));+ M9 _' L2 d4 c& t/ T' c
  7.                         ; N3 z  [$ a7 h) i) l
  8.                         HAL_UART_Receive(&uart->handle,&temp[0],6,RX_TIMEOUT);
    ; t! U& h+ ^# Z  [. a
  9.                         ( K8 T$ f. `% c# Q* j' |; P% b
  10.                         if(temp[0]==0xa4&&temp[5]==0xaa)! O# l( @! x. Y  Q
  11.                         {; j6 M4 i; I$ V/ Y: f# k& @
  12.                                 temp[0]=0xa2;( }' m0 o* J( z  i8 D8 q7 O) Q
  13.                                 Usart_TX_set_enable();
    5 P, j8 ^- U  m! o0 |
  14.                                 HAL_UART_Transmit(&uart->handle,&temp[0],1,TX_TIMEOUT);: d; V7 z* }4 H, g
  15.                                 Usart_RX_set_enable();
    0 p8 y7 n8 {" E! s
  16.                         }
    $ p. p; [1 T/ f0 T+ C" ~$ A" r9 R
  17.                         rt_thread_delay(1);0 b. j  e1 U  O8 J; l- `5 Q7 T
  18.                 }
复制代码

2 S5 G. V+ @, Y, ~, T
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
如果楼主已经可以正常收发数据,只是下位机响应时间不是很及时的话,那就是优先级的问题了,你可以把线程优先级设置为高,应该响应就会及时很多了。
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表