참고영상
이 실습은 위의 링크를 보고 실습을 진행한 내용을 정리해보았다.
MCU 모델 : STM32F429ZIT6U
보드 : NUCLEO-F429ZI
최초에 프로젝트를 생성하게 되면 MCU Selector 화면이 나온다.
이때, MCU selector로 진행할 경우 STM32F429ZIT6U
모델을 선택하거나
Board Selector로 진행할 경우 NUCLEO-F429ZI
보드를 선택하고 Next
버튼을 누르면 프로젝트가 생성된다.
Connectivity -> ETH 에서
Mode는 Disable -> RMII
Advanced Parameters의 PHY를 LAN8742로 선택해준다.
LAN8742로 선택해주는 이유는
UM1974
문서에 의하면 해당 Nucleo보드는
external PHY로LAN8742A-CZ-TR
모델을 사용한다고 한다.
위와 같이 선택되었는데 UM1974
문서에 의하면 아래와 같다.
ETH_TXD0는 PG13핀에
ETH_TX_EN은 PG11에 매칭이 되어야 한다.
다음은 Middleware -> LWIP에서
Enabled를 체크해주고 General Settings에서 DHCP를 Disabled로 선택하고
IP_ADDRESS, NETMASK, GATEWAY를 입력해준다.
이때, Gateway 주소와 Netmask는 현재 연결된 네트위크의 정보와 동일하게 적어준다.
(커맨드 창에서ipconfig
명령어를 통해 조회 가능)
IP 주소는 할당되지 않은 새 주소를 입력한다.
Platform Settings까지 설정해준 뒤 Code Generation을 통해 코드를 생성해준다.
프로젝트에서 LWIP -> APP -> lwip.c 의 struct netif gnetif
를 복사하고
LWIP -> APP -> lwip.h에 USER code 입력부분에
extern struct netif gnetif;
로 extern
키워드를 붙여 입력한다.
다운로드 링크
위 링크로 들어가 압축파일을 다운로드한다.
다운로드한뒤 압축파일을 풀자.
위 사진처럼 순서대로 폴더를 타고 들어오면 Inc폴더와 Src폴더가 보인다.
Inc 폴더내부의 udp_echoserver.h
를 복사한다.
마찬가지로 Src 폴더 내부의 udp_echoserver.c
를 복사한다.
main.c 파일에서
#include "udp_echoserver.h"
를 입력한다.
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LWIP_Init();
/* USER CODE BEGIN 2 */
udp_echoserver_init();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
ethernetif_input(&gnetif);
sys_check_timeouts();
}
/* USER CODE END 3 */
}
위와 같이 main 함수를 작성한다. 그리고 보드에 내려받고 실행시켜본다.
echo server로써 동작을 하는 것을 확인할 수 있었다.