본문 바로가기
STM32 프로젝트

STM32를 사용하여 DIY 숨겨지신 USB 키보드 [STM32 자습서] [HAL]

by 모빌리티키즈 2023. 3. 22.
728x90

인터넷에는 STM32의 USB 응용 프로그램에 대한 많은 것들이 있습니다.

그러나 이것에서 나는 그 응용 프로그램이 이해하기 쉬운 언어와 단계로 매우 쉽고 자세하게 정교하다는 것을 제공하려고 노력하고 있습니다.

STM32CubeMx로 생성 된 STM32 USB HID 코드를 수정하여 전체 응용 프로그램을 더 작은 부분으로 나누기로 결정했습니다.

이것은 파란색 필 보드 STM32F103C8T6을 사용하는 USB HID 키보드의 매우 기본적인 예입니다.

 

1 단계 : 필요한 것들!

우리는 요구했다,

1) STM32F103 파란색 알약 보드 : https://robu.in/product/stm32f103c8t6-minimum-syst ...

2) ST-Link V2 프로그래머 : https://robu.in/product/st-link-v2-in-circuit-debu ...

또는

시거 J-링크: https://robokits.co.in/programmers/arm/j-link-usb-...

3) 마이크로 USB 케이블

4) 컴퓨터에 설치된 큐브IDE

2 단계 : 큐브IDE에서 USB HID 클래스 프로젝트 만들기

  1. 새 프로젝트를 만들려면 파일 메뉴 > 새 > STM32 프로젝트로 이동합니다.
  2. 새 하위 창이 열리고 대상을 STM32F103C8T6으로 선택하고 "다음"을 클릭합니다.
  3. 다음 창에서 적절한 프로젝트 이름을 지정하고 "마침"을 클릭하십시오.

일부 프로세스를 완료하면 프로젝트가 ".ioc"파일을 여는 것을 볼 수 있습니다.이 파일은 코드 생성을위한 주변 장치, 클럭 생성 및 디버거와 관련된 몇 가지 기본 설정을 수행해야합니다.

2 단계 : 큐브IDE에서 USB HID 클래스 프로젝트 만들기

  1. 새 프로젝트를 만들려면 파일 메뉴 > 새 > STM32 프로젝트로 이동합니다.
  2. 새 하위 창이 열리고 대상을 STM32F103C8T6으로 선택하고 "다음"을 클릭합니다.
  3. 다음 창에서 적절한 프로젝트 이름을 지정하고 "마침"을 클릭하십시오.

일부 프로세스를 완료하면 프로젝트가 ".ioc"파일을 여는 것을 볼 수 있습니다.이 파일은 코드 생성을위한 주변 장치, 클럭 생성 및 디버거와 관련된 몇 가지 기본 설정을 수행해야합니다.

3단계: 코드 생성

 

먼저 시계 소스를 설정하고 ioc 파일에서 Pinout 및 구성을 클릭하면 첫 번째 탭 이름이 표시됩니다.

  1. 범주에서 시스템 코어 > RCC를 클릭하면 RCC 모드 및 구성 창이 열립니다.
    고속 클록(HSE)을 "크리스탈/세라믹 공진기"로 선택합니다.
  2. Sys를 클릭하고 디버그를 직렬 와이어로 설정합니다.
  3. 범주에서 USB> 연결을 클릭하고 장치(FS) 확인란을 선택하여 USB 기능을 활성화합니다. 참고: 구성에서 다른 매개변수를 편집하지 마십시오.

USB 모드, 클래스 및 기타 매개 변수를 설정하려면 아래 언급 된 단계를 따르십시오.

  1. 미들웨어 > USB_Device로 이동하여 FS IP에 대한 클래스를 HID(휴먼 인터페이스 디바이스 클래스)로 설정합니다.
  2. 이제 구성에서 장치 설명자 > 장치 설명자 FS로 이동하여 제품 문자열을 설정합니다. 이 제품 문자열은 STM32 보드의 USB를 연결하면 제어판에 나타납니다(첨부된 사진 참조).

이제 시계 구성을 설정해야 합니다.

  1. ioc 파일에서 클럭 구성이라는 두 번째 탭을 클릭합니다.
  2. PLL 소스 멀티플렉서를 HSE로 설정한 다음 클럭 문제 해결 버튼을 클릭합니다. 소프트웨어 자체는 모든 주변 장치의 주파수를 해결하고 설정합니다. 음, 더 빠른 속도를 얻으려면 HCLK를 72Mhz로 설정할 수 있습니다(구성을 변경할 때 클럭 문제를 해결하는 것을 잊지 마십시오).

이제 모든 기본 설정이 완료되었으므로 저장을 클릭하십시오. 팝업에서 코드를 생성하고 예를 클릭한 다음 프로세스가 완료될 😄 때까지 기다립니다.

4단계: 코드 변경 및 개발

이제 생성 된 파일을 일부 변경해야하며 기본적으로 코드 생성기는 코드 HID 마우스 용으로 생성되므로 키보드를 약간 변경해야합니다.

