你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的CDC虚拟串口接收超20个字符就挂起,需要修改驱动参数

[复制链接]
kylongmu 发布时间:2017-10-5 02:37
本帖最后由 kylongmu 于 2017-10-5 02:41 编辑 1 @( ^- ^) T' X6 \, |2 u7 s- v9 i

6 E0 |/ a3 x! P) eF756ZG,用CubeMX生成的工程,MCU发送到主机没有问题;主机发送到MCU只要超20个字符就挂起,debug跟踪发现会挂起到HardFault_Handler(),调用堆栈找不到父函数,应该是直接引起硬件故障了。以下是我的MCU接受函数,发生挂起时根本就没有进到函数执行。1 [9 _  M& u- U. H. N# x2 a
  1. #define configCOMMAND_INT_MAX_OUTPUT_SIZE 128
    1 x( h- v* A- G$ Z0 {
  2. /* USER CODE BEGIN 4 */" _6 S1 H% e7 c. i7 D% K2 E6 l
  3. static int8_t CDC_Itf_Receive(uint8_t* Buf, uint32_t *Len)
    # n5 [6 V* v- u4 I3 I0 f
  4. {
    6 U. A! X1 t- ~: g4 D/ E' ^
  5.   uint16_t Recive_Length;4 i. J! [3 U9 b1 f( [
  6.   Recive_Length = *Len+1;
    : u/ I5 x7 l8 j& a6 }: s2 l

  7. 4 [/ P5 Z- `% ^4 g. f( N
  8.   strlcat((char*)&UARTUSB_R_Msg.Recive_Buf_Copy[UARTUSB_R_Msg.Recive_Buf_Copy_i],(char*)Buf,Recive_Length);
    1 c1 O7 D" G2 W- _3 [
  9.   if(Recive_Length>=configCOMMAND_INT_MAX_OUTPUT_SIZE)//Error length7 A8 B: J. b) [) [! ]( K: A& p
  10.   {
    . v/ L7 {$ w' H# W
  11.     UARTUSB_R_Msg.Recive_Buf_Copy_i = 0;
    5 g% h' ~  e- @/ [! x$ P  A) i
  12.     USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);$ v: }( X2 q1 u7 D- t+ R6 A
  13.     USBD_CDC_ReceivePacket(&hUsbDeviceFS);* |+ L% d0 B7 F, o7 h
  14.     return (USBD_OK);
    7 D2 v# o  E& a
  15.   }8 [- ~$ R. }0 I+ C! ?: P, T
  16.   UARTUSB_R_Msg.Recive_Buf_Copy_i += *Len;
    8 h  ^' l1 S  U# w# s
  17.   while(UARTUSB_R_Msg.Recive_Buf_Copy[UARTUSB_R_Msg.Recive_Buf_Copy_i-1]=='\n' || UARTUSB_R_Msg.Recive_Buf_Copy[UARTUSB_R_Msg.Recive_Buf_Copy_i-1] == '\r' )//Seek to the end: F& S9 P' k  q( \
  18.   {
    7 i7 @9 g3 ~" B8 Q7 n/ `! R% g! _2 @
  19.     UARTUSB_R_Msg.Recive_Buf_Copy[UARTUSB_R_Msg.Recive_Buf_Copy_i-1] = 0;; u3 G+ _) F" C% F. O) [& i: _
  20.     UARTUSB_R_Msg.Recive_Buf_Copy_i--;
    : E7 \. I+ {" D1 b" n" i8 m
  21.     UARTUSB_R_Msg.Recive_finished = 1;
    . q) f* B4 t0 ~' V  J, [* I6 Y" C" Q1 [
  22.   }7 s4 m  d0 q) i# X( T  j1 w0 O+ J
  23.    
    ; ]( o0 C% D" B( N1 T
  24.   USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);( O4 T4 I/ E. h
  25.   USBD_CDC_ReceivePacket(&hUsbDeviceFS);7 A$ D7 X  S) Z, t: T/ l, h! }

  26. ( y7 ~0 b/ _$ ^% ^3 Z
  27.   return (USBD_OK);
    : Y* _8 _: G. k
  28. }6 P5 }- b+ ~& X9 e6 A( f6 Z0 u! B

  29. 8 b% Q! F3 h% ?2 Q, m+ L/ H
  30. /* USER CODE END 4 */
    ; Y8 s% @) [4 e5 y$ k% d7 y' L# f
复制代码
后查看驱动源代码:# ^7 }% D4 W+ B. e/ ]
  1. #define APP_RX_DATA_SIZE  4. t2 a+ X- I; b5 ]8 L! F! w8 ]
  2. #define APP_TX_DATA_SIZE  4
    . s+ [: Z: B5 }
  3. /* Received Data over USB are stored in this buffer       */
    : c4 r( l1 ^: G% I
  4. uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
    3 F$ Z7 o+ ~- R% \( _: K

  5. ; t2 A2 q$ T* ^8 m7 e8 ~& _
  6. /* Send Data over USB CDC are stored in this buffer       */6 p2 p4 ]& I& T0 P5 W, l$ ~% k2 u
  7. uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
    8 n( ^3 }. A' R8 p7 w: ~
复制代码

1 q8 l% E4 m9 N2 V& Z此处吐血100升,改4为128后,问题消失,应该是超20个字符导致堆栈溢出了。我说ST就不能把这两个参数放到CubeMX里面可以设置,或者默认就写大点吗?0 p7 }* E8 M! {+ ~; `
CDC的驱动仅仅给了4个字节的buffer大小,坑死人不偿命。
' e5 Z- D0 f  W; J: ^% z$ e6 x

评分

参与人数 1 ST金币 +6 收起 理由
MrJiu + 6 很给力!

查看全部评分

收藏 1 评论11 发布时间:2017-10-5 02:37

举报

11个回答
Paderboy 回答时间:2017-10-5 09:48:49
cube里可以设置的 QQ截图20171005094824.png " b9 i9 m5 O6 m3 z
MrJiu 回答时间:2017-10-5 10:14:15
楼上的更给力!!!
kylongmu 回答时间:2017-10-5 13:20:56
Paderboy 发表于 2017-10-5 09:489 W# t: N9 n) V+ i6 K8 O3 k4 _
cube里可以设置的

5 Y& M) x1 w" `0 F+ w' ^4 @4 E5 ]只设置这里没有用的,驱动里写死了是4,并没有用这两个宏定义,或者说这是驱动的BUG。
Paderboy 回答时间:2017-10-5 17:15:32
本帖最后由 Paderboy 于 2017-10-5 17:17 编辑
6 j& u% g7 J1 t1 o8 d
kylongmu 发表于 2017-10-5 13:20+ l+ z. a8 J. d, H7 R
只设置这里没有用的,驱动里写死了是4,并没有用这两个宏定义,或者说这是驱动的BUG。 ...

' n  k: }7 M8 q! j# ~/ s- x/ h测试了下,最新版本的cube+L4最新的hal库可以成功设置参数,楼主可以更新到新版本的cube试试。。
0 i" M* k$ ~$ Z( [; P+ x. Z6 ] QQ截图20171005171418.png & Y2 U, \, o7 V1 g
+ z8 W* e- }$ x% y. @6 \
QQ截图20171005171409.png
% ]8 ?% A; m& B5 a9 H; G
5 Z0 c1 i( F- B7 |6 S( \+ c/ D5 |
) L' m/ N7 z. g) W! y7 e& {
kylongmu 回答时间:2017-10-5 18:38:39
cdc1.jpg
' J2 J0 F/ P- M0 \* CCube:4.22.1
+ t# ^% Q  n8 O/ xFW:F7-1.8.0' L7 Q4 j& p* s) \, A) Z: E; _( T. ~3 V
最新了,试了几遍,我的F7就是不行。  |* K8 Q: Z! @4 P
---------------------------------------------------
( e" [" I5 B: p9 Z4 f5 Y以下是用L496ZG来配置的,完全正常
6 D  e8 t( F3 I cdc2.jpg
8 Y' H' t) P- N7 Z$ U' A: r: s看来是F7独有的BUG了。0 A+ ~, m4 W  N- N! L8 L  Z
Paderboy 回答时间:2017-10-5 20:25:25
kylongmu 发表于 2017-10-5 18:380 P6 Y, p: z+ W
Cube:4.22.1
+ S. l. |5 k* ?' m. S+ L$ fFW:F7-1.8.03 n4 @% M- h/ V- _! L
最新了,试了几遍,我的F7就是不行。
/ u: F! b4 f5 r& D- Z

' H* ^  B( K# P9 @' i( U, aF7 我也建了2个工程,一个767 一个756,都可以正确配置。。- @* N" m) ^# J( O; I: s5 Q
F767ZI 2 V: V& d5 @/ `7 a& T  ?: ?/ E
QQ截图20171005201655.png
0 E: U! k1 q8 m- }9 j5 |& X( Q# T( W& V* l2 X  _( J& M
QQ截图20171005201710.png 3 }& y7 t; J, J( p; N! Z

% f* m# }/ L4 v1 ]6 e, PF756ZG
5 w" W: Y6 O- t2 ` QQ截图20171005202320.png
+ Q/ i3 D) @2 B* l' G3 ^  M2 e4 u" c0 I1 H) Z  p" {; D
QQ截图20171005202307.png
. s0 [( a1 ~# ^* ?; @
kylongmu 回答时间:2017-10-5 21:16:52
Paderboy 发表于 2017-10-5 20:25' K0 l4 L5 x; d1 N! E, x
F7 我也建了2个工程,一个767 一个756,都可以正确配置。。. A- O8 k4 i* i) M, @/ W% K
F767ZI

4 j& q, F) |% I- C你的是什么版本?
Paderboy 回答时间:2017-10-5 22:19:21
kylongmu 发表于 2017-10-5 21:16
1 S+ D7 P: z) e你的是什么版本?

9 v( t9 ^  |* ]1 ~& m2 X& j, e. Y2 X# O+ |; n' d& @5 Z
跟你的一样。cube 4.22.1  1.8.0的F7库
; e" h( |/ V/ Z: p
  Y# x  R9 G; f* W9 l4 n工程: STM32F756ZG_CDC.rar (4.35 MB, 下载次数: 24)
kylongmu 回答时间:2017-10-5 22:37:39
Paderboy 发表于 2017-10-5 22:196 Z. N5 o( z2 j
跟你的一样。cube 4.22.1  1.8.0的F7库  I' K: H3 O- U# n. n" i

9 E2 Z, @' k+ q; t工程:

8 H* J5 X2 K2 V7 g" ?用你的工程一样不会同步改变,问题依旧。神奇了,看来我的成了孤立个案了。我是win10专业版64bit系统。
% b: p: E. o$ q5 E, H+ P, v8 x还是多谢你热心帮忙,看看后面升级操作系统或软件,这个问题会不会消失。
kylongmu 回答时间:2017-10-6 16:51:43
kylongmu 发表于 2017-10-5 22:372 i4 }. _/ M# \: _1 C" }9 T
用你的工程一样不会同步改变,问题依旧。神奇了,看来我的成了孤立个案了。我是win10专业版64bit系统。
1 V' V& H" N4 t- |0 C/ R- e' _0 ? ...
# Q+ R% l) J5 L5 o- w& Z
重新下载,换用笔记本电脑新装,问题依旧。
深山明月 回答时间:2017-10-9 22:51:59
直接1024

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版