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를 추가한다.
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 */
}
그러면 다음과 같이 lcd에 잘 출력된다~!
'임베디드 (Embedded) > STM32' 카테고리의 다른 글
[STM32] LCD 커서 이동 (0) | 2023.11.14 |
---|---|
[STM32] STM32cubeIDE 버튼 한 번 클릭, 더블 클릭, 길게(n초 이상) 클릭하기 (0) | 2023.11.10 |
[STM32] STM32CubeIDE 조이스틱 설정 ADC, DMA (0) | 2023.11.07 |
[STM32] NUCLEO-F429ZI 타이머2,3,4를 이용하여 버튼 led 토글하기 및 주파수 계산 (0) | 2023.10.26 |
[STM32] NUCLEO-F429ZI 타이머 카운트 설정 및 HAL_IncTick(), HAL_SYSTICK_Callback()을 이용하여 led 깜빡이기 (0) | 2023.10.26 |