ESP8266和MPU6050使用外部中断

ESP8266中断程序需要ICACHE_RAM_ATTR来修饰

使用加速度传感器MPU6050,真正的三轴加速度陀螺仪传感器。我的实验电路是ESP8266,传感器模块选择了MPU6050。采用Arduino IDE编程,因为有大量的库可以选择,在IDE中管理库,然后查找MPU6050,找到库,添加,不到1分钟下载完毕,按照说明书接线:
在这里插入图片描述
ESP8266的接线:
SDA - GPIO4
SCL - GPIO5
INIT - GPIO15
连接完成后下载示例程序,出现问题:
ISR not in IRAM
上网查找,很快找到了解决问题的办法,但不知道为啥会出现。上网查esp8266中断说明:看到下面的说明:
调用的中断程序需要在RAM中执行。因为flash程序可能在其他程序之间。要在定义程序时使用ICACHE_RAM_ATTR来定义。如果没有定义这个属性,程序调用时会崩溃。实际上编译能通过但在调用时就会崩溃。

在中断程序前面添加:ICACHE_RAM_ATTR,比如我的中断程序原来是:

void dmpDataReady() 
{
    
    
    mpuInterrupt = true;
}

在程序名字前加上ICACHE_RAM_ATTR即

void ICACHE_ARM_ATTR dmpDataReady() 
{
    
    
    mpuInterrupt = true;
}

添加了名字后程序运行一切正常。
注意,这里使用5V或者是3V都可以正常工作。用手晃动动作非常灵敏,用IDE自带的串口图形输出可以输出图形。
在这里插入图片描述
一个加速度传感器可以使用了。

Guess you like

Origin blog.csdn.net/weixin_44481398/article/details/108419892