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

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

[复制链接]
STMCU小助手 发布时间:2022-2-27 16:23
一. 前言
* ~9 ~% z; o. [4 g. U测试 STM32L053 芯片在系统时钟 8Mhz 的情况下,其 GPIO 电平的翻转速度。
$ m$ o: i! S( w$ s
- E* F/ V( Q) {2 O4 ~二. 说明- Q- f# s; n  a5 {2 x8 b
STM32L053 芯片是 M0+的内核,其 GPIO 的外设直接挂在内核上。1 \6 y8 w6 M! N$ J# P6 @/ v

0 Z, A) [) c5 c7 j) |$ { 3TAO0[`GI~9L4J8V6ZG~J]T.png $ W" B) X! F% G* ]% a. ^; @
) g: W3 |6 ]. V* `
三.测试环境
5 g/ r9 n8 h( @软件环境:IAR 7.20,STM32CubeMX Version 4.3.0,STM32Cube V1.0* }7 z& J( J( ~
硬件环境:STM32L053 Nucleo,MB1136
" s) t; Z7 ]! q' @
/ S5 y: Q, U/ A" P$ }四.测试流程3 v4 R" P6 C9 e2 ~) i
打开 CubeMX 的软件,点击新建工程,选择与目标硬件板相同的芯片型号,GPIO 口选择 PA5。系统时钟通过内部 HSI 实现 8MHz。如下图:
+ c, N% k" W3 J# H  ~* i
# I1 _$ z8 n: t5 s3 S, T- R H2H)_N{5J`624%4{CAT6_HY.png 0 G8 i+ h$ {. |7 G, Y, E6 ^# R8 e
3 Z1 |7 P5 J8 ^9 c5 {/ B) ?
点击 OK 按钮,弹出另外一个对话框,选择设置系统时钟 8Mhz。HIS 最终通过 PLL 锁相环输出 8MHz的时钟。3 D# s9 O9 Q4 B) J6 M' I) T

! K1 ]- h8 ]3 q  S+ f, F3 A3 P2 P4 @+ t: C2 M" a9 j
APES638CPRB)M0ON44XESP3.png 3 Q& s* [7 k# \) D
3 N" ?6 F6 x' t( {
设置 PA5 为普通 IO 口输出模式。
( C1 T* L6 @: u: y- G' x* \. ]  f$ G+ k9 u: A: O# f$ a
U%8U(M1Z3)ESQG6UZB6%JBS.png
+ D% X# ?+ B. j* L( R& Z. C
* t; \( B2 B$ X' B0 i9 O1 s) C" {并配置其端口的摆率为 High Speed.3 |( X; G8 z  H$ z! y" D
/ ~' D( n9 n7 L2 U  V" W

4 J, A0 k+ L1 n2 r4 X- v+ y, q 9Q4P{C6VP%_H39_X7O$N{U6.png
- n* P  `5 W$ d+ R2 F' n5 L* T: [$ l6 Z( [% D
基本上这里想要的设计完成了,让 cube 生成相应的代码,然后去验证 GPIO 的电平翻转速度。1 U  F9 W; A8 Q) z

( V; a5 D* O; ?5 k/ E2 W; n# M* q; u4 c9 j4 C
`EY(]`MVLMC)C~[D5LSGN~6.png 0 l0 j  r6 Y1 J* Y
: Q# |' h* N' _" a* @+ g* l
打开项目工程。5 a" o8 {4 B2 ~9 W3 f* _- e( A) S
在 main 函数的 while 循环中,添加 GPIO 口的翻转语句。期望的 GPIO 翻转速率能够达到 4MHz,在系统时钟 8Mhz 的情况下。按照 8Mhz 与 4Mhz 的关系,需要单周期的指令去执行电平的高低切换,显然此时运用调用库函数的方法是不可取的。应该直接操作寄存器。
2 x( V8 O6 g' c3 u% \; c0 w+ Y按照上述思路,实现方法如下图,用示波器观察 GPIO 口的波形。4 B4 ~( R$ I9 {& p# R: A6 Y
* ]- C! u" S- r
; e+ \# V8 f+ ]: N5 `) E% G5 R
XM)(OQH`@66PMIX0IGC}A.png ( ~3 w, S9 z, @. t
& e, r, b' ^; P5 Z; y
测试发现,只能有 1.005Mhz。! h+ x1 S- k  W5 c8 N
和自己的想法差别很大,究竟怎么回事呢?查看反汇编语句,发现虽然自己是直接对寄存器的操作,但是反汇编却执行了多条语句。
: U8 v$ d7 k1 x* V4 o3 x( C5 M- s* D! S7 C( O1 j8 q; j; O) f8 \0 n

% C; @' J: i. w% `# P9 S C4V15X007PDI_E7KOU`P}~K.png
' y  w" r& @  Q5 ?5 S, p1 V9 ?4 Z4 A+ i1 [3 F- Q, U2 t
哦,立马查看编译器的优化等级。原来我是设置了代码不优化的。
% q  f# I- ^1 E. d. h. |2 r
) Q0 I; q" U# g. T1 l( N- U% ^" J% |2 z9 O
SDFV70K7TY`1B8(TR~OP$RR.png
3 w. O. M0 Q2 k# W- i5 Y
! f- [2 L& I+ G% Q$ K* ]0 r. W( W立马更新优化等级,逐个变更,看看各自的对比:3 E, b- ]9 T  ?1 F
优化等级为 Low 时:和没有优化时的波形一样。3 \* _7 t1 H3 ]  }1 ?6 S; N
优化等级为 Medium 时:编译器旁边的 Enabled transfomations 的设置保持默认,GPIO 口的翻转速度达到了 4Mhz.
8 [7 I. m5 |# F" t: x2 D( N. ~5 a6 r) S( @# e6 K* R0 B

7 c% l" @7 f0 C0 d' `3 p& ~- C+ B {I[P]U0TY3OA{M1)0XBVZ{B.png
0 W( Z% k' O  t* i- w0 \9 i
6 g" [$ ^# M; x# E% x, S6 W, F8 v- K优化等级为高时,和优化等级为 Medium 的波形一样。
7 |$ _* U- |; O4 d# L其实,也可以通过反汇编的执行语句看出 GPIO 口的翻转速率。只要执行单周期指令,GPIO 口的翻转速度就可以达到最高' A- ?) z5 _& m2 X  @
1 r& b* I( O( i$ z/ \, ?" s
+ \& {, k" g0 D9 l
4Y3{8IER6}PYZWQZ1`WSQGK.png
1 K# X# K# V6 m
收藏 评论0 发布时间:2022-2-27 16:23

举报

0个回答

所属标签

相似分享

官网相关资源

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