안녕하세요, "소프트웨어 공장"의 독자 여러분! 오늘은 STM32F429ZI 개발보드에서 이더넷 기능을 활용해 네트워킹을 구현하는 방법을 설명하려 합니다. STM32CubeIDE를 이용한 IO 설정과 lwIP 스택을 사용하여 간단한 HTTP 서버를 구현해 보겠습니다. 이 글을 통해 여러분이 이더넷 설정을 확실히 이해하고, 네트워킹을 통해 STM32 개발보드로 간단한 웹 서버를 구동할 수 있길 바랍니다.
1. STM32CubeIDE에서 이더넷 설정하기
STM32CubeIDE는 STM32 개발을 위한 통합 개발 환경으로, STM32CubeMX의 기능을 내장하고 있어 IO 설정이 매우 편리합니다. 이더넷 설정을 위해서는 다음과 같은 단계를 거칩니다.
1.1 프로젝트 생성 및 보드 선택
먼저 STM32CubeIDE에서 새로운 프로젝트를 생성합니다. "Board Selector"에서 "STM32F429ZI"를 검색하여 선택합니다. 이 보드는 이더넷 포트를 내장하고 있어, 별도의 외부 모듈 없이 이더넷 통신을 구현할 수 있습니다.
1.2 이더넷 핀 설정
프로젝트를 생성한 후, IO 설정 화면에서 이더넷 핀을 설정해야 합니다. 이더넷 기능을 사용하려면 RMII (Reduced Media Independent Interface) 모드를 설정하는 것이 좋습니다. STM32F429ZI에서 사용되는 이더넷 핀은 다음과 같습니다:
- PA1: RMII Reference Clock (ETH_REF_CLK)
- PA2: RMII MDIO (ETH_MDIO)
- PA7: RMII CRS_DV (ETH_CRS_DV)
- PB11: RMII TX_EN (ETH_TX_EN)
- PB12: RMII RXD0 (ETH_RXD0)
- PB13: RMII RXD1 (ETH_RXD1)
- PC1: RMII MDC (ETH_MDC)
- PC4: RMII RXD0 (ETH_RXD0)
- PC5: RMII RXD1 (ETH_RXD1)
- PG11: RMII TX_EN (ETH_TX_EN)
- PG13: RMII TXD0 (ETH_TXD0)
- PG14: RMII TXD1 (ETH_TXD1)
이 핀들을 설정하려면, CubeIDE의 Pinout & Configuration 탭에서 해당 핀들을 클릭하고 "ETH" 기능을 할당합니다. 이때 각 핀의 역할이 자동으로 지정되므로, 추가적인 설정은 필요하지 않습니다.
1.3 클럭 설정
이더넷 기능을 사용하기 위해서는 System Clock 설정이 중요합니다. STM32CubeIDE에서 "Clock Configuration" 탭으로 이동하여 HCLK를 적절히 설정하고, 이더넷을 위한 PLL48CLK 클럭 소스를 활성화합니다. STM32F429ZI는 25MHz 외부 크리스탈을 사용하여 이더넷 PHY 칩을 구동합니다.
1.4 lwIP 미들웨어 설정
네트워킹 기능을 구현하기 위해 lwIP 미들웨어를 활성화해야 합니다. CubeIDE의 "Middleware" 탭에서 lwIP를 선택하고 활성화합니다. lwIP 설정에서는 DHCP 사용 여부를 선택할 수 있습니다. 여기서는 Static IP 설정을 통해 고정된 IP 주소를 사용하도록 설정하겠습니다.
- IP 주소: 192.168.1.100
- 서브넷 마스크: 255.255.255.0
- 게이트웨이: 192.168.1.1
설정을 완료한 후 "Generate Code" 버튼을 눌러 프로젝트 코드를 생성합니다.
2. HTTP 서버 구현하기
이제 STM32CubeIDE에서 생성된 코드를 기반으로 간단한 HTTP 서버를 구현해 보겠습니다. HTTP 서버는 lwIP 스택을 이용해 구현할 수 있으며, 이를 통해 브라우저에서 STM32 보드의 정보를 확인할 수 있습니다.
2.1 소스 코드 작성
생성된 프로젝트에서 App 폴더 내에 있는 lwip.c
파일을 수정하여 HTTP 서버를 구현합니다. 아래는 HTTP 서버를 구현하는 전체 코드입니다.
#include "lwip/init.h"
#include "lwip/netif.h"
#include "lwip/tcpip.h"
#include "lwip/apps/httpd.h"
#include "ethernetif.h"
#include "main.h"
#include "cmsis_os.h"
struct netif gnetif;
void Netif_Config(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
// 네트워크 인터페이스 초기화
tcpip_init(NULL, NULL);
Netif_Config();
// HTTP 서버 시작
httpd_init();
// RTOS 스케줄러 시작
osKernelStart();
while (1)
{
}
}
void Netif_Config(void)
{
ip_addr_t ipaddr;
ip_addr_t netmask;
ip_addr_t gw;
IP4_ADDR(&ipaddr, 192, 168, 1, 100);
IP4_ADDR(&netmask, 255, 255, 255, 0);
IP4_ADDR(&gw, 192, 168, 1, 1);
netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
netif_set_default(&gnetif);
if (netif_is_link_up(&gnetif))
{
netif_set_up(&gnetif);
}
else
{
netif_set_down(&gnetif);
}
}
2.2 코드 설명
위 코드에서는 tcpip_init()
함수를 호출하여 lwIP 스택을 초기화하고, Netif_Config()
함수를 사용해 네트워크 인터페이스를 설정합니다. IP 주소, 서브넷 마스크, 게이트웨이 설정을 통해 고정된 IP를 할당하며, 이후 httpd_init()
함수를 호출하여 HTTP 서버를 시작합니다.
httpd_init()
함수는 lwIP에서 제공하는 기본 HTTP 서버를 초기화하며, HTTP 요청을 처리할 수 있도록 준비합니다. 이 예제에서는 별도의 HTML 파일 없이 간단한 상태 정보를 출력하도록 설정되어 있습니다.
2.3 빌드 및 테스트
코드를 작성한 후, 프로젝트를 빌드하고 보드에 업로드합니다. 보드를 네트워크에 연결하고, PC에서 웹 브라우저를 열어 http://192.168.1.100 주소로 접속하면 STM32F429ZI에서 구동 중인 HTTP 서버의 응답을 확인할 수 있습니다.
3. 마무리
이번 글에서는 STM32F429ZI 보드에서 이더넷 기능을 설정하고 lwIP를 이용하여 간단한 HTTP 서버를 구현하는 방법에 대해 알아보았습니다. 이더넷 핀 설정, 클럭 설정, lwIP 스택 활성화 등 중요한 설정 과정을 자세히 설명드렸으니, 여러분도 직접 구현해 보시기 바랍니다. 이더넷과 네트워킹을 활용하여 다양한 프로젝트를 만들어 보세요!
'STM32' 카테고리의 다른 글
STM32 저전력 모드 활용하기 (0) | 2024.12.03 |
---|---|
STM32F429 보드의 LCD 제어 및 그래픽 라이브러리 활용 (0) | 2024.12.02 |
STM32 USB 호스트/디바이스 설정 및 사용법 (0) | 2024.11.30 |
STM32 FreeRTOS - 실시간 운영체제 프로젝트 가이드 (0) | 2024.11.29 |
STM32 인터럽트와 EXTI 설정 (0) | 2024.11.28 |