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

【STM32C0评测】C071:USB的使用

[复制链接]
戈壁滩上的辉煌 发布时间:2025-5-19 13:09
       在完成基本模块测试后,我们聚焦于本次极具兴趣的功能——USB。USB作为一个功能,在实际应用中常展现出相对复杂性。以往,其使用要求用户对各种协议栈具备基础认知。现今STM32CubeMX已将这些复杂性集成,仅需通过基本配置即可实现USB通信。本次测试旨在将USB设备模拟为鼠标进行操作。
! |1 F+ `! n- N8 Y0 q       咱们这次要在工程里加上USB功能。说实话,那个USB的枚举过程可真够复杂的,一环扣一环,哪个环节不对劲儿都可能让通信出问题。什么枚举啊、名称啊,还有USB通道,要配置的信息一大堆。不过还好,这次咱们用STM32CubeMX来配置,那可就简单多了。6 o+ w# {% O  G. X' y+ n
       首先看一下时钟,虽然我们配置的主时钟是24MHz,不过不影响USB的时钟依然是48MHz:
/ V1 b! @( @% `) ^, x/ v  v
1.png
4 `9 F8 P% {& V! S
2 j, Q5 d& X9 k& c6 q& S. n
       USB时钟使用的是固定值48MHz,以前遇到的开发板是可以配置成PLL提供的,不过也要注意计算能够分频到48MHz,本开发板使用的是HSI48 RC给USB提供基准时钟,本开发板的最大系统时钟也只能到48Mhz。
1 {/ B2 w6 `' ?9 x       开启USB模块:
8 X4 C/ g4 ?% h9 s, v# C1 ^% ^
2.png 1 {' c& Y) c' N  a: o4 X

$ d. h0 r% t, B) X       打开USB功能项,我们前面配置的是设备,此处也要将其定义为设备,注意基本参数使用默认参数就可以,USB对应的引脚是PA11、PA12.
& |( |( ^* {2 i, R+ e       接下来是对USBX的具体配置,对于鼠标来说或者大多是USB来说配置的都是HID,也就是人机接口设备:( J. c* e  b7 q3 ]6 Q
3.png
4 I" Z. ]# A$ n( y/ N; @

% M( M$ M2 S2 Y4 N       其中有很多的描述符,这里面就有设备描述符,其内容就是主机识别它的基本信息(设备名称,PID,VID等等):+ P% @+ b) M# b; g7 J; _
4.png 4 x3 e, E/ W% G
) n" A+ c: _/ \4 n+ u/ ?
       记住这里这个我们会和后面的设备内容进行一下对比;& A% G9 [4 G3 R  |- c
       接下来,我们将着手配置ThreadX,借助实时操作系统的强大功能,将极大简化对各模块的响应管理。值得一提的是,ThreadX针对USBx设有专门的处理栈,使得处理更为高效便捷:2 M  q- `5 H( D1 R3 T& w& {& ~
5.png
* Z! e; N6 e4 ?! u" q
4 v5 z* r: v1 h, g
       请注意,我们的USB初始化流程采用threadx线程来管理。因此,在工程配置阶段,请避免自动执行初始化操作:
" l) a+ X# [/ {* ^
6.png % \, I9 V. Z- O; T- y, `

% h) @2 Z5 O! S8 E& ]7 h3 o       我们不能使用滴答定时器作为系统时钟,需要修改:) U, X( q' u) }! K; N7 \9 n! Z9 g
7.png
8 }1 |' v2 M7 c- d. Y
3 m6 o5 ~' _: b; |, Y3 a' r/ C
       接下来,我们着手分析初始化代码。在`main`函数中,特别注意到新增的`MX_ThreadX_Init();`调用。为了深入理解其机制,我们将逐步展开探索。首先,进入_tx_initialize_kernel_enter`函数内部,随后定位到`tx_application_define()`的入口。整个初始化流程均在此处展开,其中尤为重要的是对`MX_USBX_Device_Init(VOID *memory_ptr)`的调用。得益于ThreadX操作系统的采用,USB初始化过程中的这一关键细节得以明确体现:, F4 L# @5 m: |0 C1 t  A
8.png
9 s1 O; ]6 ~  X. I

9 o) n: D# O9 s: C! v       编译下载后电脑的设备中可以看到:
. {% d' B/ I: J5 E# H( K& T' p0 n0 s
9.png
9 u. x3 O, |! |. D
" z. [9 [; O  U4 R4 q% T& O4 G3 O
       通过调试工具可以正常发现USB设备了,其PID以及VID与设置相符:5 \7 S5 t4 y+ W
10.png   a) c4 h! B" P% m, H# e) {- m& L& x% ]
5 i1 V, }, q. g) u5 ?# G
       到这里枚举成功了,实现STM32C071开发板的USB HID Mouse枚举部分。, ~/ l% |- ^0 n+ K! `: q
) M+ i/ V3 n- ?& y
. K2 r. c- Q' g. S  W- M

/ W  {* B2 |5 T2 R$ D6 J6 E3 r. t- G' F5 Y, C
6 c& |- C/ T' y# d5 g: U

( }9 p; P* t3 t# Y& M# H2 r+ r  t2 G  U5 O/ O

5 D- R4 Q! x$ K7 n# g. ~( P8 ~* i1 {# A/ V, ~! `
9 M8 v3 d1 r* y. `

6 N6 L0 @5 v; I9 e3 d
赞 收藏 评论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 手机版