I2C communication

This tutorial demonstrates: displaying content on a 0.91-inch OLED display driven by hardware I2C

1、software-hardware

2、Brief principle

2.1、Hardware schematic diagram

The schematic shows only the I2C (I2C1) interface used in the tutorial

image-20231024173041064

2.2、Physical connection diagram

image-20231024172718066

OLEDSTM32 expansion board
VCCVCC
SCLSCL
SDASDA
GNDGND

2.3、Principle of control

I2C (Inter-Integrated Circuit) bus is a serial communication protocol, which is composed of serial data line (SDA) and serial clock line (SCL).

Serial data line(SDA):Use to transfer data

Serial clock line(SCL):Use for synchronous data transfer

Multi-device communication:The e I2C interface uses an addresse-based device identification mechanism to select the specific device to communicate with.

image-20231024180945251

Idle state

SCL high level, SDA high level;

Starting condition

SCL high level, SDA falling edge;

Stop condition

SCL high level, SDA rising edge;

Data transfer

SCL low, SDA rising edge or falling edge;

Signal of reply

When the slave receives the data, it sends a low level to the master to indicate successful reception.

Data validity

When the clock line is high, the data line must be stable; When the clock line is low, the data line is allowed to change.

3、Engineering configuration

Project Configuration: Prompt for configuration options during STM32CubeIDE project configuration

3.1、Notes

Omitted project configuration: New project, chip selection, project configuration, SYS for pin configuration, RCC configuration, clock configuration, and project configuration content

The project configuration part, which is not omitted, is the key point to configure in this tutorial.

3.2、Pin configuration

You can directly select the corresponding pin number in the pin view, and the corresponding option will appear when the mouse is left clicked

11b5f203be1154e731b844bf4b413daa

image-20231024193453890

image-20231024193600557

image-20231025092348468

image-20231024193047747

4、Main function

This paper mainly introduces the functional code written by users. Detailed code can be opened by yourself in the project file we provide, and enter the Bsp folder to view the source code.

4.1、User function

function:I2C_Send7bitAddress

Function prototypesvoid I2C_Send7bitAddress(I2C_TypeDef *I2Cx, uint8_t Address, uint8_t I2C_Direction)
Functional DescriptionSend slave device address
Input parameters1I2Cx:I2C handle address
Input parameters2Address:Slave device address
Input parameters3I2C_Direction:Read or write
NoneNone

function:OLED_Init

Function prototypesvoid OLED_Init(void)
Functional DescriptionOLED initialization
Input parametersNone
Return valueNone

function:OLED_Draw_Line

Function prototypesvoid OLED_Draw_Line(char *data, uint8_t line, bool clear, bool refresh)
Functional DescriptionWrite a single character
Input parameters1data:Displaying data
Input parameters2line:Number of rows
Input parameters3clear:Clear or not
Input parameters4refresh:refresh or not
Return valueNone

function:SSD1306_UpdateScreen

Function prototypesvoid SSD1306_UpdateScreen(void)
Functional Descriptionoled screen update display
Input parametersNone
Return valueNone

function:SSD1306_UpdateScreen

Function prototypesvoid SSD1306_Fill(SSD1306_COLOR_t color)
Functional DescriptionThe oled screen cleared, but did not refresh the display
Input parameterscolor:The color to display
Return valueNone

function:SSD1306_UpdateScreen

Function prototypesvoid SSD1306_GotoXY(uint16_t x, uint16_t y)
Functional DescriptionSets the current cursor
Input parameters1x:Horizontal coordinate
Input parameters2y:Vertical coordinate
Return valueNone

function:SSD1306_DrawPixel

Function prototypesvoid SSD1306_DrawPixel(uint16_t x, uint16_t y, SSD1306_COLOR_t color)
Functional DescriptionDrawing a pixel
Input parameters1x:Horizontal coordinate
Input parameters2y:Vertical coordinate
Input parameters3color:The color to display
Return valueNone

4.2、LL library function analysis

LL library functions that have been covered in the previous tutorial will not be covered in the tutorial

function:LL_I2C_Init

Function prototypesuint32_t LL_I2C_Init(I2C_TypeDef *I2Cx, LL_I2C_InitTypeDef *I2C_InitStruct)
Functional DescriptionInitialize the I2C peripheral parameters
Input parameters1I2Cx:I2C handle address
Input parameters2I2C_InitStruct:I2C initialization structure that contains configuration information for specified I2C peripherals
Return valueNone

function:LL_I2C_Enable

Function prototypesvoid LL_I2C_Enable(I2C_TypeDef *I2Cx)
Functional DescriptionEnable the I2C peripheral
Input parametersI2Cx:I2C handle address
Return valueNone

function:LL_I2C_GenerateStartCondition

Function prototypesvoid LL_I2C_GenerateStartCondition(I2C_TypeDef *I2Cx)
Functional DescriptionI2C communication start condition
Input parametersI2Cx:I2C handle address
Return valueNone

function:LL_I2C_TransmitData8

Function prototypesvoid LL_I2C_TransmitData8(I2C_TypeDef *I2Cx, uint8_t Data)
Functional DescriptionSends 8 bits of data to the specified I2C peripheral
Input parameters1I2Cx:I2C handle address
Input parameters2Data:data
Return valueNone

function:LL_I2C_GenerateStopCondition

Function prototypesvoid LL_I2C_GenerateStopCondition(I2C_TypeDef *I2Cx)
Functional DescriptionI2C communication end condition
Input parametersI2Cx:I2C handle address
Return valueNone

5、Experimental phenomenon

After downloading the program successfully, press the RESET button of the development board to observe the OLED display

phenomenon:

OLED: The first line shows oled init success! , the second row shows oled + I2c class! The third row displays oled show success!

e963f372f4e94180756c52bc6e67bbb9