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

【STM32C0评测】C071:USB的使用

[复制链接]
戈壁滩上的辉煌 发布时间:2025-5-19 13:09
       在完成基本模块测试后,我们聚焦于本次极具兴趣的功能——USB。USB作为一个功能,在实际应用中常展现出相对复杂性。以往,其使用要求用户对各种协议栈具备基础认知。现今STM32CubeMX已将这些复杂性集成,仅需通过基本配置即可实现USB通信。本次测试旨在将USB设备模拟为鼠标进行操作。
' b" x7 x" k/ g1 o% U: `       咱们这次要在工程里加上USB功能。说实话,那个USB的枚举过程可真够复杂的,一环扣一环,哪个环节不对劲儿都可能让通信出问题。什么枚举啊、名称啊,还有USB通道,要配置的信息一大堆。不过还好,这次咱们用STM32CubeMX来配置,那可就简单多了。9 L) C* `! e+ |7 l6 P
       首先看一下时钟,虽然我们配置的主时钟是24MHz,不过不影响USB的时钟依然是48MHz:5 C5 W- j6 I1 N. l" b
1.png
+ c* V( s3 E+ b9 F' m

) @5 n8 g$ P) Q' C5 W. A; S       USB时钟使用的是固定值48MHz,以前遇到的开发板是可以配置成PLL提供的,不过也要注意计算能够分频到48MHz,本开发板使用的是HSI48 RC给USB提供基准时钟,本开发板的最大系统时钟也只能到48Mhz。
. V8 o' V* k  j0 c' l# X2 y6 F       开启USB模块:
+ T( O4 S5 u6 {( l0 |+ \: [: q
2.png : R6 A# A, _5 I7 m5 h) }2 C

5 P# o$ G$ i4 `! [. @, K; `) ?: z       打开USB功能项,我们前面配置的是设备,此处也要将其定义为设备,注意基本参数使用默认参数就可以,USB对应的引脚是PA11、PA12.
4 l/ b, T( R" A9 K5 S6 u/ D       接下来是对USBX的具体配置,对于鼠标来说或者大多是USB来说配置的都是HID,也就是人机接口设备:- @! m  T0 e$ G( x6 @! \
3.png
; `' z  Y6 J+ ]3 }1 Z
6 b7 c9 Q* l% k$ G4 A. |( h$ J
       其中有很多的描述符,这里面就有设备描述符,其内容就是主机识别它的基本信息(设备名称,PID,VID等等):
- A+ f+ ^" W5 P
4.png
9 `* ]" d6 [7 M) L) J! Z

% z, n' A; k. w* d. P7 Y       记住这里这个我们会和后面的设备内容进行一下对比;
9 c+ Q( s, I" P, b8 z       接下来,我们将着手配置ThreadX,借助实时操作系统的强大功能,将极大简化对各模块的响应管理。值得一提的是,ThreadX针对USBx设有专门的处理栈,使得处理更为高效便捷:2 w% \$ d3 |& H) k+ m- R; o' J* a
5.png 4 S5 G9 p6 \7 D

+ C, a- h; x/ h" P2 w# X% {       请注意,我们的USB初始化流程采用threadx线程来管理。因此,在工程配置阶段,请避免自动执行初始化操作:
5 E6 ]) k' g9 l! F( N" v% z6 x
6.png 0 o  x4 N2 i) i- i

# U1 q5 ]! X/ c- {3 Z1 ^       我们不能使用滴答定时器作为系统时钟,需要修改:
  o, o5 p  }% W8 K- O
7.png ! M% w. c* O3 L9 G/ T
. Z% i; ^' ^7 d# U- v
       接下来,我们着手分析初始化代码。在`main`函数中,特别注意到新增的`MX_ThreadX_Init();`调用。为了深入理解其机制,我们将逐步展开探索。首先,进入_tx_initialize_kernel_enter`函数内部,随后定位到`tx_application_define()`的入口。整个初始化流程均在此处展开,其中尤为重要的是对`MX_USBX_Device_Init(VOID *memory_ptr)`的调用。得益于ThreadX操作系统的采用,USB初始化过程中的这一关键细节得以明确体现:3 [, X, @3 f" C
8.png   e% H- ^+ ~# ]9 _

/ S( G9 n7 [) R. t/ E; }       编译下载后电脑的设备中可以看到:
0 n$ m6 o+ b! ]. {% a5 Q
9.png - w5 B9 J1 ?3 c" h
) Z1 R0 Y1 c* Y/ U3 T
       通过调试工具可以正常发现USB设备了,其PID以及VID与设置相符:7 H+ v% {% }7 p, \4 I: c
10.png
5 {1 G6 _, z: w: u
, y& @( S: `$ o: g% j8 Y7 \  @
       到这里枚举成功了,实现STM32C071开发板的USB HID Mouse枚举部分。# L. a  a7 u; \" c

7 l2 m& @. N* y5 E: X' U8 N) F7 Q1 i+ r. u) I

/ ?3 M% R$ U, F' Y6 w
/ }7 j, G% q8 @/ D# F
, J5 S+ \- `1 X' c$ M
) O* `/ b0 [3 g2 T. y0 ^8 t3 ?+ y' U2 J* y$ Y. t& ]

& a7 q7 d; p7 R) |- E' I9 m5 q/ |: S- ^& h/ J  E% {
" J% n4 c$ \( b7 p6 P- |7 A# _  Y
, D7 s9 |: m$ c4 j
收藏 评论0 发布时间:2025-5-19 13:09

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版