This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSPM0G3507: OLED I2C通信

Part Number: MSPM0G3507
Other Parts Discussed in Thread: SYSCONFIG,

在SYSCONFIG配置时使用I2C时SCL和SDA引脚都是输入模式,但是如果是controller mode 下应该是输出模式,并且这种情况是默认无法修改的 

起因是 我想用I2C与OLED通信,但是无法实现,我发现SPI设置是正常的输出模式。

同时我想请各位大佬帮我看看我的代码对不对,主要是向控制器写命令的函数我不太确定

void Write_IIC_Byte(unsigned char IIC_Byte)
{
    DL_I2C_transmitControllerData(I2C1, IIC_Byte);
}

灰常感谢各位

  • 你好,

    void Write_IIC_Byte(unsigned char IIC_Byte)
    {
        DL_I2C_transmitControllerData(I2C1, IIC_Byte);
    }

    void DL_I2C_transmitControllerData(I2C_Regs *i2c, uint8_t data),第二个参数属性应该是uint8_t.

    在SYSCONFIG配置时使用I2C时SCL和SDA引脚都是输入模式,但是如果是controller mode 下应该是输出模式,

    确实无法修改,但是这里输入输出应该是都可以。

    你可以参考下SDK中的例程:mspm0_sdk_1_20_01_06\examples\nortos\LP_MSPM0G3507\driverlib\i2c_controller_rw_multibyte_fifo_interrupts

  • 您好,非常感谢您的回复,但是我已经检查了所有例程,基本上都是这样的,我发现下方有自定义引脚,里面可以选择invert选项,按照软件的解释应该是输入转输出,但是这依旧无法解决我OLED亮不了的情况,同时非常感谢您对我代码的建议

    以下是我的OLED.c文件

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include "oled.h"
    // the storage format is as follow
    //[0]0 1 2 3 ... 127
    //[1]0 1 2 3 ... 127
    //[2]0 1 2 3 ... 127
    //[3]0 1 2 3 ... 127
    //[4]0 1 2 3 ... 127
    //[5]0 1 2 3 ... 127
    //[6]0 1 2 3 ... 127
    //[7]0 1 2 3 ... 127
    /**********************************************
    //IIC Start
    **********************************************/
    void IIC_Start()
    {
    OLED_SCLK_Set();
    OLED_SDIN_Set();
    OLED_SDIN_Clr();
    OLED_SCLK_Clr();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    这是我的oled.h

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #ifndef __OLED_H
    #define __OLED_H
    #include <ti_msp_dl_config.h>
    #include "delay.h"
    #include "oledfont.h"
    #define OLED_MODE 0
    #define SIZE 8
    #define XLevelL 0x00
    #define XLevelH 0x10
    #define Max_Column 128
    #define Max_Row 64
    #define Brightness 0xFF
    #define X_WIDTH 128
    #define Y_WIDTH 64
    #define OLED_SCLK_Clr() DL_GPIO_clearPins(GPIO_I2C_SCL_PORT, GPIO_I2C_SCL_PIN) // CLK
    #define OLED_SCLK_Set() DL_GPIO_setPins(GPIO_I2C_SCL_PORT, GPIO_I2C_SCL_PIN)
    #define OLED_SDIN_Clr() DL_GPIO_clearPins(GPIO_I2C_SDA_PORT, GPIO_I2C_SDA_PIN) // DIN
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 你这里I2C是否能正常的收发信号?引脚上是否有电平?请确认下是I2C的问题还是OLED的问题。

  • 感谢您的建议,我尝试使用模拟IO与OLED通信,但是还是不行

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void IIC_Start()
    {
    delay_us(1);
    OLED_SCLK_Set();
    delay_us(1);
    OLED_SDIN_Set();
    delay_us(1);
    OLED_SDIN_Clr();
    }
    /**********************************************
    //IIC Stop
    **********************************************/
    void IIC_Stop()
    {
    delay_us(1);
    OLED_SCLK_Set();
    delay_us(1);
    OLED_SDIN_Clr();
    delay_us(1);
    OLED_SDIN_Set();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    这是我的配置文件

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /**
    * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
    * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
    * @cliArgs --device "MSPM0G350X" --package "LQFP-64(PM)" --part "Default" --product "mspm0_sdk@1.20.01.06"
    * @versions {"tool":"1.18.0+3266"}
    */
    /**
    * Import the modules used in this configuration.
    */
    const GPIO = scripting.addModule("/ti/driverlib/GPIO", {}, false);
    const GPIO1 = GPIO.addInstance();
    const GPIO2 = GPIO.addInstance();
    /**
    * Write custom configuration values to the imported modules.
    */
    GPIO1.$name = "LED";
    GPIO1.associatedPins.create(2);
    GPIO1.associatedPins[0].assignedPin = "26";
    GPIO1.associatedPins[0].ioStructure = "SD";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    我加入了内置的上拉电阻,但是OLED依旧没有反应,但是我的OLED在其他设备上是可以正常使用的,我将系统板上的LED与I2C的两条线相连,灯在闪烁至少显示引脚通信是没有问题的,也非常感谢您的耐心帮助

  • 那么I2C其实是没问题的,也许有可能是驱动不了你的OLED吧,你可以多尝试几个板子看看

x 出现错误。请重试或与管理员联系。