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

【经验分享】STM32L053 的 GPIO 翻转速度测试

[复制链接]
STMCU小助手 发布时间:2022-2-27 16:23
一. 前言
$ w- w- e* `5 H$ i测试 STM32L053 芯片在系统时钟 8Mhz 的情况下,其 GPIO 电平的翻转速度。& [. S+ ~1 l, W& A, I2 i' O

3 q2 k1 T$ ?& z2 Z2 D二. 说明
8 b# g8 T$ _4 b, \( E) n/ lSTM32L053 芯片是 M0+的内核,其 GPIO 的外设直接挂在内核上。
' C" [- }! Y- z8 b3 C. g* A" r, v7 C5 Q' @+ Y/ O, e
3TAO0[`GI~9L4J8V6ZG~J]T.png : F- i. f6 G  P$ z; K( W/ w
6 f1 G- h4 I: ]- K* C- g, }
三.测试环境
1 J+ N* A- ]; B2 Z& V软件环境:IAR 7.20,STM32CubeMX Version 4.3.0,STM32Cube V1.0
& T( R; D6 \: P硬件环境:STM32L053 Nucleo,MB1136
" E& v( s$ L8 ~3 D, F6 Z; \- y8 W5 Y9 D+ H
四.测试流程" L0 z6 N4 N5 U. A
打开 CubeMX 的软件,点击新建工程,选择与目标硬件板相同的芯片型号,GPIO 口选择 PA5。系统时钟通过内部 HSI 实现 8MHz。如下图:
; [, R; `2 J3 m/ J% x0 i6 T) F$ V8 `' w) Y) F
H2H)_N{5J`624%4{CAT6_HY.png ( e, ~6 _- j# n- c) L. Q5 {
5 {( ]( R% x/ z6 t
点击 OK 按钮,弹出另外一个对话框,选择设置系统时钟 8Mhz。HIS 最终通过 PLL 锁相环输出 8MHz的时钟。
( I  m: e9 t# h8 k4 R4 V: z% d0 ]% k

# {2 h3 Q  {0 ~/ G APES638CPRB)M0ON44XESP3.png
) J* G3 d. r1 u) P  B: ?0 D5 I( I6 L
设置 PA5 为普通 IO 口输出模式。
. P! J' P. a# Q2 h/ u; z. Y. Q9 ~1 |" G9 S  c' Q
U%8U(M1Z3)ESQG6UZB6%JBS.png ! P, d4 g% [: V* x! b( M( z/ N& C: b- U

$ Z+ T9 n5 W. N3 t& U/ G* h5 s并配置其端口的摆率为 High Speed.
5 Z& q$ J' B- ]6 g- q5 D6 z4 W8 [3 I5 j, A
3 {, R( @+ e2 |$ m- d8 V
9Q4P{C6VP%_H39_X7O$N{U6.png
& A- v( X! C) ~. J+ S; t! M6 w2 @0 e( {% S0 Y8 R- B
基本上这里想要的设计完成了,让 cube 生成相应的代码,然后去验证 GPIO 的电平翻转速度。
, J6 _0 v- Z& W7 \
2 W- J; j, S: R* t/ q: z& l; ?: z4 N) I4 ~& v# J( e2 h) k& E& f9 q2 f
`EY(]`MVLMC)C~[D5LSGN~6.png ; g4 r. W, c4 K7 Z" d
1 c7 h' V- x# {0 i: G
打开项目工程。9 j: C4 |* A/ g5 ]
在 main 函数的 while 循环中,添加 GPIO 口的翻转语句。期望的 GPIO 翻转速率能够达到 4MHz,在系统时钟 8Mhz 的情况下。按照 8Mhz 与 4Mhz 的关系,需要单周期的指令去执行电平的高低切换,显然此时运用调用库函数的方法是不可取的。应该直接操作寄存器。4 ~/ R' \* `7 {# B
按照上述思路,实现方法如下图,用示波器观察 GPIO 口的波形。- z8 a6 ?: l3 |( \! K. m
  \. g) ?: j; O$ ~
* U8 z: v: q8 t& ?* @  y( o
XM)(OQH`@66PMIX0IGC}A.png
8 r9 g, s0 }+ X9 i: @2 m! E( C/ L5 J- d! c
测试发现,只能有 1.005Mhz。' ~! n) K4 T& m  `. e
和自己的想法差别很大,究竟怎么回事呢?查看反汇编语句,发现虽然自己是直接对寄存器的操作,但是反汇编却执行了多条语句。
: L3 L$ u$ d, J" |" ]3 C) ^, o# W7 r5 F1 T3 ]" n

) x1 a1 G. r; r/ z9 q8 s; ]# O C4V15X007PDI_E7KOU`P}~K.png 1 I8 l6 V& l# k! ^* V, r+ e
; d3 q) E8 S/ [
哦,立马查看编译器的优化等级。原来我是设置了代码不优化的。/ P: \* T4 \( ]6 ^6 l6 _

8 X, c& s0 d3 Z# e9 f8 q7 k+ u8 c$ \
  r0 {: b" r: @5 Y& b SDFV70K7TY`1B8(TR~OP$RR.png 6 r+ i6 a' R$ z$ a" b) O8 s( R0 n7 N
1 J" Q1 H( S# q+ D( o+ U3 u3 k0 v$ a
立马更新优化等级,逐个变更,看看各自的对比:
# O$ X! t2 {/ M7 }. d* L; E优化等级为 Low 时:和没有优化时的波形一样。
3 Y# C. y$ m  K+ u' t: f+ Z优化等级为 Medium 时:编译器旁边的 Enabled transfomations 的设置保持默认,GPIO 口的翻转速度达到了 4Mhz.7 l% e# E9 X. b' G% \
. \3 k3 T; k7 T4 M6 D
6 B. Z6 c8 i3 _( t
{I[P]U0TY3OA{M1)0XBVZ{B.png * T7 I; Z* m, k- D. g) _

2 ?& s; \9 _  V* D$ J1 d优化等级为高时,和优化等级为 Medium 的波形一样。
) t& O+ S5 A3 }: Y. s6 z其实,也可以通过反汇编的执行语句看出 GPIO 口的翻转速率。只要执行单周期指令,GPIO 口的翻转速度就可以达到最高
* S; ?% J! i$ g5 K5 D, S8 p
2 n, x/ n" P8 T5 d) w3 ?
" _5 B* g3 l0 \5 q6 W& M. \ 4Y3{8IER6}PYZWQZ1`WSQGK.png
2 l! Q, |$ T0 x' p
收藏 评论0 发布时间:2022-2-27 16:23

举报

0个回答

所属标签

相似分享

官网相关资源

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