[AT32F437] GPIO Toggle率怎么上不去

[复制链接]
2009|5
海洋凝视 发表于 2025-9-21 09:57 | 显示全部楼层 |阅读模式
, LED, ,
在看雅特力的公众号的时候,偶然看到雅特力的AT32F437支持Fast GPIO,即最高翻转率可以达到120MHz。但是我在开发板上实测怎么没有达到呢?
我先是自己写了LED灯的翻转代码,来大家观测一下!代码如下:
  1. /**
  2. * @brief:  LED0 => PD13; LED1 => PD14; LED2 => PD15;
  3. *
  4. * @param:
  5. * @return:
  6. * @note:
  7. */
  8. static void led_init(void)
  9. {
  10.   gpio_init_type gpio_init_struct;

  11.   /* enable the gpioa clock */
  12.   crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);

  13.   gpio_bits_set(GPIOD, LED0_PIN | LED1_PIN | LED2_PIN);

  14.   /* set default parameter */
  15.   gpio_default_para_init(&gpio_init_struct);

  16.   /* configure the gpio */
  17.   gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  18.   gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
  19.   gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  20.   gpio_init_struct.gpio_pins = LED0_PIN | LED1_PIN | LED2_PIN;
  21.   gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  22.   gpio_init(GPIOD, &gpio_init_struct);
  23. }

  24. void led_toggle(uint32_t pin)
  25. {
  26.   GPIOD->odt ^= pin;
  27. }
这样写的代码在运行时的LED灯的翻转率仅有6MHz左右。如下图所示:
GPIO翻转率01.jpg

这个与手册上标注的差别较大。考虑到可能是代码的问题,于是我又直接运行了示例里面的io_toggle的Keil工程。IO的翻转率大幅上升,达到了19MHz,但也与手册上的120MHz差距甚远。如下图所示:


GPIO翻转率02.jpg


版主,我这是哪里配置的有问题?




muyichuan2012 发表于 2025-9-22 10:05 | 显示全部楼层
把优化等级开到最高,然后参考这个案例
AT32F435_437_Firmware_Library/project/at_start_f435/examples/gpio/io_toggle
 楼主| 海洋凝视 发表于 2025-9-22 11:06 | 显示全部楼层
muyichuan2012 发表于 2025-9-22 10:05
把优化等级开到最高,然后参考这个案例
AT32F435_437_Firmware_Library/project/at_start_f435/examples/gp ...

做对比测试时,跑得就是这个示例。
不过,优化等级我使用的是 -O1

我晚上再尝试一下
muyichuan2012 发表于 2025-9-22 16:56 | 显示全部楼层
要用O3优化。
另外我看你示波器是100MHz的,也采集不到120MHz 的io toggle啊。

 楼主| 海洋凝视 发表于 2025-10-13 17:18 | 显示全部楼层
muyichuan2012 发表于 2025-9-22 16:56
要用O3优化。
另外我看你示波器是100MHz的,也采集不到120MHz 的io toggle啊。

我对比处理一下。
先谢谢版主
小小蚂蚁举千斤 发表于 2025-10-16 16:36 | 显示全部楼层
楼主实际采集到了嘛?低电平不是0V是为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

29

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部