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

【STM32C0评测】C071:USB的使用

[复制链接]
戈壁滩上的辉煌 发布时间:2025-5-19 13:09
       在完成基本模块测试后,我们聚焦于本次极具兴趣的功能——USB。USB作为一个功能,在实际应用中常展现出相对复杂性。以往,其使用要求用户对各种协议栈具备基础认知。现今STM32CubeMX已将这些复杂性集成,仅需通过基本配置即可实现USB通信。本次测试旨在将USB设备模拟为鼠标进行操作。
4 Z' I3 H, l0 r5 l8 S, j       咱们这次要在工程里加上USB功能。说实话,那个USB的枚举过程可真够复杂的,一环扣一环,哪个环节不对劲儿都可能让通信出问题。什么枚举啊、名称啊,还有USB通道,要配置的信息一大堆。不过还好,这次咱们用STM32CubeMX来配置,那可就简单多了。7 r* F) j/ G# c0 q' _0 s
       首先看一下时钟,虽然我们配置的主时钟是24MHz,不过不影响USB的时钟依然是48MHz:
: J! v: I& K5 h4 L
1.png
8 c. `' B+ r5 T6 G4 v
' b* w, ]' X- H' T9 C
       USB时钟使用的是固定值48MHz,以前遇到的开发板是可以配置成PLL提供的,不过也要注意计算能够分频到48MHz,本开发板使用的是HSI48 RC给USB提供基准时钟,本开发板的最大系统时钟也只能到48Mhz。  _3 [& |3 Q5 A$ a/ Q6 Z$ k3 k
       开启USB模块:# j. R2 R* b! G, k6 y! [
2.png
9 G* c  M0 o3 [' _7 T

4 a' ?) V7 ^' y4 i7 W0 w9 Y9 H       打开USB功能项,我们前面配置的是设备,此处也要将其定义为设备,注意基本参数使用默认参数就可以,USB对应的引脚是PA11、PA12.3 ]5 n* i+ Q: X; v6 r6 F( r
       接下来是对USBX的具体配置,对于鼠标来说或者大多是USB来说配置的都是HID,也就是人机接口设备:5 E1 S. s( J1 k1 N
3.png * W. N. I5 p* @( A9 E0 E
" L; b+ T% ~. M" w4 c
       其中有很多的描述符,这里面就有设备描述符,其内容就是主机识别它的基本信息(设备名称,PID,VID等等):) U+ G9 h6 l  W$ A; ~0 D
4.png ; z8 N2 j$ s7 a: T( j/ p- U
/ ^7 z" Y& r  U8 E
       记住这里这个我们会和后面的设备内容进行一下对比;
. |9 _+ K9 B+ [       接下来,我们将着手配置ThreadX,借助实时操作系统的强大功能,将极大简化对各模块的响应管理。值得一提的是,ThreadX针对USBx设有专门的处理栈,使得处理更为高效便捷:7 F& U4 m/ k8 O2 U3 x0 [1 s
5.png
8 k2 p3 j* w$ l( I

% O" U" G; x2 J% Z3 `       请注意,我们的USB初始化流程采用threadx线程来管理。因此,在工程配置阶段,请避免自动执行初始化操作:
# |- q+ }1 s% L, `: ~3 R  Y7 W& W
6.png 0 G! c( h! D- K& z6 I# [5 n8 U- ]
0 o! _+ I: m( Z7 ^
       我们不能使用滴答定时器作为系统时钟,需要修改:
1 _7 S8 ~3 ~! N$ C) y; a7 R
7.png % _' v( y; H/ E- l: T$ P
3 e9 a$ s2 J# Z9 @
       接下来,我们着手分析初始化代码。在`main`函数中,特别注意到新增的`MX_ThreadX_Init();`调用。为了深入理解其机制,我们将逐步展开探索。首先,进入_tx_initialize_kernel_enter`函数内部,随后定位到`tx_application_define()`的入口。整个初始化流程均在此处展开,其中尤为重要的是对`MX_USBX_Device_Init(VOID *memory_ptr)`的调用。得益于ThreadX操作系统的采用,USB初始化过程中的这一关键细节得以明确体现:; S/ M2 x' z0 l  f- A. ?
8.png
6 s( g: y7 K& b$ q" p) W

0 b) r, o9 {& c  i# M& e! ]       编译下载后电脑的设备中可以看到:  f/ S& l. \" h' ~9 Q
9.png 8 D* i( f2 y& r. @
1 R% L! F" p" Z0 X4 }# h) {/ b
       通过调试工具可以正常发现USB设备了,其PID以及VID与设置相符:5 O$ c1 K' g$ K( G. |6 F. q
10.png
7 x+ z' P, j4 O: ]0 @; P3 p
  F' a" M6 A+ `% b0 o5 I! d
       到这里枚举成功了,实现STM32C071开发板的USB HID Mouse枚举部分。
0 i8 e; q0 |4 D' i/ l6 E5 Y; M# @. f/ H* v: h9 M
2 U1 }! h7 y* w1 y1 R5 }+ O
- Q$ ~8 k/ c7 o# ^
* k6 V' X: @! i# N/ C

' g! o7 Z% b+ W: l- k' N2 ~' M& c) C& ^: p0 k& U# b
  n; v+ u2 a, g7 q  U
0 t* X4 {% S! O& i* G* C
$ d& l( Q: w8 |

( g" X3 \1 v6 O8 Y
, i1 K( z0 l4 ^& l& ~0 d6 x4 \
赞 收藏 评论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 手机版