打印
[STM32F4]

stm32f4XX如何IO口翻转可以达到25M

[复制链接]
6040|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thebran|  楼主 | 2014-7-8 09:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在我简单测试了一下,用的位带操作,就是主程序里while死循环,IO翻转只有12M,难道这个单片机不能高速翻转IO吗?
沙发
thebran|  楼主 | 2014-7-8 10:40 | 只看该作者
是我的问题太难了吗?这个单片机IO翻转根本就达不到很高的速度吧

使用特权

评论回复
板凳
airwill| | 2014-7-8 10:48 | 只看该作者
我发现: 不要使用 bitband,  直接写 BSRR 会更快.

使用特权

评论回复
地板
5186| | 2014-7-8 10:55 | 只看该作者
airwill 发表于 2014-7-8 10:48
我发现: 不要使用 bitband,  直接写 BSRR 会更快.

那肯定的,好像能快很多

使用特权

评论回复
5
thebran|  楼主 | 2014-7-8 11:05 | 只看该作者
刚刚试了一下,bsrr确实快了一些,但是还是离希望的25M有很大差距,现在是17M左右

使用特权

评论回复
6
airwill| | 2014-7-8 11:10 | 只看该作者
不知道 CPU 主频是多少, 如果 168Mhz 的 F4, 达到 25MHz, 3个周期翻转一次就行了. 应该能达到.
你的程序再优化一下吧,

使用特权

评论回复
7
thebran|  楼主 | 2014-7-8 11:23 | 只看该作者
airwill 发表于 2014-7-8 11:10
不知道 CPU 主频是多少, 如果 168Mhz 的 F4, 达到 25MHz, 3个周期翻转一次就行了. 应该能达到.
你的程序再 ...

根本就没什么优化的,就是主程序里while,IO高低变化,到现在也实现不了呢?

使用特权

评论回复
8
mmuuss586| | 2014-7-8 12:12 | 只看该作者

25M有点慢,你看看别人发的帖子;
我用429能翻转到90M;

使用特权

评论回复
9
香水城| | 2014-7-8 13:35 | 只看该作者
请参看 stm32f302 io性能测试 14楼

使用特权

评论回复
10
thebran|  楼主 | 2014-7-8 16:11 | 只看该作者
香水城 发表于 2014-7-8 13:35
请参看 stm32f302 io性能测试 14楼

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1|GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_11| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//GPIO_Speed_50MHz;//GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
我的端口也是挂在AHB上,但我的是M4核,问题还是翻转不到这么快呀

使用特权

评论回复
11
mmuuss586| | 2014-7-8 16:18 | 只看该作者
thebran 发表于 2014-7-8 16:11
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| G ...

:dizzy:
你的翻转程序咋写的

使用特权

评论回复
12
thebran|  楼主 | 2014-7-8 16:39 | 只看该作者
while(1)
        {
       GPIOC->BSRRH = GPIO_Pin_8;        
        GPIOC->BSRRL = GPIO_Pin_8        ;
        }

使用特权

评论回复
13
thebran|  楼主 | 2014-7-8 16:57 | 只看该作者
mmuuss586 发表于 2014-7-8 12:12
25M有点慢,你看看别人发的帖子;
我用429能翻转到90M;

严重怀疑你在吹牛X

使用特权

评论回复
14
airwill| | 2014-7-8 17:29 | 只看该作者
while(1)
        {
       GPIOC->BSRRH = GPIO_Pin_8;        
        GPIOC->BSRRL = GPIO_Pin_8       ;
        }
不觉得是吹牛, 你可以把编译器的优化设置得高一点. 如果是 Keil, 设置 2 以上.

使用特权

评论回复
15
mmuuss586| | 2014-7-8 18:21 | 只看该作者
thebran 发表于 2014-7-8 16:57
严重怀疑你在吹牛X


https://bbs.21ic.com/icview-686178-1-1.html
我很早以前发的帖子,看3楼;
如果你有板子可以测试下,也许我在吹牛吧;

使用特权

评论回复
16
huangqi412| | 2014-7-9 09:01 | 只看该作者
1 时钟树
2 反汇编窗
不先做这两个分析撸主开神马贴?
WHILE(1)估计拖了大后腿。

使用特权

评论回复
17
batsong| | 2014-7-9 10:07 | 只看该作者
每个while里面翻转100次试试

使用特权

评论回复
18
qjshenwen11| | 2014-7-9 14:15 | 只看该作者
用定时器out脚,pwm的OUT脚,SYSTEM的OUT脚等等 ,很容易实现的。

使用特权

评论回复
19
戈卫东| | 2014-7-9 16:08 | 只看该作者
转移指令占用了太多时间。。。。

使用特权

评论回复
20
yizhiic| | 2016-3-2 20:11 | 只看该作者
学习了, 好帖子

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

63

帖子

1

粉丝