主题中讨论的其他器件:PCF8574A、 PCF8574
工具/软件:Code Composer Studio
大家好、
我尝试通过 I2C 与 SSD1306 OLED 屏幕通信。 我遇到了 driverlib EUSCI_B_I2C_masterSendMultiByteStart 函数的问题、它会忽略第一个传输字节。 它实际工作的唯一情况是默认 MSP 时钟(1MHz)和 I2C 的400kbps。
我将按如下方式配置外设:
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、GPIO_PIN6 | GPIO_PIN7、GPIO_PRIMARY_MODULE_Function);
EUSCI_B_I2C_initMasterParam i2cParam ={0}; i2cParam.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK; i2cParam.i2cClk = CS_getSMCLK (); i2cParam.datarate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS; i2cParam.byteCounterThreshold = 1; i2cParam.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP; EUSCI_B_I2C_initMaster (EUSCI_B1_base、&i2cParam); EUSCI_B_I2C_setSlaveAddress (EUSCI_B1_BASE、SSD1306_address); EUSCI_B_I2C_setMode (EUSCI_B1_BASE、EUSCI_B_I2C_Transmit 模式); EUSCI_B_I2C_ENABLE (EUSCI_B1_BASE);
我将使用此函数发送命令:
void OLED_sendCommand (uint8_t cmd) { EUSCI_B_I2C_masterSendMultiByteStart (EUSCI_B1_BASE、0x00); EUSCI_B_I2C_masterSendMultiByteNext (EUSCI_B1_base、cmd); EUSCI_B_I2C_masterSendMultiByteStop (EUSCI_B1_BASE); }
现在、对于输出、这使用默认时钟(1MHz)和400kbps I2C:
这将使用默认时钟(1MHz)和100kbps I2C:
如果我将 I2C 时钟更改为100kbps、或将系统时钟更改为默认1MHz 以外的任何值、 则 EUSCI_B_I2C_masterSendMultiByteStart 会忽略第一个字节。 为什么会发生这种情况?
此致、
Helder 销售