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

STM32 GPIO口的速度是多少?含全部代码和显示图

[复制链接]
得蜜 发布时间:2008-11-28 14:59
吃过晚饭 忽然想测试一下GPIO口的速度
# q9 ?+ W, {; D3 a使用的库函数   不是裸奔 晶振8M   9倍频
* D0 i1 V( i1 l* ^$ e, C
5 i* K$ W2 |* T: n0 p- ?RCC_HCLKConfig(RCC_SYSCLK_Div1);3 _% a1 P3 K8 E; j$ o3 G" x
1 q( C- ^3 p* {( m! B
//设置高速 AHB 时钟(PCLK2). X, B! i4 ~; L. y; b0 h/ h# {
RCC_PCLK2Config(RCC_HCLK_Div1);/ f7 @: Z4 s5 f% W% Z6 Y
+ S% f: X) k7 j
//设置低速 AHB 时钟(PCLK1)( ^0 h3 P6 i6 s
RCC_PCLK1Config(RCC_HCLK_Div1);8 ]3 N! |$ F" e9 a% F: O( M: x

6 R  v$ y* Y4 E   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ;
4 v5 m$ j/ m! w+ n   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  e$ H( K, O6 b& |- c  l- @   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
1 \* {* J  r: F6 L' S4 }- p# S6 H) O   GPIO_Init(GPIOC, &GPIO_InitStructure);
/ O7 h" `" q! i1 R/ C! Z) B: W" @8 z) k+ V# i1 W
   while (1)- z3 R/ @$ |/ Z, B# e
   {
* q" c: m9 w6 a( M5 [  H   GPIO_SetBits(GPIOC, GPIO_Pin_10);
2 C& C6 T6 ^' U5 h   GPIO_ResetBits(GPIOC, GPIO_Pin_10);; g. s+ ?$ ?$ m$ N$ J
   }
0 O! R- J: K; J5 b  A, h9 K    - M) i* D$ E. G7 g+ J/ e
示波器 : 安捷伦 54621D / C; `* D6 Q1 I+ e- L
用示波器看的速度是2.0MHz   呵呵 不知道有没有哥们用裸奔的方法测试了的 呵呵
0 o" w9 I2 f1 ~# G1 y
 $ _) \0 h5 u1 l) x4 B& N
 
8 E; A; A4 M1 p- }
$ w' J( J0 B. C% q. T! S4 X+ L! ]: Z, ~- h' I# D, U- E. `+ g5 e
 6 _' \5 O% V- I& T! j$ p' z+ }
 
% }! ~+ K7 c% N% Q//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// T9 t/ C$ H  G' c
然后力哥裸奔的测试结果是:
" o/ D- f  ~: n1 `裸奔测了一下- F" F0 ~3 @% |# Q% \

