硬汉嵌入式论坛

 找回密码
 立即注册
查看: 10907|回复: 44
收起左侧

[NUCLEO-H743ZI] 【STM32H743实验例程】实验3:STM32H743最大IO速度测试,可达50MHz-133MHz,还是比较给力的

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
发表于 2018-4-3 02:15:48 | 显示全部楼层 |阅读模式
实验介绍
开发平台:官方STM32H743 NUCLEO板子
开发环境:MDK5.25正式版
软件版本:
(1)CMSIS软件包 V5.3.0
(2)H7的HAL库版本 V1.2.0
例程下载:
实验3:STM32H743最大IO速度测试.7z (1.07 MB, 下载次数: 325)

根据官方说明,最大IO速度是133MHz。
QQ截图20180403021008.png

实际测试Flash开启指令Cache或者将代码放在ITCM里面,速度是50MHz,跟133MHz还有点差距。不过仔细分析下,运行下面的IO翻转代码,主要是while循环里面的
  1. int main(void)
  2. {
  3.         GPIO_InitTypeDef  GPIO_InitStruct;
  4.         
  5.         bsp_Init(); /* 外设初始化 */

  6.         /* 使用PC9做高速IO测试 */
  7.          __HAL_RCC_GPIOC_CLK_ENABLE();
  8.         GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;                   /* 设置推挽输出 */
  9.         GPIO_InitStruct.Pull = GPIO_NOPULL;                 /* 上下拉电阻不使能 */
  10.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;  /* 最高GPIO速度等级 */

  11.         GPIO_InitStruct.Pin = GPIO_PIN_9;
  12.         HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  13.         
  14.         while (1)
  15.         {
  16.                 GPIOC->BSRRH = GPIO_PIN_9;
  17.                 GPIOC->BSRRL = GPIO_PIN_9;
  18.         }
  19. }
复制代码
程序在不断的刷下面三行代码,两个STRH就按4个时钟周期,一个指令B按1个指令周期,那么就是5个指令周期,5个指令周期仅可以完成一次翻转,那么一个完整的IO周期就是10个,这样最大的速度就是40MHz,当前跑到50MHz,已经相当给力。
QQ截图20180403021843.png

后面研究下如何可以跑到100MHz,当前已经开启最高等级优化和时间优化。
QQ截图20180403022135.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-3 02:25:35 | 显示全部楼层
示波器测试效果如下:

QQ截图20180403023309.png
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
发表于 2018-4-3 09:07:06 | 显示全部楼层
弄到100速度没有啊,硬汉哥
回复

使用道具 举报

9

主题

160

回帖

187

积分

初级会员

积分
187
发表于 2018-4-3 09:34:36 | 显示全部楼层
老大,现在放弃RT1050,开始搞STM32H743了么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-3 10:29:58 | 显示全部楼层
avita 发表于 2018-4-3 09:34
老大,现在放弃RT1050,开始搞STM32H743了么?

暂行先放放,RT的形式有点乱,让其他人搞起。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-3 10:33:30 | 显示全部楼层
ou513 发表于 2018-4-3 09:07
弄到100速度没有啊,硬汉哥

通过程序触发反转有点难度了,因为要限制反转程序仅需要2个时钟周期。后面看看硬件方式吧。

像使用他们的FMC驱动SDRAM这些都是没问题的,因为是硬件方式,可以方便的搞到100MHz以上。
回复

使用道具 举报

4

主题

531

回帖

543

积分

金牌会员

积分
543
发表于 2018-4-4 11:39:48 | 显示全部楼层
汉哥,可以把程序放到SRAM里面测试一下,应该能更快一些
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-4 11:40:41 | 显示全部楼层
qiousanxi 发表于 2018-4-4 11:39
汉哥,可以把程序放到SRAM里面测试一下,应该能更快一些

已经测试了,放在了ITCM里面,400MHz的速度。
回复

使用道具 举报

4

主题

531

回帖

543

积分

金牌会员

积分
543
发表于 2018-4-4 12:00:40 | 显示全部楼层
eric2013 发表于 2018-4-4 11:40
已经测试了,放在了ITCM里面,400MHz的速度。

