OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 18043|回复: 15

IO口翻转速度

[复制链接]

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2012-6-14 11:06:42 | 显示全部楼层 |阅读模式
我设置时钟为72Mhz,然后翻转PA8引脚的电平,程序如:
while(1)
{
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
}
但是实测出来的频率才不到4Mhz,我知道while在执行的时候会占用指令周期,但是按道理这个io口翻转速度可以达到18Mhz左右吧,可是现在这么小,为什么呢?
我设置io口速度为50Mhz。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
发表于 2012-6-14 11:14:21 | 显示全部楼层
不会这么慢吧。。。。。。。。你东西又问题。个别情况不考虑。。。。
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-14 12:58:49 | 显示全部楼层
回复【楼主位】sun1238898:
---------------------------------
改为:
while(1)
{
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
GPIOA->BSRR=1<<8;
GPIOA->BRR=1<<8;
}
会快一点.
所谓的18M不是IO控制了,是由内部外设(比如FSMC/SPI/USB/TIM)等的来控制了.
用定时器输出pwm,可以上到几十M,不过波形不好看了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
 楼主| 发表于 2012-6-14 13:53:00 | 显示全部楼层
恩,我知道了,因为有个客户给我的问题是让我外部晶振使用11.0592M,然后使用io口翻转的方法来生成5.53Mhz的方波,他用sliabs系列的c8051内核就做成了,然后用内部晶振倍频到48M给USB使用。就是同时使得两个高晶振使用!
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
 楼主| 发表于 2012-6-14 17:29:18 | 显示全部楼层
 


http://www.amobbs.com/thread-4605481-1-1.html
示波器实测!发现翻转间隔为166ns(6M),如下图,(2us跳12次,一次166us)
这是我在阿莫论坛里面看到的帖子,那我就想知道老大这是为什么呢?可以达到6M哦。


专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-14 18:26:50 | 显示全部楼层
看汇编代码比较好找原因.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-6-14 20:25:58 | 显示全部楼层
用软件来产生这种速度的方波不是什么好方法,

有跳转的,执行速度还和内部的流水线有关。

而且,用 STM32 做这个,软件还得把大量的时间花在这种地方,太浪费了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
 楼主| 发表于 2012-6-16 22:06:45 | 显示全部楼层
把优化级别设置为最高级,实现一条语句执行一句汇编,就可以了!理论的18M使用io口翻转是可以达到的!
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

6

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-7-30
在线时间
0 小时
发表于 2014-8-10 19:28:24 | 显示全部楼层
我的按照默认是时钟设置,使用while(1)循环
while(1)
{
LED0=0;
LED0=1;
         }
但是测量了一下引脚输出,频率只有3MHz,怎么楼上是4MHZ呢?一样的板子吧?
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
 楼主| 发表于 2014-8-11 12:11:38 | 显示全部楼层
不能用while,while占用时间太久。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-2-8
在线时间
0 小时
发表于 2015-2-8 15:58:49 | 显示全部楼层
不知楼主最后怎么解决的?我也遇到了相同的问题。
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
 楼主| 发表于 2015-2-9 12:15:15 | 显示全部楼层
回复【11楼】mofeng81:
---------------------------------
7楼说的很清楚了呀,优化级别开到最大,不要用while,反复高低。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-5-9
在线时间
6 小时
发表于 2015-8-19 07:52:25 | 显示全部楼层
那50mhz的速度既然不是io翻转速度,到底指的是什么呢
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-8-13
在线时间
4 小时
发表于 2015-12-30 09:48:05 | 显示全部楼层
本帖最后由 tgwfcc 于 2015-12-30 09:52 编辑

当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。不是IO翻转的速度。
回复 支持 反对

使用道具 举报

17

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2015-12-22
在线时间
128 小时
发表于 2016-5-24 22:25:24 | 显示全部楼层
结果呢,没有结论吗
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-21 11:55:23 | 显示全部楼层
顶顶顶顶顶顶顶顶顶
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 23:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表