首先要说明一点:Pico 有两个 I2C,也就是两套 SDA 和 SCL。这点你可以在针脚图中名字看出,比如下图的 Pin 4 和 Pin 5是 I2C1 的,而默认的 Pin 6 和 Pin 7 是 I2C0 的。
默认情况下是只开启了第一个 I2C,也就是只有 I2C0 的针脚是可以使用的。如果这种情况下,你哪怕修改了针脚,但不是 I2C0 的,也是不会正常运行的。
正确修改 I2C 的 SDA 和 SCL 默认针脚的方法有两种,还有一种不推荐的方法(但也是方法)。
最推荐的是在CMakeLists.txt
中设置,因为这部分是控制所有代码的,这样可以避免被 SDK 中的一些库的设置替换掉:
set(PICO_DEFAULT_I2C 1)
set(PICO_DEFAULT_I2C_SDA_PIN 18)
set(PICO_DEFAULT_I2C_SCL_PIN 19)
还有一种是在源代码中,不推荐这种是因为可能会被替换掉。将下面的代码放到导入库部分的后面,这样被替换之后可能会再次替换回来:
#define PICO_DEFAULT_I2C 1
#define PICO_DEFAULT_I2C_SDA_PIN 18
#define PICO_DEFAULT_I2C_SCL_PIN 19
这样后面的代码就会使用这个值,而不是默认的4
和5
。
默认值是在头文件pico-sdk/blob/master/src/boards/include/boards/pico.h
中进行设置的,设置默认值的代码部分如下:
#ifndef PICO_DEFAULT_I2C_SDA_PIN
#define PICO_DEFAULT_I2C_SDA_PIN 4
#endif
#ifndef PICO_DEFAULT_I2C_SCL_PIN
#define PICO_DEFAULT_I2C_SCL_PIN 5
#endif
当然你可以直接来修改pico-sdk
中的默认值,但是不推荐,这样会搞乱的。
希望能帮到有需要的人~