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

STM32CubeIDE生成、调试USB虚拟串口工程

[复制链接]
李康1202 发布时间:2020-6-17 11:48
STM32CubeIDE是意法半导体官方提供的STM32开发工具,其功能从芯片选型到生成代码再到编译调试为使用者提供一站式服务,废话不多说直接上工程- z7 C( i$ K3 x3 l( e: V
打开STM32CubeIDE,单击左上角的File按照上图路径创建工程或者点击File下方的倒三角快捷键直接创建工程 77520d31118570324c181c2c37de24e.jpg
) T  }8 Q, p) f& i1 C + A: g# ^, F( ?
4ee147e55e1b49480f632f2fa0a3f93.jpg 4 u: `# N5 @( Y4 W

; f7 V% l8 k0 G0 y4 {& A' Q1 c8 K" ]/ o$ k' R, U6 D/ F2 v  Z
工程创建后STM32CubeIDE会启动STM32CubeMx,进入芯片选择界面,在过滤器里输入STM32F429IG,右侧下方会出现STM32F429IG两种封装的芯片,选择STM32F429IGTx,点击NEXT," d9 R$ g/ @: B7 q

( W1 j9 \; \6 {7 V: J  [ 芯片选择.png
7 g6 d! i0 q7 a) u7 T. ~$ G3 l8 Q
芯片选择完成后,会弹出下面窗口,在Project Name后面的编辑框内填入工程名字,其它选项默认,点击Finish,  W3 J( f: V( N* C0 ?& @
. ?' \+ x: K- Y1 w
创建工程名.png
- j$ d( B- ?+ ~' `% Q+ B' K! i- B. ^+ @; c/ w) z( x
在上述步骤完成后,STM32CubeIDE会启动STM32CubeMx进入代码生成界面,其操作与STM32CubeMx生成代码一样,先配置外部晶振6 O& x7 Y: O2 |$ W2 E! p
# W4 s9 B$ r# o: x0 Z
配置晶振.png
: J% S. C4 H5 M0 x4 V, {1 g$ E0 Q% q- z% _' ^( V4 e
在Connectivity选择USBDevice功能,使能中断,其他选项默认配置7 b, h( K2 V, x6 U/ ^, J" g

, g9 V2 b, U3 o1 R* y2 w USB配置一.png " q/ N0 i3 X: X% ]& U4 V
+ I# F# d" d( z6 y
在Middleware中选择USB_Device选项,将USB功能配置为虚拟串口,其他默认不变" A# O" M1 K( w0 R

3 z" O/ o# s8 J; y- v, M USB配置二.png 4 C5 A$ x) o$ Y% J5 C2 q
" Z7 l7 \( i+ R0 D" X/ A
USB配置完后需要重新配置RCC,
" i2 X% M$ v* Q6 p" B! F0 I% u4 y& C' D2 m
RCC配置.png
* h9 q7 t: X. n# A+ Q0 W2 n, h# Z, P- O7 E& R; X
RCC配置完后需要将芯片内部的堆栈改大一些,不然的话会造成程序跑飞,+ h; Y. A, Y1 W

+ D2 S2 ^, }% V0 d) L& A 配置堆栈.png
% _2 k6 A1 t$ q7 A9 L
+ f3 ], R! n. I9 l! l! W) O0 E然后工程生成头文件和源文件3 m) u2 z% e/ a4 d( ]+ q" H$ `4 @
- G7 O/ b; L" N, V
生成头文件和源文件.png
/ h7 z- j( h4 ]5 `2 H
" g* J, A- q1 K& s# O现在可以生成代码了,点击左上角的齿轮,生成工程的初始代码8 K6 n% }0 O1 T7 E+ K* j" _2 ~9 i9 B! d
0 u. o. b) C9 d5 g7 w( s3 S
生成代码.png
8 V7 I( a( D& m6 S
- L0 A5 \/ T4 K" O进入工程后打开USB_Device,按照下图所示路径打开usbd_cdc_if.c文件,在CDC_Receive_FS函数的内部添加  CDC_Transmit_FS( Buf,  *Len);其中*Len可以替换成一个全局变量,以方便去轮询虚拟串口是否接收到数据,
) B6 `/ \4 O7 B( J+ v' Z
8 y; P$ Y' i3 q 测试USB通讯.png
5 X- F( }) G1 C) V, s
4 v9 @* X! c- d以上步骤完成后其实USB已经能和PC机正常通讯了,但是在插拔usb可能会造成USB无法正常工作,还需要做一下修改,按照下图路径打开usbd_cdc.c文件,需要将函数USBD_CDC_Init中的pdev->pClassData的指针移动至静态空间,并将下方USBD_CDC_DeInit函数中的USBD_free注释掉,
& }  f! F' ]9 B+ h/ x1 Q7 D8 q2 c+ C/ q6 F9 r
USB申请静态内存.png
. u( _( v$ A4 w/ S/ W$ H 注释USBD_free.png
1 a- e2 O" S% h: [3 A4 U$ \1 v8 e" O: C% O9 j- ]
代码方面修改完毕,现在进行编译和仿真,IDE项目栏左上方有一个锤子图标,该图标是编译的快捷方式,挨着齿轮的那个小虫图标是Debug,
$ ^5 D+ `5 R$ b: V$ X7 U
+ Y: o1 x$ l# e+ ^8 |4 P$ l 编译.png 5 b3 h, O1 ^# n. x: L* F
调试运行.png % F" X. {9 _9 p+ N5 X3 V/ J) |& }

5 f2 E3 N! m/ Z* _第一次运行需要配置仿真器参数
9 ]+ E' v# ]& G9 X* {3 e: @ 配置调试环境.png
( A5 r4 @4 y: U 配置调试环境2.png
# u, s6 D8 L& Z6 V6 ?配置完仿真器后,将程序烧写到芯片,就可以测试USB虚拟串口了$ W! c: n1 u# b4 |1 b( x; j. Q
未插入USB前.png
! k& y% p5 n, O# {( p 插入USB后.png 2 Y9 g0 f! d2 {
6 L; G. Y- T: x; M7 H+ B7 x
找到USB虚拟出来的串口,点击打开串口,串口的配置不用设置,与芯片进行通讯连接,通过串口助手给芯片发数据,会得到回复  N% n% z, ?. u0 x
USB通讯测试.png
. \* g: ?  \) U; t8 X; F* d
" w- i( J4 H& |$ U& D1 l2 a
. }3 h' a* S3 E9 g9 K9 T% ~
. L, I% T! m7 L* X8 B6 {. @: m! g$ A; P  z5 ~$ t

: W) e; O7 v1 J/ y, B' Q  C9 G- O
& E' @/ Y3 D2 j% P+ P2 q0 c6 T9 [
/ _4 M7 X, F' a6 ^* \  I  W
插入USB后.png
未插入USB前.png
收藏 2 评论3 发布时间:2020-6-17 11:48

举报

3个回答
李康1202 回答时间:2020-6-17 14:34:23
图片上传的好麻烦
fulin.work 回答时间:2020-6-17 17:36:51
用MCU自带的USB模块可以少一个UART转TTL的IC,用USB接口更方便,节约的UART可以接更多的外围设备。还可以设置USB烧录程序。
" L4 g/ `1 h8 X4 e4 y2 E这么多好处,但为啥一些教MCU的课程不讲呢?
g921002 回答时间:2020-6-18 00:00:41
fulin.work 发表于 2020-6-17 17:36! x! U- O0 O- p$ Y* f* b
用MCU自带的USB模块可以少一个UART转TTL的IC,用USB接口更方便,节约的UART可以接更多的外围设备。还可以设 ...

2 B0 x" q; _: [* b4 }5 c因為不用在做應用的時候,還要分心這一塊。' h$ \- H8 ?: K7 U
其實用HID配合Bluk傳輸其實會更方便。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版