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

【STM32C0评测】C071:USB的使用

[复制链接]
戈壁滩上的辉煌 发布时间:2025-5-19 13:09
       在完成基本模块测试后,我们聚焦于本次极具兴趣的功能——USB。USB作为一个功能,在实际应用中常展现出相对复杂性。以往,其使用要求用户对各种协议栈具备基础认知。现今STM32CubeMX已将这些复杂性集成,仅需通过基本配置即可实现USB通信。本次测试旨在将USB设备模拟为鼠标进行操作。
/ }; k. x- R' R( o2 n' }0 m       咱们这次要在工程里加上USB功能。说实话,那个USB的枚举过程可真够复杂的,一环扣一环,哪个环节不对劲儿都可能让通信出问题。什么枚举啊、名称啊,还有USB通道,要配置的信息一大堆。不过还好,这次咱们用STM32CubeMX来配置,那可就简单多了。+ S  P4 d+ B+ G: U
       首先看一下时钟,虽然我们配置的主时钟是24MHz,不过不影响USB的时钟依然是48MHz:4 L! U8 [, Q3 U/ C: w/ J
1.png
# ?3 }& h4 a& a0 l; Z

# d7 L9 R3 Y$ K% j9 i9 {       USB时钟使用的是固定值48MHz,以前遇到的开发板是可以配置成PLL提供的,不过也要注意计算能够分频到48MHz,本开发板使用的是HSI48 RC给USB提供基准时钟,本开发板的最大系统时钟也只能到48Mhz。
4 D6 S6 B# C$ Z       开启USB模块:* Y5 R1 n4 v' \* P: r
2.png 9 Y/ B, b1 X% v, H

! ~  t8 P! B$ `       打开USB功能项,我们前面配置的是设备,此处也要将其定义为设备,注意基本参数使用默认参数就可以,USB对应的引脚是PA11、PA12.- T' p% U6 U4 ?. e5 B$ S0 b
       接下来是对USBX的具体配置,对于鼠标来说或者大多是USB来说配置的都是HID,也就是人机接口设备:
0 u2 D, h6 J3 |; L* f8 i2 J$ k
3.png
9 G" N  ^: A8 q

0 H1 z4 \" s& _* {6 {' ^, P       其中有很多的描述符,这里面就有设备描述符,其内容就是主机识别它的基本信息(设备名称,PID,VID等等):
: u; z4 Y! d6 k7 N) [
4.png
& X1 |- |& z& y6 H

! K0 ~5 X% D. e& t0 n) d: I$ S1 _& M8 l       记住这里这个我们会和后面的设备内容进行一下对比;
1 j, n$ v1 L* f- ]8 h8 H; W       接下来,我们将着手配置ThreadX,借助实时操作系统的强大功能,将极大简化对各模块的响应管理。值得一提的是,ThreadX针对USBx设有专门的处理栈,使得处理更为高效便捷:
0 n+ [' C& Q3 q- L, o6 S
5.png 7 i+ K4 z3 ^- r3 Z. P9 n

8 _6 L; G: L, b       请注意,我们的USB初始化流程采用threadx线程来管理。因此,在工程配置阶段,请避免自动执行初始化操作:% ?, J+ Z3 O8 N
6.png
/ w" I3 ?, o! F' C
! j. k- S! ~6 E/ ?( {$ s+ {
       我们不能使用滴答定时器作为系统时钟,需要修改:
: G4 y( x2 t' R2 x/ E9 S
7.png - f& q% L! e$ I# H, Y' |
( y$ Q. e% f3 k6 k! E
       接下来,我们着手分析初始化代码。在`main`函数中,特别注意到新增的`MX_ThreadX_Init();`调用。为了深入理解其机制,我们将逐步展开探索。首先,进入_tx_initialize_kernel_enter`函数内部,随后定位到`tx_application_define()`的入口。整个初始化流程均在此处展开,其中尤为重要的是对`MX_USBX_Device_Init(VOID *memory_ptr)`的调用。得益于ThreadX操作系统的采用,USB初始化过程中的这一关键细节得以明确体现:
7 d. A" T& l: _! M! M9 m' I! m  d
8.png $ ^' [3 ~+ G* y2 o8 Q9 i0 T

2 y( c' M  K! M7 J2 o$ D6 g1 D       编译下载后电脑的设备中可以看到:
; u: Z. i; O; Y7 t. s! c
9.png 0 h  d9 o/ v& c0 X5 y

$ W/ ~) z) C2 u4 l$ n4 g. e       通过调试工具可以正常发现USB设备了,其PID以及VID与设置相符:
& T- c1 c# t. {+ I
10.png
. ?5 \# v- C" |3 f$ ]) c6 o+ O
$ e* m* _7 ~/ P5 E% k* V
       到这里枚举成功了,实现STM32C071开发板的USB HID Mouse枚举部分。
6 F' z7 A7 a. `# i8 W6 ~8 }# d4 V7 ^9 J2 A5 [% y( P! g

3 g: M8 f/ Z3 l
& E& ^/ r. j, w/ Y2 o# |- S
2 u( C  @1 b6 X) }% {7 U% e. m8 P: ^: |

5 j2 d6 U3 c. {8 a) I( g) |2 V% V3 U7 y0 H  L- p& E+ J) _$ Z

# P, c: D  G, Z) [* m, y' J! F( Q
& K2 X+ i- W0 Y# X; @* |& T$ M7 l

6 w6 u3 E9 P! }" K1 r4 u3 w$ B5 ~
赞 收藏 评论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 手机版