So here I am starting I2C tutorial in STM32. I know it's early because we still need to go through some basic things before jumping to I2C but the problem is LCD. It takes a whole lot of efforts to interface LCD using conventional methods, but by using I2C, we can do it really easy. I will cover other ways to interface LCD later in upcoming tutorials. Before using I2C to interface LCD, let's first write a simple code to know about I2C functions.
To change the address we are provided with A0, A1 and A2 pins. By default these three pins are high so the address by default is 01001110 which is 0x4E. To change the address of this device, you have to connect any/all of these three pins to ground, which is provided just above them. So let's say you connected A0 to ground, new address will be 01001100 which is 0x4B. In this manner, we can connect upto 8 LCDs to the same line.
We continuously check for incoming data and when data is received, display it on the lcd. 2.) Use interrupt. Microcontroller does it's normal operations, and whenever the data receiving completes, an interrupt is generated and ISR is executed, after completing ISR, control returns back to normal operation.
STM32 devices are great but the only problem with them is when it comes to programming. Register based programming is not easy, because clock setting is very messed up, and there aren't any reliable libraries. ST microelectronics provides HAL libraries but that is also not so good. Nevertheless I am going to use HAL libraries as they are officially supported by ST and also it have a good community support.