본문 바로가기

[STM32F746G-DISCO] USB 마우스로 사용하기 (Device Mode)

by rudals.kim 2024. 7. 15. 댓글 개
반응형
아래 테스트는 STM32CubeIDE 1.6.1/STM32Cube_FW_F7_V1.16.1를 사용하여 테스트 되었습니다.


STM32F746G-DISCO 보드에는 USB FS/HS 단자가 있습니다.
이중 FS 포트를 사용하여 USB Device Mode에서 마우스 테스트를 해 보았습니다.

STM32CubeIDE에서 새 프로젝트를 생성 후 핀 초기화 후 SYS/USART1/I2C3/USB_OTG_FS/USB_DEVICE만 설정하였습니다.

USB_DEVICE관련 설정은 기본값을 사용하였습니다.

가장 중요한 설정이 클럭 설정인데 USB 디바이스는 48MHz를 사용해야 합니다.

소스코드를 빌드하여 보드에 다운로드를 해 보았습니다.
정상적으로 다운로드가 된것을 확인한 후 Micro USB 케이블을 CN13(USB_FS) 단자에 꽂습니다.
아래와 같이 윈도우 PC에서 STM32F746G-DISCO 보드를 정상적인 HID로 인식하였습니다.

제어판의 '장치 및 프린터'를 보면 'STM32 Human Interface' 이름의 마우스가 추가된 것을 확인할 수 있습니다.

또는 설정의 장치 항목을 보면 아래와 같이 등록되어져 있습니다.

STM32F746G-DISCO 보드가 HID mouse 장치로 등록만되어 있을 뿐 다른 기능은 추가하지 않아 실질적인 마우스로써의 기능은 없습니다. 그래서 간단히 터치값을 읽어 들여 마우스 이동 기능을 추가하여 동작시켜 보았습니다.

아래는 HID를 사용하여 PC로 데이터를 전송하기 위해 제공되는 함수입니다.

USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, sizeof(HID_Buffer));


전송되는 데이터는 HID_Buffer[4]를 할당하여 사용하는데 아래와 같은 형식으로 버퍼가 사용됩니다.

HID_Buffer[0] - 0:왼쪽 버튼, 1:오른쪽 버튼
HID_Buffer[1] - X 축으로 이동한 값
HID_Buffer[2] - Y 축으로 이동한 값
HID_Buffer[3] - 휠 이동한 값
HID_Buffer[0], HID_Buffer[3]은 0을 넣어주고 터치로부터 읽어 들인 값을 이전 위치 값과 비교하여 HID_Buffer[1], HID_Buffer[2]에 넣은 후 USBD_HID_SendRequest 함수를 사용하여 데이터를 PC로 전송하였습니다.

아래는 간단히 마우스 이동을 테스트 해 본 영상입니다.

 

반응형

댓글