硬汉嵌入式论坛

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

[GPIO] 关于STM32H7软件IO翻转速率慢的问题?

[复制链接]

61

主题

62

回帖

245

积分

高级会员

积分
245
发表于 2020-7-10 14:21:21 | 显示全部楼层 |阅读模式
STM32H7的软件IO翻转只有16M/s,相对与STM32F7的108M差别太远了,后来我用FMC总线翻转(没用DMA)只有6M/s,RGB总线不会又没有测过,还有其它办法吗?我需求是并口总线进行高速翻转。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2020-7-10 15:12:55 | 显示全部楼层
H7的IO模拟输出就是慢,需要加大相应硬件上才可以。

STM32H7的FMC做纯软件IO输出控制可以输出40MHz方波
http://www.armbbs.cn/forum.php?m ... id=91282&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

61

主题

62

回帖

245

积分

高级会员

积分
245
 楼主| 发表于 2020-7-10 15:56:37 | 显示全部楼层
eric2013 发表于 2020-7-10 15:12
H7的IO模拟输出就是慢,需要加大相应硬件上才可以。

STM32H7的FMC做纯软件IO输出控制可以输出40MHz方波
...

太感谢了! 如果我有32个IO口,同样是FMC,如果我用SDRAM 32个IO都能达到40MHz方波吧??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2020-7-10 16:09:53 | 显示全部楼层
vzhaodan 发表于 2020-7-10 15:56
太感谢了! 如果我有32个IO口,同样是FMC,如果我用SDRAM 32个IO都能达到40MHz方波吧??

这个可以有。
回复

使用道具 举报

61

主题

62

回帖

245

积分

高级会员

积分
245
 楼主| 发表于 2020-7-17 18:09:41 | 显示全部楼层

如果通过DMA+GPIOE 这种,DMA设置循环模式,翻转速度有多少?应该比FMC的IO速率要高吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2020-7-17 18:56:16 | 显示全部楼层
vzhaodan 发表于 2020-7-17 18:09
如果通过DMA+GPIOE 这种,DMA设置循环模式,翻转速度有多少?应该比FMC的IO速率要高吧

指导你这么多天了,教程看了没。。。

教程里面有案例,可以自己测试下。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980&extra=page%3D1

QQ截图20200717185659.jpg
回复

使用道具 举报

3

主题

40

回帖

49

积分

初级会员

积分
49
发表于 2020-7-28 21:09:34 | 显示全部楼层
eric2013 发表于 2020-7-10 15:12
H7的IO模拟输出就是慢,需要加大相应硬件上才可以。

STM32H7的FMC做纯软件IO输出控制可以输出40MHz方波
...

你好,这个程序我复现了一下,发现只能输出12.05MHZ的方波,程序也是和你的一模一样,系统时钟是480MHZ
回复

使用道具 举报

3

主题

40

回帖

49

积分

初级会员

积分
49
发表于 2020-7-28 21:10:30 | 显示全部楼层
eric2013 发表于 2020-7-10 15:12
H7的IO模拟输出就是慢,需要加大相应硬件上才可以。

STM32H7的FMC做纯软件IO输出控制可以输出40MHz方波
...

hsram1.Instance = FMC_NORSRAM_DEVICE;
  hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram1.Init */
  hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
  hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
  hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_32;
  hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  hsram1.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
  hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
  /* Timing */
  Timing.AddressSetupTime = 0;
  Timing.AddressHoldTime = 1;
  Timing.DataSetupTime = 1;
  Timing.BusTurnAroundDuration = 0;
  Timing.CLKDivision = 2;
  Timing.DataLatency = 0;
  Timing.AccessMode = FMC_ACCESS_MODE_A;
  /* ExtTiming */

  if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
  {
    Error_Handler( );
  }


while (1)
  {
//                HAL_SRAM_Write_16b(&hsram1,(uint32_t *)buffer1,test,2);
               *p = 0xFFFFFFFF;
                        *p = 0x00000000;
          /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2020-7-28 21:51:14 | 显示全部楼层
HuSanKeke 发表于 2020-7-28 21:10
hsram1.Instance = FMC_NORSRAM_DEVICE;
  hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  /* hsra ...

不清楚你这个怎么回事,你自己查查吧。
回复

使用道具 举报

3

主题

40

回帖

49

积分

初级会员

积分
49
发表于 2020-7-28 21:57:35 | 显示全部楼层
eric2013 发表于 2020-7-28 21:51
不清楚你这个怎么回事,你自己查查吧。

好的,谢谢,这个是不是和没有接外部的sram芯片导致的,我只有一个H750主芯片,没有外接内存芯片
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2020-7-28 22:02:26 | 显示全部楼层
HuSanKeke 发表于 2020-7-28 21:57
好的,谢谢,这个是不是和没有接外部的sram芯片导致的,我只有一个H750主芯片,没有外接内存芯片

没关系,我就是裸测的。
回复

使用道具 举报

61

主题

62

回帖

245

积分

高级会员

积分
245
 楼主| 发表于 2020-11-25 02:41:51 | 显示全部楼层
如果使用tim触发gpio输出翻转信号,tim分频与周期都设置最小值,gpio翻转速率能达到100MHz以上吗?
stm32h7用软件驱动io速率太慢了,如果不行只能等双核H7中的M4实现了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2020-11-25 09:42:46 | 显示全部楼层
vzhaodan 发表于 2020-11-25 02:41
如果使用tim触发gpio输出翻转信号,tim分频与周期都设置最小值,gpio翻转速率能达到100MHz以上吗?
stm32h ...

STM32H7的定时器输出100MHz的PWM效果
http://www.armbbs.cn/forum.php?m ... 6434&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 04:05 , Processed in 0.215428 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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