使用Earlphilhower Arduino-Pico时,Pico RP2040无法初始化AS5601的I2C引脚
解决RP2040(Arduino-Pico框架)下AS5601的I2C初始化问题
问题根源
你直接修改AS5601库文件的I2C初始化代码,会和sketch中的Wire.begin()产生重复初始化冲突,导致引脚配置混乱,甚至影响开发板的USB识别。正确做法是在自己的sketch中控制I2C初始化流程,不要修改库文件。
正确解决方案
1. 恢复AS5601库原始代码
将你修改过的AS5601.h文件还原,删除添加的wireChannel->setSCL(5);、wireChannel->setSDA(4);和wireChannel->begin();代码,避免库与sketch的I2C初始化冲突。
2. 修改sketch代码
在setup()函数中先设置I2C引脚,再初始化Wire,确保顺序正确。RP2040默认I2C0对应引脚为GP4(SDA)和GP5(SCL),修改后的完整代码如下:
#include "Arduino.h" #include "AS5601.h" AS5601 Sensor; void setup() { // 先配置I2C引脚,再启动Wire Wire.setSDA(4); // 指定SDA引脚为GP4 Wire.setSCL(5); // 指定SCL引脚为GP5 Wire.begin(); delay(1000); Serial.begin(115200); Serial.println(F("Angle Measurement with AS5601")); } void loop() { Serial.print(F("Magnitude: ")); Serial.print(Sensor.getMagnitude()); Serial.print(F(" | Raw angle: ")); Serial.print(Sensor.getRawAngle()); Serial.print(F(" | Clean angle: ")); Serial.print(Sensor.getAngle()); if (Serial.read() == '0') { Sensor.setZeroPosition(); Serial.print(F(" | Zero position set!")); } Serial.println(); delay(50); }
3. 硬件连接确认
确保AS5601接线正确:
- AS5601的VCC接RP2040的3.3V(禁止接5V,AS5601是3.3V器件)
- AS5601的GND接RP2040的GND
- AS5601的SDA接RP2040的GP4
- AS5601的SCL接RP2040的GP5
4. 可选:使用I2C1通道
如果需要使用I2C1,对应引脚为GP6(SDA)和GP7(SCL),代码修改如下:
// 替换原Wire相关代码 Wire1.setSDA(6); Wire1.setSCL(7); Wire1.begin(); // 初始化Sensor时指定Wire1对象 AS5601 Sensor(&Wire1);
关键注意事项
- Arduino-Pico框架中,
Wire.setSDA()和Wire.setSCL()必须在Wire.begin()之前调用,否则设置无效。 - 不要在库文件中修改全局Wire对象的初始化,避免与sketch代码产生冲突。
内容的提问来源于stack exchange,提问作者Ashfaque Ahmed Khan
相关产品推荐
相关产品推荐

