[技术问答]

HC32f460 GPIO翻转速度

[复制链接]
2403|36
手机看帖
扫描二维码
随时随地手机跟帖
nokiaboy|  楼主 | 2023-8-15 13:49 | 显示全部楼层 |阅读模式
按照官方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以上的,不过用的是寄存器写法,没有调用库函数

使用特权

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

使用特权

评论回复
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

使用特权

评论回复
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;

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

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

使用特权

评论回复
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

使用特权

评论回复
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

使用特权

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

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

好的,谢谢你

使用特权

评论回复
nokiaboy|  楼主 | 2023-8-15 17:41 | 显示全部楼层

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

使用特权

评论回复
nokiaboy|  楼主 | 2023-8-15 17:42 | 显示全部楼层
fxyc87 发表于 2023-8-15 17:20
你这不是最快的,有专用的翻转寄存器,而不是SET,RESET

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

使用特权

评论回复
zhanghqi| | 2023-8-15 20:23 | 显示全部楼层
用新不用旧

使用特权

评论回复
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频率

使用特权

评论回复
nokiaboy|  楼主 | 2023-8-16 08:48 | 显示全部楼层
xch 发表于 2023-8-15 21:50
通用输出翻转寄存器(POTRx) ?
for(;;)
{

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

使用特权

评论回复
woai32lala| | 2023-8-17 14:29 | 显示全部楼层
学习

使用特权

评论回复
daichaodai| | 2023-8-18 08:26 | 显示全部楼层
要达到最快翻转速率,只能用库函数。

使用特权

评论回复
gygp| | 2023-9-7 09:47 | 显示全部楼层
GPIO翻转速度会受到多种因素影响

使用特权

评论回复
kmzuaz| | 2023-9-7 10:10 | 显示全部楼层
具体的翻转速度可能会受到其他硬件和软件环境的影响。

使用特权

评论回复
bartonalfred| | 2023-9-7 10:16 | 显示全部楼层
GPIO的工作模式越高,其翻转速度就越快。

使用特权

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

本版积分规则

6

主题

27

帖子

0

粉丝