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?