请教一个 STM32H7 IO 翻转速度的问题

2019-12-12 18:15发布

如题,由于案子需要用到高速的IO通信,还是特殊协议的那种,担心STM32F1和STM32F4 端口速度以及数据处理速度跟不上,就买了个STM32H7 的开发板,想试一下看看H7 的 IO 翻转速度有多快。
但结果有点出乎意料,用正点原子的例程,STM32H7 主频设置到400MHz,主循环里面就下面这样:
  while(1)
         {
         GPIOB->ODR = 1;
        GPIOB->ODR = 0;
         }
IO 口示波器实测速度才 16.7MHz 左右;

然后,为了避免其他因素的干扰,我又尝试,直接把 HSI 8分频,也就是64MHz/8 = 8MHz 作为系统时钟,各路总线都不再分频,跑起来,IO 的翻转速度才670KHz 左右;
相对于 400MHz 的时候,HCLK 是系统时钟 二分频了的,也就是说总线时钟 200MHz,200MHz/8MHz * 670KHz = 16.75MHz,这个和之前的测试结果基本吻合。

网上一查,发现也有人和我遇到同样的问题,或者说是现象,但却没有寻找到有效的提高 IO 翻转速度的方法。
那么问题来了,STM32H7 这样的 IO 翻转速度表现,甚至远低于 STM23F4 的水准,这显然应该是不可能的,这里面肯定有哪里没有配置正确吧,我猜;
但是我用自己贫瘠的英语水平以及比较low的专业能力,翻看了好几天参考手册并尝试修改各种时钟配置,一直没有解决,不知道坛子里有没有遇到同样问题的人,或者有大神给指点迷津。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
64条回答
tianheyun12
2019-12-19 22:27
我也测了一下F7可达100M翻转,谁个解释下   
49:         {
0x080016A8 4805      LDR           r0,[pc,#20]  ; @0x080016C0
0x080016AA 4669      MOV           r1,sp
0x080016AC F7FEFE8E  BL.W          HAL_GPIO_Init (0x080003CC)
    50:                 GPIOC->BSRR = 0x00000008U;
0x080016B0 4803      LDR           r0,[pc,#12]  ; @0x080016C0
0x080016B2 3018      ADDS          r0,r0,#0x18
    51:                 GPIOC->BSRR = 0x00080000U;
0x080016B4 0421      LSLS          r1,r4,#16
0x080016B6 6004      STR           r4,[r0,#0x00]
0x080016B8 6001      STR           r1,[r0,#0x00]
    48:         while (1)
0x080016BA E7FC      B             0x080016B6
0x080016BC 3830      DCW           0x3830
0x080016BE 4002      DCW           0x4002
0x080016C0 0800      DCW           0x0800
0x080016C2 4002      DCW           0x4002
0x080016C4 F04F7040  MOV           r0,#0x3000000
0x080016C8 EEE10A10  VMSR           FPSCR, r0
0x080016CC 4770      BX            lr
0x080016CE 0000      DCW           0x0000

一周热门 更多>