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

[复制链接]
 楼主| 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 会更快.

那肯定的,好像能快很多
 楼主| thebran 发表于 2014-7-8 11:05 | 显示全部楼层
刚刚试了一下,bsrr确实快了一些,但是还是离希望的25M有很大差距,现在是17M左右
airwill 发表于 2014-7-8 11:10 | 显示全部楼层
不知道 CPU 主频是多少, 如果 168Mhz 的 F4, 达到 25MHz, 3个周期翻转一次就行了. 应该能达到.
你的程序再优化一下吧,
 楼主| thebran 发表于 2014-7-8 11:23 | 显示全部楼层
airwill 发表于 2014-7-8 11:10
不知道 CPU 主频是多少, 如果 168Mhz 的 F4, 达到 25MHz, 3个周期翻转一次就行了. 应该能达到.
你的程序再 ...

根本就没什么优化的,就是主程序里while,IO高低变化,到现在也实现不了呢?
mmuuss586 发表于 2014-7-8 12:12 | 显示全部楼层

25M有点慢,你看看别人发的帖子;
我用429能翻转到90M;
香水城 发表于 2014-7-8 13:35 | 显示全部楼层
 楼主| 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核,问题还是翻转不到这么快呀
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:
你的翻转程序咋写的
 楼主| thebran 发表于 2014-7-8 16:39 | 显示全部楼层
while(1)
        {
       GPIOC->BSRRH = GPIO_Pin_8;        
        GPIOC->BSRRL = GPIO_Pin_8        ;
        }
 楼主| thebran 发表于 2014-7-8 16:57 | 显示全部楼层
mmuuss586 发表于 2014-7-8 12:12
25M有点慢,你看看别人发的帖子;
我用429能翻转到90M;

严重怀疑你在吹牛X
airwill 发表于 2014-7-8 17:29 | 显示全部楼层
while(1)
        {
       GPIOC->BSRRH = GPIO_Pin_8;        
        GPIOC->BSRRL = GPIO_Pin_8       ;
        }
不觉得是吹牛, 你可以把编译器的优化设置得高一点. 如果是 Keil, 设置 2 以上.
mmuuss586 发表于 2014-7-8 18:21 | 显示全部楼层
thebran 发表于 2014-7-8 16:57
严重怀疑你在吹牛X


https://bbs.21ic.com/icview-686178-1-1.html
我很早以前发的帖子,看3楼;
如果你有板子可以测试下,也许我在吹牛吧;
huangqi412 发表于 2014-7-9 09:01 | 显示全部楼层
1 时钟树
2 反汇编窗
不先做这两个分析撸主开神马贴?
WHILE(1)估计拖了大后腿。
batsong 发表于 2014-7-9 10:07 | 显示全部楼层
每个while里面翻转100次试试
qjshenwen11 发表于 2014-7-9 14:15 | 显示全部楼层
用定时器out脚,pwm的OUT脚,SYSTEM的OUT脚等等 ,很容易实现的。
戈卫东 发表于 2014-7-9 16:08 | 显示全部楼层
转移指令占用了太多时间。。。。
yizhiic 发表于 2016-3-2 20:11 | 显示全部楼层
学习了, 好帖子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

63

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部