补充一下,在社区中有人之前已经提过相关的话题了,参考:
https://esp32.com/viewtopic.php?t=27963。
根据我的了解,大致的思路主要有四个:
1. 类似题主,使用hal库来提高反转的速度。优点是,方便,配置内容少。缺点是,操作还是不够底层,速度上不去。
2. 直接操作寄存器。相关寄存器为:GPIO.out_w1tc GPIO.out_w1ts GPIO.out1_w1ts.val GPIO.out1_w1tc.val 。至于为什么是四个,和引脚的序号有关,前32个引脚使用GPIO.out_w1tc GPIO.out_w1ts,33-34使用GPIO.out1_w1ts.val GPIO.out1_w1tc.val,至于超过34引脚的,不太清楚有没有相关操作。
3.直接使用CPU调用,也就是cpu直接通过指令集操作io。需要使用#include "driver/dedic_gpio.h"库,并进行配置。这里的相关内容可以参考上述文章中大佬得回复。基本可以将io翻转时间降低到12ns(80MHZ主频下)。使用得相关配置可以参考官方示例中得软件i2c模拟示例代码。
4.如果是想要模拟时序和相关外设,使用rmt是不错得选择。我本来是打算作为步进电机驱动使用的,还在适配中,主要问题是步进电机的梯形加减法导致的脉冲周期是可变的。