跟随硬汉大佬,
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2018-4-5 10:41:14 | 显示全部楼层
能做到100MHz就爽了,我的100MHz AD就可以挂上了。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
发表于 2018-4-5 10:51:52 | 显示全部楼层
STM32H7可以超频到500到540MHz
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2018-4-5 11:03:37 | 显示全部楼层
byccc 发表于 2018-4-5 10:41
能做到100MHz就爽了,我的100MHz AD就可以挂上了。

挂AD,采样时钟的同步性能做到吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-5 11:05:47 | 显示全部楼层
ccc1122 发表于 2018-4-5 11:03
挂AD,采样时钟的同步性能做到吗?

FMC总线DMA,可以试试
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-5 11:06:34 | 显示全部楼层
liwangkm 发表于 2018-4-5 10:51
STM32H7可以超频到500到540MHz

超频性能有提升不,回头我也试试
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-5 11:06:51 | 显示全部楼层
byccc 发表于 2018-4-5 10:41
能做到100MHz就爽了,我的100MHz AD就可以挂上了。

你用的那个型号
回复

使用道具 举报

1

主题

14

回帖

17

积分

新手上路

积分
17
发表于 2018-4-5 11:11:22 | 显示全部楼层
eric2013 发表于 2018-4-5 11:06
超频性能有提升不,回头我也试试

解码APE可以到Extra High级24bit的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-5 11:17:00 | 显示全部楼层
liwangkm 发表于 2018-4-5 11:11
解码APE可以到Extra High级24bit的



666
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2018-4-5 11:21:22 | 显示全部楼层
eric2013 发表于 2018-4-5 11:05
FMC总线DMA,可以试试

F4的FMC+DMA试过,同步不好。以开启DMA的信号做同步,时间越长,FMC的CLK信号前后晃动幅度越明显。
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2018-4-5 15:19:09 | 显示全部楼层
eric2013 发表于 2018-4-5 11:06
你用的那个型号

私信你了。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

4

主题

52

回帖

64

积分

初级会员

积分
64
发表于 2018-4-5 22:35:54 | 显示全部楼层
主函数连续写10个
GPIOC->BSRRH = GPIO_PIN_9;
GPIOC->BSRRL = GPIO_PIN_9;
这样测量翻转的周期,频率将会大大的提高,之前试过其他STM32系列,软件翻转IO可以达到CPU时钟的1/4,也就是两个CPU时钟一个指令
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-6 15:34:14 | 显示全部楼层
cortex 发表于 2018-4-5 22:35
主函数连续写10个
GPIOC->BSRRH = GPIO_PIN_9;
GPIOC->BSRRL = GPIO_PIN_9;

谢谢,应该已经开启了Cache,实际上增加已经没有效果了。
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-4-13 14:16:59 | 显示全部楼层
用楼主的代码测试了下,没有50M
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-4-13 14:18:43 | 显示全部楼层
哪里的问题 微信图片_20180413141333.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-13 14:23:57 | 显示全部楼层

直接将示波器探头接到相应引脚上。使用我的这个程序。
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-4-13 22:55:50 | 显示全部楼层
eric2013 发表于 2018-4-13 14:23
直接将示波器探头接到相应引脚上。使用我的这个程序。

就是直接用的你的这个程序,测的相应引脚的信号。使用的是NUCLEO-H743ZI。你的芯片是哪个版本
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-14 01:56:34 | 显示全部楼层
HFLY 发表于 2018-4-13 22:55
就是直接用的你的这个程序,测的相应引脚的信号。使用的是NUCLEO-H743ZI。你的芯片是哪个版本

我的是Y版的,现在面向市场的应该只有这个版本。

我这里测试不开Cache也有30MHz以上。
回复

使用道具 举报

8

主题

133

回帖

167

积分

初级会员

积分
167
发表于 2018-4-14 13:33:50 | 显示全部楼层
我试过F7 可以弄到109M

测试设备: DS1074 10X输入
测试芯片:STM32F767ZGT6
测试程序:cubeMX生成的框架   

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);

  /*Configure GPIO pin : PD15 */
  GPIO_InitStruct.Pin = GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

}
  while (1)
  {
        GPIOD->BSRR = 0x80000000;
        GPIOD->BSRR = GPIO_PIN_15;
  }
214007o7mn3hjcgfmnmx8u.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-14 13:41:52 | 显示全部楼层
litin326 发表于 2018-4-14 13:33
我试过F7 可以弄到109M

测试设备: DS1074 10X输入

