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

【STM32C0评测】C071:USB的使用

[复制链接]
戈壁滩上的辉煌 发布时间:2025-5-19 13:09
       在完成基本模块测试后,我们聚焦于本次极具兴趣的功能——USB。USB作为一个功能,在实际应用中常展现出相对复杂性。以往,其使用要求用户对各种协议栈具备基础认知。现今STM32CubeMX已将这些复杂性集成,仅需通过基本配置即可实现USB通信。本次测试旨在将USB设备模拟为鼠标进行操作。' j7 s* |1 x7 J7 z
       咱们这次要在工程里加上USB功能。说实话,那个USB的枚举过程可真够复杂的,一环扣一环,哪个环节不对劲儿都可能让通信出问题。什么枚举啊、名称啊,还有USB通道,要配置的信息一大堆。不过还好,这次咱们用STM32CubeMX来配置,那可就简单多了。
" ?6 l, \5 P  v3 Y       首先看一下时钟,虽然我们配置的主时钟是24MHz,不过不影响USB的时钟依然是48MHz:
0 \) ]: ^- H7 F' r2 ?1 D8 s
1.png
1 O! O/ F6 G) p$ h% V5 K. e! d5 U$ i6 I
1 [7 y: `6 c3 x# k0 B0 x* S
       USB时钟使用的是固定值48MHz,以前遇到的开发板是可以配置成PLL提供的,不过也要注意计算能够分频到48MHz,本开发板使用的是HSI48 RC给USB提供基准时钟,本开发板的最大系统时钟也只能到48Mhz。+ j+ }1 e" p7 x& Z+ o  m
       开启USB模块:
/ E" R5 y( ?8 C& L& ~
2.png . s: U5 u! a+ p4 ], |

8 m7 `1 t9 x. D7 p2 t% |8 E       打开USB功能项,我们前面配置的是设备,此处也要将其定义为设备,注意基本参数使用默认参数就可以,USB对应的引脚是PA11、PA12.
5 X- P0 @. W" A       接下来是对USBX的具体配置,对于鼠标来说或者大多是USB来说配置的都是HID,也就是人机接口设备:
8 Y5 X2 b3 p6 S1 x+ ?( x) {
3.png
) t3 a% o( Z# `1 `8 ^

; X2 R8 ]  c: x- Y$ C& K5 F       其中有很多的描述符,这里面就有设备描述符,其内容就是主机识别它的基本信息(设备名称,PID,VID等等):
; w7 }; a1 W2 Y7 a9 ^$ W; X
4.png 0 Y4 a4 g" P# Y

# `2 z9 |9 s' R  S/ r. f       记住这里这个我们会和后面的设备内容进行一下对比;5 t% [& o" ~; E( r& |
       接下来,我们将着手配置ThreadX,借助实时操作系统的强大功能,将极大简化对各模块的响应管理。值得一提的是,ThreadX针对USBx设有专门的处理栈,使得处理更为高效便捷:  [0 v5 l; R/ |
5.png
* `8 {8 U% K9 l. T% x- w' y$ j
8 ?4 B3 Q1 u9 Y1 l
       请注意,我们的USB初始化流程采用threadx线程来管理。因此,在工程配置阶段,请避免自动执行初始化操作:
1 \' j! q% _0 \) {$ e4 S
6.png
$ Y: s. ^) V1 s$ k
$ m3 n1 F& e6 W$ f: o/ l" ?2 r
       我们不能使用滴答定时器作为系统时钟,需要修改:8 D$ J! m1 N; p( N) X  F# a" ^
7.png
  ?2 \& T9 B3 Y
- c+ |# g; ]2 j! y: B/ G4 q
       接下来,我们着手分析初始化代码。在`main`函数中,特别注意到新增的`MX_ThreadX_Init();`调用。为了深入理解其机制,我们将逐步展开探索。首先,进入_tx_initialize_kernel_enter`函数内部,随后定位到`tx_application_define()`的入口。整个初始化流程均在此处展开,其中尤为重要的是对`MX_USBX_Device_Init(VOID *memory_ptr)`的调用。得益于ThreadX操作系统的采用,USB初始化过程中的这一关键细节得以明确体现:
1 d3 P$ L( T# {# u) `
8.png 0 j! ~) ^2 f6 y) O
/ y. M  o% p4 U5 z3 q
       编译下载后电脑的设备中可以看到:
  ?, ~+ Z/ ?) v& U2 _  {5 t
9.png 1 t8 l* O9 G+ @

& N& z+ P$ x7 m8 Y% K       通过调试工具可以正常发现USB设备了,其PID以及VID与设置相符:$ P0 l* a8 J& q+ L9 _
10.png . [" L4 B. ]- Y3 L! j" r

5 e) V7 F) ~: t4 o       到这里枚举成功了,实现STM32C071开发板的USB HID Mouse枚举部分。
8 h9 I* N  ]  M, A6 ^% r/ n7 o6 F8 Y# H7 @- F5 a

* \5 Q. k! Y" W5 T7 Y3 G- _5 G% k! d! O

* [4 N& R* m; \$ {
* q- A' e8 V8 f* @6 w/ \3 s, r  n3 X2 Q, j3 X; B, E3 l/ a
9 d1 u3 w9 z$ ?( _& p

+ e( n$ a# S7 X8 o$ y: [7 `0 {
4 @" u2 J& P/ ~
# x# ?! U) r8 v+ d3 W1 z. y- s/ U$ k2 M
赞 收藏 评论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 手机版