打印
[技术问答]

HC32f460 GPIO翻转速度

[复制链接]
1126|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
按照官方hc32f460_ddl_Rev2.2.0例程配置的时钟,配置GPIO翻转,其速度只能到6Mhz左右。有没有哪位老师的配置能够使GPIO翻转速度达到10Mhz以上的呢?

使用特权

评论回复
沙发
yang377156216| | 2023-8-15 14:02 | 只看该作者
ddl 库都出 3.1.0 版本了,怎么还在使用旧版本呢?使用寄存器写翻转功能是最快的,别用库函数。

使用特权

评论回复
板凳
nokiaboy|  楼主 | 2023-8-15 14:11 | 只看该作者
yang377156216 发表于 2023-8-15 14:02
ddl 库都出 3.1.0 版本了,怎么还在使用旧版本呢?使用寄存器写翻转功能是最快的,别用库函数。 ...

翻转直接操作的寄存器

使用特权

评论回复
地板
wubangmi| | 2023-8-15 15:33 | 只看该作者
翻过20Mhz以上的,不过用的是寄存器写法,没有调用库函数

使用特权

评论回复
5
martinhu| | 2023-8-15 15:40 | 只看该作者
追求速度的,不要使用库,最好直接操作寄存器,看编译后汇编代码指令数,越少越好

使用特权

评论回复
6
nokiaboy|  楼主 | 2023-8-15 15:47 | 只看该作者
wubangmi 发表于 2023-8-15 15:33
翻过20Mhz以上的,不过用的是寄存器写法,没有调用库函数

        POx = (uint16_t *)((uint32_t)(&M4_PORT->PORRB) );
        *POx = (*POx) | Pin12;

            POx = (uint16_t *)((uint32_t)(&M4_PORT->POSRB) );
        *POx = (*POx) | Pin12;

翻到8.7M

使用特权

评论回复
7
zlf1208| | 2023-8-15 16:17 | 只看该作者
本帖最后由 zlf1208 于 2023-8-15 16:20 编辑
nokiaboy 发表于 2023-8-15 15:47
POx = (uint16_t *)((uint32_t)(&M4_PORT->PORRB) );
        *POx = (*POx) | Pin12;

把格式转换、求地址等操作都移到循环外面,频率就上去了。

编程不能仅讲究书写工整,要明白程序编译后是什么样的,什么样的格式是重复低效的。

使用特权

评论回复
8
wubangmi| | 2023-8-15 16:18 | 只看该作者
nokiaboy 发表于 2023-8-15 15:47
POx = (uint16_t *)((uint32_t)(&M4_PORT->PORRB) );
        *POx = (*POx) | Pin12;

如图

17.jpg (248.9 KB )

17.jpg

使用特权

评论回复
9
fxyc87| | 2023-8-15 17:20 | 只看该作者
nokiaboy 发表于 2023-8-15 15:47
POx = (uint16_t *)((uint32_t)(&M4_PORT->PORRB) );
        *POx = (*POx) | Pin12;

你这不是最快的,有专用的翻转寄存器,而不是SET,RESET

使用特权

评论回复
10
nokiaboy|  楼主 | 2023-8-15 17:38 | 只看该作者
zlf1208 发表于 2023-8-15 16:17
把格式转换、求地址等操作都移到循环外面,频率就上去了。

编程不能仅讲究书写工整,要明白程序编译后是 ...

好的,谢谢你

使用特权

评论回复
11
nokiaboy|  楼主 | 2023-8-15 17:41 | 只看该作者

谢谢你,如果我要同时写PB0-PB7呢?是不是应该操作SET和RESET寄存器

使用特权

评论回复
12
nokiaboy|  楼主 | 2023-8-15 17:42 | 只看该作者
fxyc87 发表于 2023-8-15 17:20
你这不是最快的,有专用的翻转寄存器,而不是SET,RESET

那个试过了,没有直接用SET和RESET快

使用特权

评论回复
13
zhanghqi| | 2023-8-15 20:23 | 只看该作者
用新不用旧

使用特权

评论回复
14
xch| | 2023-8-15 21:50 | 只看该作者
本帖最后由 xch 于 2023-8-15 22:09 编辑
nokiaboy 发表于 2023-8-15 17:42
那个试过了,没有直接用SET和RESET快

通用输出翻转寄存器(POTRx) ?
for(;;)
{
  CM_GPIO->POTRx = 1<<PIN_NUM;
}

照理说编译后,仅两条指令。就算4周期吧?速度200MHZ的M4 可以达到50mhz翻转,25MHZ频率

使用特权

评论回复
15
nokiaboy|  楼主 | 2023-8-16 08:48 | 只看该作者
xch 发表于 2023-8-15 21:50
通用输出翻转寄存器(POTRx) ?
for(;;)
{

嗯,差不多。但是操作IO口给8位并口LCD屏写数据就变慢了

使用特权

评论回复
16
woai32lala| | 2023-8-17 14:29 | 只看该作者
学习

使用特权

评论回复
17
daichaodai| | 2023-8-18 08:26 | 只看该作者
要达到最快翻转速率,只能用库函数。

使用特权

评论回复
18
gygp| | 2023-9-7 09:47 | 只看该作者
GPIO翻转速度会受到多种因素影响

使用特权

评论回复
19
kmzuaz| | 2023-9-7 10:10 | 只看该作者
具体的翻转速度可能会受到其他硬件和软件环境的影响。

使用特权

评论回复
20
bartonalfred| | 2023-9-7 10:16 | 只看该作者
GPIO的工作模式越高,其翻转速度就越快。

使用特权

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

本版积分规则

6

主题

27

帖子

0

粉丝