STM32F411RCT6 no está hablando con el panel LCD - I2C y biblioteca HAL

-1

Tengo un chip MCM STM32F411RCT6 y estoy usando el software stm32cube para generar un código basado en la biblioteca HAL.

Tengo que establecer la comunicación entre la MCU y el panel LCD que es NHD-C0220BIZ-FS (RGB) -FBW-3VM usando I2C, mientras que MCU es el maestro.

El código C se proporciona en la hoja de datos de la pantalla LCD o en algún lugar, a continuación se muestra el código:

/* Initializes the LCD panel. */
void init_LCD(void) {
    I2C_Start();

    I2C_out( 0x78 );    // Slave address of the LCD panel.
    I2C_out( 0x00 );    // Control byte: all following bytes are commands.
    I2C_out( 0x38 );    // 8-bit bus, 2-line display, normal instruction mode.
    delay( 10 );

    I2C_out( 0x39 );    // 8-bit bus, 2-line display, extension instruction mode.
    delay( 10 );

    I2C_out( 0x14 );    // Bias set to 1/5.
    I2C_out( 0x78 );    // Contrast set.
    I2C_out( 0x5E );    // Icon display on, booster on, contrast set.
    I2C_out( 0x6D );    // Follower circuit on, amplifier=1?
    I2C_out( 0x0C );    // Display on, cursor off.
    I2C_out( 0x01 );    // Clear display.
    I2C_out( 0x06 );    // Entry mode set to cursor-moves-right.
    delay( 10 );

    I2C_Stop();
}

/* Writes a 10-char string to the RAM of the LCD. */
void show( unsigned char *text ) {
    int n;

    I2C_Start();

    I2C_out( 0x78 ); // Slave address of panel.
    I2C_out( 0x40 ); // Control byte: data bytes follow, data is RAM data.

    for( n = 0; n < 10; n++ ) {
        I2C_out( *text );
        text++;
    }

    I2C_Stop();
}

void main(void) {
    int i;

    init_LCD();

    show("HelloWorld");

    while(1)
    {}
}

Usé HAL_I2C_Master_Trasmit () para transmitir diez bytes a la vez, como en la función init_LCD () y once bytes a la vez como en la función show (). No hay funciones I2C_Start () y I2C_Stop () en la biblioteca HAL. La dirección del esclavo es 0x78, ya que estoy escribiendo en la pantalla LCD a diferencia de la lectura, supongo, no tengo que cambiar esta dirección.

Actualmente obtengo HAL_ERROR o 1 valor como el valor de retorno de la función HAL_I2C_Master_Trasmit ().

Si es posible, ¿podría convertir este código en HAL I2C?

    
pregunta Pradeep Ch

1 respuesta

1

Creo que necesitas cambiar tu dirección de esclavo en 1 bit.

I2C_out( 0x78 << 1 );    // Slave address of the LCD panel.

Arduino hace esto automáticamente, pero HAL no lo hace.

    
respondido por el Michael Hojnowski

Lea otras preguntas en las etiquetas