在看雅特力的公众号的时候,偶然看到雅特力的AT32F437支持Fast GPIO,即最高翻转率可以达到120MHz。但是我在开发板上实测怎么没有达到呢? 我先是自己写了LED灯的翻转代码,来大家观测一下!代码如下: - /**
- * @brief: LED0 => PD13; LED1 => PD14; LED2 => PD15;
- *
- * @param:
- * @return:
- * @note:
- */
- static void led_init(void)
- {
- gpio_init_type gpio_init_struct;
- /* enable the gpioa clock */
- crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
- gpio_bits_set(GPIOD, LED0_PIN | LED1_PIN | LED2_PIN);
- /* set default parameter */
- gpio_default_para_init(&gpio_init_struct);
- /* configure the gpio */
- gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
- gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
- gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
- gpio_init_struct.gpio_pins = LED0_PIN | LED1_PIN | LED2_PIN;
- gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
- gpio_init(GPIOD, &gpio_init_struct);
- }
- void led_toggle(uint32_t pin)
- {
- GPIOD->odt ^= pin;
- }
这样写的代码在运行时的LED灯的翻转率仅有6MHz左右。如下图所示:
这个与手册上标注的差别较大。考虑到可能是代码的问题,于是我又直接运行了示例里面的io_toggle的Keil工程。IO的翻转率大幅上升,达到了19MHz,但也与手册上的120MHz差距甚远。如下图所示:
版主,我这是哪里配置的有问题?
|