我认为纯程序刷做不到这么高,因为函数
GPIOD->BSRR = 0x80000000;
GPIOD->BSRR = GPIO_PIN_15;
的指令周期在哪里摆着。像FMC那种硬件时钟刷,可以的。
回复

使用道具 举报

8

主题

133

回帖

167

积分

初级会员

积分
167
发表于 2018-4-16 20:43:16 | 显示全部楼层
本帖最后由 litin326 于 2018-4-16 20:46 编辑
eric2013 发表于 2018-4-14 13:41
我认为纯程序刷做不到这么高,因为函数
GPIOD->BSRR = 0x80000000;
GPIOD->BSRR = GPIO_PIN_15;

应该是编译器优化过了。之前也试了,把编译器的优化关掉后速度掉了不少。顺道说句,期盼您弄得H7开发板哦。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-4-17 10:04:25 | 显示全部楼层
litin326 发表于 2018-4-16 20:43
应该是编译器优化过了。之前也试了,把编译器的优化关掉后速度掉了不少。顺道说句,期盼您弄得H7开发板哦 ...



我觉得他的这个测试是有问题的,因为两个函数的所需要两个STRH和B指令的周期在那里摆着,即使再优化,指令周期是不能缩短的。

我的测试将程序直接放在DTCM里面,开启最高优化,也是这样的。还有各种Cache方式也都测试了。
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-10-13 22:58:10 | 显示全部楼层
新买了款STM32H743开发板最大IO速度还是只有16.7M。STM32F7实测108M。哪位有开发板的帮忙测试下吗,谢谢了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-10-14 00:17:10 | 显示全部楼层
HFLY 发表于 2018-10-13 22:58
新买了款STM32H743开发板最大IO速度还是只有16.7M。STM32F7实测108M。哪位有开发板的帮忙测试下吗,谢谢了 ...

网上传的108MHz,我个人认为是有误,两个反转语句的汇编指令都需要10几个时钟周期。再怎么跑也到不了100MHz。

而硬件翻转就不同了,直接硬件执行,比如我此贴测试的PWM,100MHz。

http://www.armbbs.cn/forum.php?mod=viewthread&tid=86434
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-10-14 00:28:11 | 显示全部楼层
eric2013 发表于 2018-10-14 00:17
网上传的108MHz,我个人认为是有误,两个反转语句的汇编指令都需要10几个时钟周期。再怎么跑也到不了100M ...

Cortex-M7具有分支预测和双指令执行的六级超标量流水线。不是网上传的,是在F7开发板上实际测试的。而H7只有16.7M
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-10-14 00:59:49 | 显示全部楼层
HFLY 发表于 2018-10-14 00:28
Cortex-M7具有分支预测和双指令执行的六级超标量流水线。不是网上传的,是在F7开发板上实际测试的。而H7 ...

首先我之前的硬件验证已经确保是没问题的,GPIO跑个100MHz是没问题的。

然后六级指令流水线,再怎么流水线也不可能把5条指令合并成2个时钟周期完成,你用F7就相当于2个时钟周期就跑完了。

QQ截图20181014005828.png
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-10-14 16:59:50 | 显示全部楼层
0x2000015A 6004      STR           r4,[r0,#0x00]
0x2000015C 6005      STR           r5,[r0,#0x00]
0x2000015E E7FC      B             0x2000015A
我的测试代码是这样的


回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-10-14 17:02:46 | 显示全部楼层
eric2013 发表于 2018-10-14 00:59
首先我之前的硬件验证已经确保是没问题的,GPIO跑个100MHz是没问题的。

然后六级指令流水线,再怎么流 ...

方便把您测试的板子拍个照吗。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106666
QQ
 楼主| 发表于 2018-10-14 17:23:59 | 显示全部楼层
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-10-15 11:00:31 | 显示全部楼层
eric2013 发表于 2018-10-14 17:23
http://www.armbbs.cn/forum.php?mod=viewthread&tid=85889&extra=page%3D1%26filter%3Dtypeid%26type ...

板子是一样的。
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2018-10-15 18:25:56 | 显示全部楼层
同一个型号的板子,用的楼主的程序,确认我这测试没有问题。难道是芯片不同?
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2018-11-5 22:37:58 | 显示全部楼层
硬汉哥,qspi的最大时钟频率可以到133M,这里主要受限于IO口的反转速度吗?还是有其他方面的约束,sram同步模式下为啥也是133M?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 08:11 , Processed in 0.338684 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表