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

【STM32C0评测】C071:USB的使用

[复制链接]
戈壁滩上的辉煌 发布时间:2025-5-19 13:09
       在完成基本模块测试后,我们聚焦于本次极具兴趣的功能——USB。USB作为一个功能,在实际应用中常展现出相对复杂性。以往,其使用要求用户对各种协议栈具备基础认知。现今STM32CubeMX已将这些复杂性集成,仅需通过基本配置即可实现USB通信。本次测试旨在将USB设备模拟为鼠标进行操作。# C0 B, S+ X% v) [3 ]
       咱们这次要在工程里加上USB功能。说实话,那个USB的枚举过程可真够复杂的,一环扣一环,哪个环节不对劲儿都可能让通信出问题。什么枚举啊、名称啊,还有USB通道,要配置的信息一大堆。不过还好,这次咱们用STM32CubeMX来配置,那可就简单多了。
' ?* Y- B7 L( f3 [& t) W% K: G       首先看一下时钟,虽然我们配置的主时钟是24MHz,不过不影响USB的时钟依然是48MHz:
3 w1 O3 V+ G" _2 @' N) D& f* g* u
1.png 9 W1 o( a' F& f+ v

: \) t# s% r* X       USB时钟使用的是固定值48MHz,以前遇到的开发板是可以配置成PLL提供的,不过也要注意计算能够分频到48MHz,本开发板使用的是HSI48 RC给USB提供基准时钟,本开发板的最大系统时钟也只能到48Mhz。
) W! o: {7 t: b" Y       开启USB模块:% d# Y/ _6 V1 C2 S% j2 g6 }  Z
2.png
; Q. n3 W# m' ]& k# m7 `

& t$ n# l3 m7 C7 x( C; c( j       打开USB功能项,我们前面配置的是设备,此处也要将其定义为设备,注意基本参数使用默认参数就可以,USB对应的引脚是PA11、PA12.0 l- O' H3 n4 \
       接下来是对USBX的具体配置,对于鼠标来说或者大多是USB来说配置的都是HID,也就是人机接口设备:
) t1 @2 a" C6 _* S
3.png 2 @  l, v6 o# V/ |+ m" l2 E
; E( @$ K6 A4 m( H% ?; ?6 ^7 L
       其中有很多的描述符,这里面就有设备描述符,其内容就是主机识别它的基本信息(设备名称,PID,VID等等):- ~) @; y) w6 ~; w' u7 W) ]7 @$ W# J
4.png
  `' b- L. |8 B5 a2 [: r+ l

; Q" K/ v7 z4 c& f* \2 U! \$ o8 r       记住这里这个我们会和后面的设备内容进行一下对比;
' J' q& e# k: K. }# s       接下来,我们将着手配置ThreadX,借助实时操作系统的强大功能,将极大简化对各模块的响应管理。值得一提的是,ThreadX针对USBx设有专门的处理栈,使得处理更为高效便捷:
1 s' S; L/ M9 \" F8 T
5.png
2 Y" e9 L; ]6 T; Q1 k
2 ~) K( p$ v) O" o3 x
       请注意,我们的USB初始化流程采用threadx线程来管理。因此,在工程配置阶段,请避免自动执行初始化操作:$ g/ {& ?) `- U2 o" ~. x
6.png
9 K5 h. q5 ]1 w& q' R2 ~2 C1 v: r& `

3 H" T8 S2 x6 U( [# d       我们不能使用滴答定时器作为系统时钟,需要修改:
$ e) [) Q- O% d9 R
7.png 0 W% N- t8 F( y! Z; f8 G
+ O! R" }( y# V3 e2 C
       接下来,我们着手分析初始化代码。在`main`函数中,特别注意到新增的`MX_ThreadX_Init();`调用。为了深入理解其机制,我们将逐步展开探索。首先,进入_tx_initialize_kernel_enter`函数内部,随后定位到`tx_application_define()`的入口。整个初始化流程均在此处展开,其中尤为重要的是对`MX_USBX_Device_Init(VOID *memory_ptr)`的调用。得益于ThreadX操作系统的采用,USB初始化过程中的这一关键细节得以明确体现:, m% E0 v0 f" K4 {
8.png
' H' e. b2 [5 d9 A/ D

  n4 n$ D4 G6 d% ~3 [7 w       编译下载后电脑的设备中可以看到:! r2 H* R( l) c* g6 w; t
9.png   F' [. |4 `3 o' x5 z+ r' J
& y7 z6 ^4 K8 W/ n8 r
       通过调试工具可以正常发现USB设备了,其PID以及VID与设置相符:
( P2 w2 ^# n0 N2 U5 S5 z. |
10.png 2 y( w  e7 |# `4 N+ P# y% v
: C, g# {5 T; B' r2 v
       到这里枚举成功了,实现STM32C071开发板的USB HID Mouse枚举部分。
1 P2 y/ ?- D4 W+ B$ m" D  `7 ]. a# e" j- s) g: G/ h

3 d) q6 R1 K! M% w5 Q9 W, e- _" k) j6 ], {& o# U! V' s

; G6 z+ W* H) i* E$ i) c6 M+ {. D& ]- m) ?2 P6 W
" C' z  N# g! [: d# y

0 ?( F( z7 \9 [# Z, X  q6 W$ Z( l7 t! J- X0 z/ a

( O$ R6 C# M7 O7 ]
+ U( Y8 {/ f/ h( ?- l7 [! Z# {$ R9 I# ~
; ~. k5 K$ P) z6 a; y% ]" Q  y
收藏 评论1 发布时间:2025-5-19 13:09

举报

1个回答
zzOutsider 回答时间:3 天前

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

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版