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

【STM32C0评测】C071:USB的使用

[复制链接]
戈壁滩上的辉煌 发布时间:2025-5-19 13:09
       在完成基本模块测试后,我们聚焦于本次极具兴趣的功能——USB。USB作为一个功能,在实际应用中常展现出相对复杂性。以往,其使用要求用户对各种协议栈具备基础认知。现今STM32CubeMX已将这些复杂性集成,仅需通过基本配置即可实现USB通信。本次测试旨在将USB设备模拟为鼠标进行操作。8 l. I" J0 g2 E9 O' o' |# s
       咱们这次要在工程里加上USB功能。说实话,那个USB的枚举过程可真够复杂的,一环扣一环,哪个环节不对劲儿都可能让通信出问题。什么枚举啊、名称啊,还有USB通道,要配置的信息一大堆。不过还好,这次咱们用STM32CubeMX来配置,那可就简单多了。
/ e  S  Q# I+ ^4 K       首先看一下时钟,虽然我们配置的主时钟是24MHz,不过不影响USB的时钟依然是48MHz:
4 X+ g# u1 _5 Y7 ~6 @- h- r9 v
1.png
% w5 A% h% m8 n

6 ^; \6 @  Y2 U1 k, W$ s0 N       USB时钟使用的是固定值48MHz,以前遇到的开发板是可以配置成PLL提供的,不过也要注意计算能够分频到48MHz,本开发板使用的是HSI48 RC给USB提供基准时钟,本开发板的最大系统时钟也只能到48Mhz。0 R3 C$ k, V+ p; C  G) s% U' b
       开启USB模块:
1 t6 t3 S! m% [8 T" e
2.png
/ t0 |& m; f0 f  K  R' L
% B  u* a, m5 H7 ~
       打开USB功能项,我们前面配置的是设备,此处也要将其定义为设备,注意基本参数使用默认参数就可以,USB对应的引脚是PA11、PA12.4 c( u* [/ l0 P
       接下来是对USBX的具体配置,对于鼠标来说或者大多是USB来说配置的都是HID,也就是人机接口设备:
8 F' ?6 _9 `" m5 [/ ~
3.png * \9 d, |8 y7 _# ~

( w  v, P7 M) ]* J       其中有很多的描述符,这里面就有设备描述符,其内容就是主机识别它的基本信息(设备名称,PID,VID等等):" |( Q" }2 C6 r, y1 B: _
4.png 3 Q0 X/ \+ [3 t& J  F4 c
6 j, a! B; x( G
       记住这里这个我们会和后面的设备内容进行一下对比;& x# N( E+ L% M
       接下来,我们将着手配置ThreadX,借助实时操作系统的强大功能,将极大简化对各模块的响应管理。值得一提的是,ThreadX针对USBx设有专门的处理栈,使得处理更为高效便捷:
1 w  L% t9 f4 R- ?3 S) z' X8 e
5.png ! A. x) e: t0 x
4 i! ]+ J1 {! x) Q( T- `
       请注意,我们的USB初始化流程采用threadx线程来管理。因此,在工程配置阶段,请避免自动执行初始化操作:% N) D* b+ O9 E3 r
6.png ) G, ^0 Q6 W$ }& M2 r

) |4 |  `& [# O* g( X1 z5 f' ~       我们不能使用滴答定时器作为系统时钟,需要修改:# `1 D4 @9 }7 D3 L) b0 S
7.png
7 b3 i" I& ~7 a( j3 o. c* k: J- X3 }

* m- I" J. M" I0 U9 O. t" Q( v8 ~, {       接下来,我们着手分析初始化代码。在`main`函数中,特别注意到新增的`MX_ThreadX_Init();`调用。为了深入理解其机制,我们将逐步展开探索。首先,进入_tx_initialize_kernel_enter`函数内部,随后定位到`tx_application_define()`的入口。整个初始化流程均在此处展开,其中尤为重要的是对`MX_USBX_Device_Init(VOID *memory_ptr)`的调用。得益于ThreadX操作系统的采用,USB初始化过程中的这一关键细节得以明确体现:8 l) ]6 q" U$ }
8.png / e9 T) Z* S* z$ b' q& \

% }' d9 ]  b& k; J9 z       编译下载后电脑的设备中可以看到:: ~) j* k7 j' h. u9 |
9.png . M6 o" [* Z9 d! I+ S6 }3 h
: y' y9 Y* E9 J, |
       通过调试工具可以正常发现USB设备了,其PID以及VID与设置相符:! R7 o7 R  C% X6 b7 R) g/ W
10.png
" \  p( _+ b/ d  t/ Y

. ]9 w; k" r6 l- Q       到这里枚举成功了,实现STM32C071开发板的USB HID Mouse枚举部分。
' w' \+ P& `, C% _
0 h  c: j2 g5 K4 O2 z7 P7 `/ g4 K0 v7 q1 k& F9 U* c" K

9 W; B4 @& z+ D2 Q: \9 c+ O/ A3 f/ Y" S; N6 K

, o0 }, J" \' _) ~  R7 B6 D
* Y. p: t) F* s* n! m$ s. z- U2 |1 ?% |# t5 p* c% p4 S

& H' u( w4 x* w5 Y7 `
9 L5 w4 p. n) w2 x* E
* o; g% P! e2 `) [  q
7 @$ D: o( q& M$ O
收藏 评论1 发布时间:2025-5-19 13:09

举报

1个回答
zzOutsider 回答时间:2026-9-1 16:06:27

我按照上面一步步配置完成后程序下载下去后,没有反应,最后一页的程序是放在哪个文件下啊,拜托大佬解惑🚀️

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版