본문 바로가기
임베디드 (Embedded)/STM32

[STM32] STM32CubeIDE i2C-LCD 사용하기

by 기딩 2023. 11. 8.
728x90

NUCLEO-F429ZI 보드를 이용하여 lcd를 출력해보자.

 

(board select로 프로젝트 만든 상태)

먼저 i2C 모드를 Disable에서 I2C로 활성화하면

자동으로 핀2개가 설정된다. (나는 Pb8이 더 편해서 옮겼다.)

generate code를 하면

 

Drivers > STM32F4xx_HAL_Driver의 Inc와 Src 폴더에 i2c 관련 c와 헤더 파일이 생긴 걸 확인할 수 있다.

 

 

 

본격적으로 lcd 사용을 위해

main.c가 있는 Core > Src 폴더에 lcd.c를 추가한다.

lcd.c
0.00MB

 

main에 lcd 주소를 선언하고

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#define LCD_ADDR (0x27 << 1)

/* USER CODE END Includes */

lcd 관련 함수를 선언한다.

/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

extern void I2C_Scan(void);

void LCD_Init(uint8_t lcd_addr);

void LCD_SendCommand(uint8_t lcd_addr, uint8_t cmd);

void LCD_SendString(uint8_t lcd_addr, char *str);

/* USER CODE END 0 */

 

0b10000000는 lcd의 첫 번째 줄이고

0b11000000는 lcd의 두 번째 줄

/* Initialize all configured peripherals */

MX_GPIO_Init();

MX_ETH_Init();

MX_USART3_UART_Init();

MX_USB_OTG_FS_PCD_Init();

MX_I2C1_Init();

/* USER CODE BEGIN 2 */

I2C_Scan();

LCD_Init(LCD_ADDR);

/* USER CODE END 2 */

 

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

LCD_SendCommand(LCD_ADDR, 0b10000000);

LCD_SendString(LCD_ADDR, "Hello");

LCD_SendCommand(LCD_ADDR, 0b11000000);

LCD_SendString(LCD_ADDR, "World");

HAL_Delay(100);

/* USER CODE END WHILE */

 

/* USER CODE BEGIN 3 */

}

/* USER CODE END 3 */

}

 

main.c
0.01MB

 

 

그러면 다음과 같이 lcd에 잘 출력된다~!

 

lcd.zip
11.00MB

728x90