왼쪽(과거에 화면 보기를 변경하지 않은 경우)에 프로젝트 탐색기가 있습니다.

  1. 미들웨어 > ST > STM32_USB_Device_Library > 클래스 > HID > Src로 이동하면 usbd_hid.c 파일을 찾을 수 있습니다.
  • 파일을 열고 USB HID 장치 FS 구성 설명자의 배열을 찾으면 nInterfaceProtocol 이라는 하나의 매개 변수를 찾을 수 있습니다. 매개 변수의 기본값은 마우스 용 0x02이므로 키보드 용 0x01로 바꿔야합니다. 이 설명자 보고서의 목적은 장치(PC, 노트북 등)에 알리고 자신을 키보드로 인식하는 것입니다.
  • 이제 같은 파일에서 배열 HID_MOUSE_ReportDesc 찾으십시오. 이 배열에는 마우스 장치의 속성이 포함되어 있으므로 아래와 같이 키보드 보고서 설명자를 사용하여 값을 변경해야합니다.
{
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x06,                    // USAGE (Keyboard)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
    0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x95, 0x08,                    //   REPORT_COUNT (8)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x81, 0x03,                    //   INPUT (Cnst,Var,Abs)
    0x95, 0x05,                    //   REPORT_COUNT (5)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x05, 0x08,                    //   USAGE_PAGE (LEDs)
    0x19, 0x01,                    //   USAGE_MINIMUM (Num Lock)
    0x29, 0x05,                    //   USAGE_MAXIMUM (Kana)
    0x91, 0x02,                    //   OUTPUT (Data,Var,Abs)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x75, 0x03,                    //   REPORT_SIZE (3)
    0x91, 0x03,                    //   OUTPUT (Cnst,Var,Abs)
    0x95, 0x06,                    //   REPORT_COUNT (6)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x65,                    //   LOGICAL_MAXIMUM (101)
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
    0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))
    0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
    0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
    0xc0                           // END_COLLECTION
};
  • 배열의 내용을 변경함에 따라 배열의 크기도 업데이트해야합니다.이를 위해 미들웨어 > ST > STM32_USB_Device_Library > 클래스 > HID > Inc에있는 파일 usbd_hid.h 파일을 엽니 다.
  • 아래 표시된 줄을 찾아 74U를 63U로 바꾸면 키보드 보고서 설명자가 총 63바이트이기 때문입니다.
#define HID_MOUSE_REPORT_DESC_SIZE    74U

모든 파일을 저장하고 이제 😎 응용 프로그램 코드를 작성해야합니다.

따라서 코어 > Src에서 main.c 파일을 엽니 다.

  • 헤더 파일 포함
#include "usbd_hid.h"
  • 주석 뒤에 아래 코드 추가 /*사용자 코드 시작 PV*/
  •  
extern USBD_HandleTypeDef hUsbDeviceFS;

typedef struct
{
	uint8_t MODIFIER;
	uint8_t RESERVED;
	uint8_t KEYCODE1;
	uint8_t KEYCODE2;
	uint8_t KEYCODE3;
	uint8_t KEYCODE4;
	uint8_t KEYCODE5;
	uint8_t KEYCODE6;
}subKeyBoard;

subKeyBoard keyBoardHIDsub = {0,0,0,0,0,0,0,0};<br>
  • int main() 함수에서 while(1) 루프를 찾을 수 있으며 주석 뒤에 while 루프 아래 내용을 추가합니다. /* 사용자 코드 시작 3 */
keyBoardHIDsub.MODIFIER=0x02;  // To press shift key<br>keyBoardHIDsub.KEYCODE1=0x04;  // Press A key
keyBoardHIDsub.KEYCODE2=0x05;  // Press B key
keyBoardHIDsub.KEYCODE3=0x06;  // Press C key
USBD_HID_SendReport(&hUsbDeviceFS,&keyBoardHIDsub,sizeof(keyBoardHIDsub));
HAL_Delay(50); 		       // Press all key for 50 milliseconds
keyBoardHIDsub.MODIFIER=0x00;  // To release shift key
keyBoardHIDsub.KEYCODE1=0x00;  // Release A key
keyBoardHIDsub.KEYCODE2=0x00;  // Release B key
keyBoardHIDsub.KEYCODE3=0x00;  // Release C key
USBD_HID_SendReport(&hUsbDeviceFS,&keyBoardHIDsub,sizeof(keyBoardHIDsub));
HAL_Delay(1000); 	       // Repeat this task on every 1 second

Keyboard_Description_Helper.pdf
0.25MB
keyboard_Report_Descriptor.h
0.00MB

5단계: 코드 업로드

코드를 업로드하려면 첨부 파일에 표시된대로 ST-Link-V2 프로그래머를 연결하십시오.

코드를 업로드합니다 (처음 업로드하는 경우 디버거를 ST-LINK (ST-LINK GDB 서버)로 설정해야합니다).

마이크로 USB 케이블을 파란색 필 보드에 연결하고 컴퓨터에 연결합니다. Bluetooth 및 기타 장치 설정에 키보드> 표시됩니다. 메모장을 열면 1 초마다 "ABC"인쇄가 표시됩니다.

 

 

728x90