打印
[STM32F3]

运行比预期慢

[复制链接]
1551|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxrs|  楼主 | 2022-8-10 20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8MHZ内部晶振,配置时钟64MHZ(SPI 8分频,SPI_CLK频率7.58MHZ,说明64MHZ是正确的),程序中while(1){不延时,引脚电平翻转},引脚为高速模式(最大可以到50MHZ),但是引脚实际翻转频率只有4MHZ
PA8输出系统时钟,示波器测定为62.5MHZ
HAL_RCC_MCOConfig(RCC_MCO1,RCC_MCO1SOURCE_SYSCLK,RCC_MCODIV_1);
但是
while(1)
{
SPILCD_CS_SET;
SPILCD_CS_RESET;
}输出50%占空比方波,测定高电平296ns----3.38MHZ
什么原因导致程序运行时钟不等于系统时钟?

使用特权

评论回复
沙发
xxrs|  楼主 | 2022-8-10 20:53 | 只看该作者
请问stm32f373,一个IO指令需要多少个机器周期?

使用特权

评论回复
板凳
xxrs|  楼主 | 2022-8-10 20:55 | 只看该作者
你理解错了。IO翻转本身速率有限

使用特权

评论回复
地板
jiajs| | 2022-8-10 20:57 | 只看该作者
大脑转得飞快
嘴巴不利索,不是说相声的!

使用特权

评论回复
5
jlyuan| | 2022-8-10 20:59 | 只看该作者
PIN脚设为高速模式,IO翻转不是最大能达到50MHZ吗?

使用特权

评论回复
6
zhenykun| | 2022-8-10 21:03 | 只看该作者
但我还是有些不太懂,虽然大于30MHZ输出波形波形就不是干净的方波了,因为PA8能输出62.5MHZ

使用特权

评论回复
7
stly| | 2022-8-10 21:05 | 只看该作者
你如果想通过GPIO翻转实现电平翻转并希望尽量快的话,不要调用函数,直接操作ODR寄存器,

使用特权

评论回复
8
juventus9554| | 2022-8-10 21:07 | 只看该作者
另外while里多写几行,以尽量平均掉while跳转所花的时间。

使用特权

评论回复
9
jiajs| | 2022-8-10 21:17 | 只看该作者
当然,GPIO实际翻转速率和GPIO的输出能力并不能打等号,就像马达的额定转速和实际转速往往并非相等。

使用特权

评论回复
10
chenjunt| | 2022-8-10 21:19 | 只看该作者
一个可支持的能力,一个实际输出实现。

使用特权

评论回复
11
xxrs|  楼主 | 2022-8-10 21:21 | 只看该作者
那SPI采用2分频,CLK是能输出30MHZ的波形的,说明IO的速度应该能跟上吧?

使用特权

评论回复
12
xxrs|  楼主 | 2022-8-10 21:23 | 只看该作者

但是不知道主程序中输出频率为什么就降低了

使用特权

评论回复
13
yszong| | 2022-8-10 21:24 | 只看该作者
你有什么打算呢?或者你想知道什么?

使用特权

评论回复
14
xxrs|  楼主 | 2022-8-10 21:27 | 只看该作者
我想做TFT彩屏的,现在刷新频率很低,刷新1帧差不多要0.5s,我是移植stm32F030的程序,时钟没变,但是刷新1副图片就变慢了

使用特权

评论回复
15
renyaq| | 2022-8-10 21:31 | 只看该作者
执行 while(1) 也是需要时间的,要跳转。
里面多放一些:
  SPILCD_CS_SET;
  SPILCD_CS_RESET;
这样大概能够测得 60ns 的周期,合着也就是 16MHz 多点。

使用特权

评论回复
16
xxrs|  楼主 | 2022-8-10 21:33 | 只看该作者
谢谢回复,虽然我也希望是这样,但是,我在循环中加20多条翻转指令(引脚配置为高速输出模式),观察波形,频率变化不大,基本上还是4MHZ,PLL时钟应该是配置正确的,(SPI4分频后CLK引脚有16MHZ波形),但是程序运行感觉像HSI/2=4MHZ ,

使用特权

评论回复
17
xxrs|  楼主 | 2022-8-10 21:36 | 只看该作者
有测到过16MHZ波形吗?我不知道我的配置是否存在其他问题

使用特权

评论回复
18
ousj| | 2022-8-10 21:38 | 只看该作者

昨天晚上顺手测了一下。
寄存器直接赋值的操作。

使用特权

评论回复
19
xxrs|  楼主 | 2022-8-10 21:40 | 只看该作者
多谢提醒,寄存器操作确实能达到18.5MHZ的波形,看来stm32库操作IO确实会牺牲很多速率,用寄存器操作能提高4倍以上的速率,函数调用可能牺牲了大部分时钟

使用特权

评论回复
20
xxrs|  楼主 | 2022-8-10 21:42 | 只看该作者
彩屏更新速度低的问题算是解决了(通过修改库函数,删除多余的报错和超时,和一堆乱七八糟的指令,刷新频率提高了,画面稍稍流畅了一些,虽然解决方法有点歪门邪道的感觉),库函数效率确实有点低,不太适合高速的场合

使用特权

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

本版积分规则

405

主题

7415

帖子

1

粉丝