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

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

[复制链接]
kylongmu 发布时间:2017-10-5 02:37
本帖最后由 kylongmu 于 2017-10-5 02:41 编辑
$ l) ~* k2 y; O1 b" o7 ~  c% H: k. s1 t* ?: s
F756ZG,用CubeMX生成的工程,MCU发送到主机没有问题;主机发送到MCU只要超20个字符就挂起,debug跟踪发现会挂起到HardFault_Handler(),调用堆栈找不到父函数,应该是直接引起硬件故障了。以下是我的MCU接受函数,发生挂起时根本就没有进到函数执行。
+ Y( b1 |. V: T9 i: v) S6 Z/ t
  1. #define configCOMMAND_INT_MAX_OUTPUT_SIZE 128/ Z* K) |; E& q; X
  2. /* USER CODE BEGIN 4 */% Q" A4 b* e2 v. T
  3. static int8_t CDC_Itf_Receive(uint8_t* Buf, uint32_t *Len)
    : H( n" d9 ?6 F( f& ]
  4. {
    $ O8 [+ }: Z! B+ r& j) y( s
  5.   uint16_t Recive_Length;
    1 f4 ~6 M  B+ c9 U
  6.   Recive_Length = *Len+1;
    $ l  s) x; `* |5 F$ a

  7. 1 s* ?9 C( \" B. S
  8.   strlcat((char*)&UARTUSB_R_Msg.Recive_Buf_Copy[UARTUSB_R_Msg.Recive_Buf_Copy_i],(char*)Buf,Recive_Length);
    , m: G& M/ W- _" W1 \  g: B+ _  D
  9.   if(Recive_Length>=configCOMMAND_INT_MAX_OUTPUT_SIZE)//Error length- \# x6 l# X, }
  10.   {
    7 r8 B! K/ k% [+ Z9 O
  11.     UARTUSB_R_Msg.Recive_Buf_Copy_i = 0;
    ' ]% j- C5 d8 ^& C
  12.     USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
    % i( K5 \" |( }! G" e* L& {
  13.     USBD_CDC_ReceivePacket(&hUsbDeviceFS);# u% R+ n( K, c/ p
  14.     return (USBD_OK);
    + l2 {" z0 k" T
  15.   }( \7 O! s3 j7 U7 O
  16.   UARTUSB_R_Msg.Recive_Buf_Copy_i += *Len;
    ' c3 i9 d1 F( f% T8 |# X# L4 _
  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 end6 p& S+ l( p3 p) k) g9 x! K: ?! Q
  18.   {
    4 u* @1 y7 s* @& q# r- X5 T7 i' V$ {: P
  19.     UARTUSB_R_Msg.Recive_Buf_Copy[UARTUSB_R_Msg.Recive_Buf_Copy_i-1] = 0;
    3 J/ S: n' e( y6 F
  20.     UARTUSB_R_Msg.Recive_Buf_Copy_i--;% V# i  h3 A) U0 x3 S3 q  ~+ T
  21.     UARTUSB_R_Msg.Recive_finished = 1;
    # e( U& Q$ ~; O7 }- n% g! l! J
  22.   }
    $ X7 w! p( }' N% D
  23.    
    3 H# c5 n, D; j# O/ Z5 ]) ^1 }
  24.   USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);1 n3 S. P6 \. J
  25.   USBD_CDC_ReceivePacket(&hUsbDeviceFS);
    4 V) Q! ^$ u6 n# Z5 N

  26. 5 O! l, S9 v2 ~$ [
  27.   return (USBD_OK);
    ! \. i7 A, N) w$ m: |* c, h; L6 i8 k
  28. }
    5 @- M2 C% b  T8 _' Y; f

  29. 4 e" W- p* |' n* D( E+ v% M
  30. /* USER CODE END 4 */
    " J  Q* N6 D. a! [: L9 F% ]
复制代码
后查看驱动源代码:; o; t) d3 ~4 Z: K& D2 m
  1. #define APP_RX_DATA_SIZE  4
    ( B; P/ E( B" J# u1 a6 k  l
  2. #define APP_TX_DATA_SIZE  4
    0 F+ Y" B) S; M' W: L6 w( m
  3. /* Received Data over USB are stored in this buffer       */
    : ^: i- ]* z" h8 x8 T
  4. uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
    ' ?& {8 M* g: X6 N
  5. 6 R& p" H$ n% K. O7 C
  6. /* Send Data over USB CDC are stored in this buffer       */
    ! ?4 o* S/ W+ Z' [$ w* U
  7. uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];' D- }: U4 b: J; u' b
复制代码
7 P5 C& P' }; ^% c6 c1 y( Q
此处吐血100升,改4为128后,问题消失,应该是超20个字符导致堆栈溢出了。我说ST就不能把这两个参数放到CubeMX里面可以设置,或者默认就写大点吗?" Q3 G! x+ }! L- j5 `" Y- T: G
CDC的驱动仅仅给了4个字节的buffer大小,坑死人不偿命。; Q9 f8 v; ^1 ~& q

评分

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

查看全部评分

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

举报

11个回答
Paderboy 回答时间:2017-10-5 09:48:49
cube里可以设置的 QQ截图20171005094824.png
$ w. t' ~3 B8 }6 z' B# S
MrJiu 回答时间:2017-10-5 10:14:15
楼上的更给力!!!
kylongmu 回答时间:2017-10-5 13:20:56
Paderboy 发表于 2017-10-5 09:48
! }: S* P6 ^! W6 K6 t! @- z/ T4 P! {' Lcube里可以设置的
/ A& h( c8 A! P! |8 }4 j, C
只设置这里没有用的,驱动里写死了是4,并没有用这两个宏定义,或者说这是驱动的BUG。
Paderboy 回答时间:2017-10-5 17:15:32
本帖最后由 Paderboy 于 2017-10-5 17:17 编辑 6 F# l4 @/ z) [1 S! ^5 n* `
kylongmu 发表于 2017-10-5 13:20
% T6 R$ z, {0 y9 w- D! f" K只设置这里没有用的,驱动里写死了是4,并没有用这两个宏定义,或者说这是驱动的BUG。 ...
5 w2 [! l: a9 e$ z
测试了下,最新版本的cube+L4最新的hal库可以成功设置参数,楼主可以更新到新版本的cube试试。。
' d% v& B+ n  M3 i3 \2 j8 h) _ QQ截图20171005171418.png
5 J# N2 T( F0 t! D, c4 P
- \2 b9 M3 Q! w6 Z5 \9 x: i) ^ QQ截图20171005171409.png
! q/ `: f6 Z8 c! ^  w8 [7 {# w4 }5 W0 P) c  M, S
, e0 C" x! i/ P( D* {; Q
kylongmu 回答时间:2017-10-5 18:38:39
cdc1.jpg & u; S: T7 a: W2 A
Cube:4.22.1
+ d2 D' o, a& R: j( BFW:F7-1.8.0; T+ l3 G: H& e2 E* B* Q6 _/ L
最新了,试了几遍,我的F7就是不行。
$ @" J; @1 I3 I* X, x) \/ I) x---------------------------------------------------
2 {' b$ T8 @& D; J$ m5 u以下是用L496ZG来配置的,完全正常
2 y9 P6 g4 [( f9 i  w cdc2.jpg
; J5 d- K0 U& g& ~, N, A% \看来是F7独有的BUG了。+ I7 B, z. f) P8 s$ _
Paderboy 回答时间:2017-10-5 20:25:25
kylongmu 发表于 2017-10-5 18:38
+ {/ a/ I0 _) f1 j: V8 o7 f+ ]2 MCube:4.22.1; c( |5 x) q. H6 W
FW:F7-1.8.0
$ _7 J' X0 N& @# n最新了,试了几遍,我的F7就是不行。
! \5 n! m! f8 O
2 `  J4 R& O+ a* ]# p% c* i
F7 我也建了2个工程,一个767 一个756,都可以正确配置。。  e4 q8 }/ m1 \* ?4 r7 ]) `5 k
F767ZI
8 \0 A8 F  {% L QQ截图20171005201655.png 3 [) ~6 `: E. h& ?