# \  W5 S6 x9 f6 A7 o示波器显示是 2.768M Hz
* c" d, x' `9 B; s1 u
' ?( b: g( ~4 ?9 D固纬 GDS-806S 示波器
. X  W. B$ L7 Z9 V9 x" h1 y! t7 E4 X* [- _, W/ Z0 p7 E8 r7 E
while(1)' v5 u4 k* K9 \, I9 s
   {
. _7 [9 R5 j) l( C$ N  T1 ?" K) d6 sLED1_OFF;
9 h: V7 D" c1 ~6 j, YLED1_ON;
$ F* r/ I; m/ ?( h   }
7 q) h  X. I6 W
 8 N0 ^4 H5 A7 P; R
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
( H" r  j" q; [8 x" v9 T力哥继续测试 考虑上流水线4 W2 Z9 k8 K5 N9 l5 z# |1 `$ [( e  z
继续裸奔" u  ?) i! z- j8 Q. Y8 E' f
示波器显示达到 4M Hz
% c. Y- s* O' t" e
6 s: B! x! l9 h8 P5 Q5 w固纬 GDS-806S 示波器$ k0 Z4 U8 L# n

6 q. [- G  H3 e- j( m   while(1)
$ E2 n- i; L% q4 o( k   {
# d8 ~8 p( f* {) B9 NLED1_OFF;* X7 A: v/ j7 v" U7 `6 D* O, U
LED1_ON;
& X2 y$ [" q+ }4 a! v! ~* f/ ]+ }LED1_OFF;
; o" O: Z, T( F; _( OLED1_ON;3 h, H* y/ P% [
.................................................(200行重复)6 r; f  q1 {; D8 _$ A
LED1_OFF;
! q1 t& C9 ?$ cLED1_ON;$ c  O2 \. ?9 `: V: ~0 q- O& N
LED1_OFF;
$ o0 j; r* v6 K# H( b* P$ i2 DLED1_ON;
& z* |& ]$ X. W   }
( r9 @2 w8 ~1 J! _- G( b
 
. {5 \2 w# a' [) U* Y///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////) Y, r  T- K& U9 c5 h
 ; ?* `. h1 ?) `) i: T
然后我也把流水线考虑进去 继续使用固件库的方式* C. X8 E- z" C, x% a0 h2 r( s2 d) }
呵呵 我也在循环体内部加了N句 也考虑了流水线
/ F6 f* ^; M& p9 M- [$ P. C4 \" f3 I7 N/ E! b
   while (1)
  m% r( c2 K6 w( T: \* U, C. @1 ]0 {" ]   {
/ {0 ?; q5 S% J4 m" p0 `2 e   GPIO_SetBits(GPIOC, GPIO_Pin_10);
9 z, x  Q+ \+ \6 |  p   GPIO_ResetBits(GPIOC, GPIO_Pin_10);& h' O& }6 i" @* B; ]
   GPIO_SetBits(GPIOC, GPIO_Pin_10);
% ~  ~; o  k$ F+ t6 G& Z   GPIO_ResetBits(GPIOC, GPIO_Pin_10);
; B& I0 V4 h* [: r) E   ................ 中间200句1 s7 E. D# x& i' Y$ U9 A
   GPIO_SetBits(GPIOC, GPIO_Pin_10);
" T" G* D! H1 e9 |$ T2 m   GPIO_ResetBits(GPIOC, GPIO_Pin_10);8 ^3 i! W* N+ h* E9 N
   GPIO_SetBits(GPIOC, GPIO_Pin_10);* `4 }/ @& Z6 U# `, C$ A- @, B5 @
   GPIO_ResetBits(GPIOC, GPIO_Pin_10);
/ [% }7 V. D4 f- C3 T8 Z! D1 I) n   }

$ ^* t$ }- L( M" U 
2 e4 N% P' S8 J& \) P' k* }4 o2 i9 \示波器 : 安捷伦 54621D 2 @+ O* f, Q, {( X3 N, l
然后速度是2.725MHz   呵呵   看来流水线还是起了作用了的 嘿嘿
( S, z. H1 k( z, p$ ^: ]7 S, d- w
% }: [& z3 M; ^

1 O# `. t3 }" ~" V+ E, G$ v ' b# t3 W7 S0 t$ @8 O
赞 收藏 评论19 发布时间:2008-11-28 14:59

举报

19个回答
sonicll 回答时间:2008-11-28 16:18:45

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

用固件库函数肯定会慢吧,库函数里都有检查参数的函数。直接对寄存器赋值操作试试看
3 z/ I# D( z! D) n8 t$ fGPIOC->BSRR = GPIO_Pin_10;
4 f' ]. X# [7 s8 j3 }  \GPIOC->BRR = GPIO_Pin_10;
jklh-95293 回答时间:2008-11-30 01:51:17

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

直接利用寄存器操作肯定快多了,但我没有示波器,你再实验一下,看看结果如何
zhyf 回答时间:2008-12-10 15:50:29

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

感谢分享!
littleworm-9649 回答时间:2008-12-11 11:03:57

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

貌似是我的原创啊( f4 V9 w, D. x" ^8 Z# u: i
原贴地址:http://www.stmfans.com/bbs/viewthread.php?tid=1051&highlight=GPIO
+ ?3 r% d* \6 {; b& g3 b我贴在博客的地址:http://hi.baidu.com/smallwormsea/blog/item/6c00832bca02c7fce6cd4040.html
aleyn 回答时间:2008-12-11 20:17:20

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

看到虫子的示波器在上面了。
得蜜 回答时间:2008-12-11 23:00:35

回复:STM32 GPIO口的速度是多少?含全部代码和显示图

楼上二位给我发个站内短消息吧。
cangbai 回答时间:2008-12-24 14:30:29

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

zangdianjun 回答时间:2008-12-24 15:13:47

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

这个还真没试过,不过用寄存器直接操作,速度肯定会更快的!
yy_kernel-10076 回答时间:2008-12-25 11:32:55

回复:STM32 GPIO口的速度是多少?含全部代码和显示图

这个不是IO速度好不好,这个是IO控制速度,和控制IO的指令多少有关的啊。。。
jackcai-22729 回答时间:2008-12-25 14:37:14

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

IO速度最快能达到多少?
qsj 回答时间:2008-12-28 14:15:23

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

qsj 回答时间:2008-12-31 19:34:46

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

navyxumay 回答时间:2009-1-3 12:59:14

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

我试过了,速度为9m
yxj9377 回答时间:2009-1-5 21:45:30

RE:STM32 GPIO口的速度是多少?含全部代码和显示图

不错 又学习了一课 简单精辟!
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版