打印
[STM32F0]

GPIO 模拟输出方波频率不到1M

[复制链接]
2972|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
usbyt|  楼主 | 2015-7-20 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠,有人试过使用GPIO模拟输出方波的频率最大可以支持到多少吗,我这边测试最快不超过1M,
代码如下,
for(i=0;i<LED_MAX_COL;i++)
        {
                if(TempBuf&0x800000)
                {
                 //GPIO_SetBits(GPIOA, GPIO_Pin_12);
                         GPIOA->BRR |= GPIO_Pin_12;
                }
                else
                {
                        //GPIO_ResetBits(GPIOA, GPIO_Pin_12);
                        GPIOA->BSRR |= GPIO_Pin_12;
                }
                TempBuf<<=1;
        }


有人测试过吗?
沙发
usbyt|  楼主 | 2015-7-20 15:40 | 只看该作者
型号 STM32F030,外部时钟8M,PLL到48M

使用特权

评论回复
板凳
Leeone| | 2015-7-20 15:44 | 只看该作者
时钟配置的是多少,循环里面GPIOA->BRR |= GPIO_Pin_12;只能执行一次????

使用特权

评论回复
地板
usbyt|  楼主 | 2015-7-20 15:53 | 只看该作者
GPIO速率配置为,FastSpeed, 根据TempBuf     bit23 决定输出0还是1

使用特权

评论回复
5
desertsailor| | 2015-7-20 21:09 | 只看该作者
本帖最后由 desertsailor 于 2015-7-20 21:10 编辑

我试过翻转速率最快可以到12M,首先你用的是库函数,效率本身就会下降,此外在你的程序还有循环及判断要消耗一些时间,你可以在调试窗口里看看相应的汇编代码就明白了。

使用特权

评论回复
6
seawwh| | 2015-7-20 21:48 | 只看该作者
如果仅仅想输出最快的方波则可以用如下的办法:

  while (1)
   GPIOB->ODR ^=0x1000;

使用特权

评论回复
7
zhangrui2004| | 2015-7-21 10:30 | 只看该作者
即使只操作寄存器,通过反汇编观察,也可能看到执行了多条语句
可以调整编译器的优化等级,调整到最高试一试

使用特权

评论回复
8
usbyt|  楼主 | 2015-7-21 20:52 | 只看该作者
看了下汇编,关键是数据的处理很罗嗦,间接访址占用了很多时间,
优化在哪里设置?

使用特权

评论回复
9
syw467643| | 2015-7-22 12:00 | 只看该作者

STM32F030K6T6 STM32F030F4P6 STM32F030C8T6 STM030R8T6  STM8&STM32正规代理商
有技术问题或者芯片需求都可以联系我QQ1450203232  18665827861

使用特权

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

本版积分规则

9

主题

81

帖子

0

粉丝