/ v! m% w( C% w* z- d QQ截图20171005201710.png   w; H% q7 ^7 J: o/ q3 j
0 g. v. {+ [& ^0 V. F0 p
F756ZG
& \* e' j" v2 ^; H. {3 T, [& _ QQ截图20171005202320.png ! n9 b! R  q# Z4 C- z! m
: g1 o$ q( A' @3 ]9 s
QQ截图20171005202307.png $ _" P9 Y. O3 k1 P( H( X# H* A
kylongmu 回答时间:2017-10-5 21:16:52
Paderboy 发表于 2017-10-5 20:25' \' R2 \3 y: s5 n  T4 ^& P0 V
F7 我也建了2个工程,一个767 一个756,都可以正确配置。。: W' n# g3 @% Z! \
F767ZI
( ^, C0 L( ~) j/ A9 j6 A4 E
你的是什么版本?
Paderboy 回答时间:2017-10-5 22:19:21
kylongmu 发表于 2017-10-5 21:16
# E, O+ j+ m* [* I, u你的是什么版本?
4 D  W( A8 ^- i% ]& K
+ w  p' G& H6 Q* W) G
跟你的一样。cube 4.22.1  1.8.0的F7库
" j  b0 j) U* @3 b. h  \2 B5 \2 A
工程: STM32F756ZG_CDC.rar (4.35 MB, 下载次数: 24)
kylongmu 回答时间:2017-10-5 22:37:39
Paderboy 发表于 2017-10-5 22:19
# {5 T* c, u8 p6 }跟你的一样。cube 4.22.1  1.8.0的F7库8 L% s1 G, F  P: y+ [7 i& z* e- u) X

" _) l+ Z* `1 E" B# c工程:

! ]/ w9 j/ S; i% {  N" \用你的工程一样不会同步改变,问题依旧。神奇了,看来我的成了孤立个案了。我是win10专业版64bit系统。
% \' H$ {! o% X- A' T4 K2 |5 o还是多谢你热心帮忙,看看后面升级操作系统或软件,这个问题会不会消失。
kylongmu 回答时间:2017-10-6 16:51:43
kylongmu 发表于 2017-10-5 22:371 l/ ~  X  ?5 p* z5 a, J) C5 G
用你的工程一样不会同步改变,问题依旧。神奇了,看来我的成了孤立个案了。我是win10专业版64bit系统。$ k- }4 ]$ S6 U( @% y1 _
...

2 Q& _! |4 i6 w' G重新下载,换用笔记本电脑新装,问题依旧。
深山明月 回答时间:2017-10-9 22:51:59
直接1024
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版