Cubemx cdc library 설정하는 방법

사용 MCU: STM32F103VCT

안녕하세요.

STM32F103에 있는 USB IP중 CDC(Communication Device Class)를 CubeMX로 적용하는 방법에 대해 알아봅시다.

CDC를 사용하면 Uart 핀에 Uart To Serial 모듈을 따로 쓰지 않고 바로 USB를 통해 컴퓨터와 통신 할 수 있다는 장점이 있습니다.

제가 가지고 있는 보드의 USB 회로는 아래와 같습니다.

Cubemx cdc library 설정하는 방법
USB 회로

컴퓨터에서 USB를 인식하려면 PA1 핀이 High 상태로 있어야 합니다.

USB in a NutShell - Chapter 2 - Hardware (beyondlogic.org)

USB in a NutShell - Chapter 2 - Hardware

Connectors All devices have an upstream connection to the host and all hosts have a downstream connection to the device. Upstream and downstream connectors are not mechanically interchangeable, thus eliminating illegal loopback connections at hubs such as

www.beyondlogic.org

PA11과 PA12에 연결된 저항은 22옴이 사용되었습니다.

CubeMX를 실행 시켜

Connectivity > USB 메뉴에 Device(FS)를 체크해줍니다.

Cubemx cdc library 설정하는 방법
USB 기능 ON

그러면 아래 처럼 USB_DP 핀과 USB_DM핀이 활성화 될 것입니다.

Cubemx cdc library 설정하는 방법
USB 핀이 설정된 화면

Middleware > USB_DEVICE 메뉴로 가서 Class For FS IP를 Communication Device Class (Virtual Port Com)을 선택해주고 GENERATE CODE를 해줍니다.

Cubemx cdc library 설정하는 방법
CDC기능 ON

Device Descriptor 탭으로 가면 아래 화면처럼 설정되어 있습니다.

Cubemx cdc library 설정하는 방법

VID는 Vendor ID의 약자로 제조사 아이디를 뜻합니다.

디폴트 설정으로 1155로 설정되어있는데

모든 VID는 usb.org에서 관리되어 있습니다. 

https://usb.org/sites/default/files/vendor_ids051920_0.pdf에서 확인해 보면

1155는 STMicroelectonics라는 것을 확인 할 수 있습니다.

Cubemx cdc library 설정하는 방법

VID를 위 리스트에 없는 숫자로 해도 정상적으로 동작합니다. (15768)

PID는 Product ID 로 제품 ID를 설정해 주는 파라미터입니다.

PA1핀도 Output으로 설정해주고 Generate Code를 해줍니다.

Cubemx cdc library 설정하는 방법

USB 송수신에 관련된 함수는 usbd_cdc_if.c 파일에 있습니다.

// usbd_cdc_if.c


// USB로부터 수신한 데이터가 있을경우 호출되는 함수 
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
	...
}


// USB로부터 데이터를 송신하기 위한 함수
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
	...
}

제가 가지고 있는 보드는 PA1핀을 High로 만들어줘야지 컴퓨터가 USB를 인식한다고 했습니다.

따라서 프로그램이 시작되면 PA1핀을 High로 만들어 주고 printf가 USB를 통해 출력되도록 코드를 수정해줍니다.

/*
  1초마다 USB로 "Hello CDC Test\r\n" 출력하기 예제

*/

// USB로 printf를 출력시키기 위한 설정 함수
int _write(int file, char *ptr, int len){
    //HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, 100);
    // USB로 ptr를 출력합니다.
    CDC_Transmit_FS(ptr, len);
    return (len);
}


int main(void)
{
  static uint32_t time = 0;
  ...
  MX_GPIO_Init();
 
  MX_USB_DEVICE_Init();
  ...
  
  // PA1 Pin High
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);

  while (1)
  {
    if (HAL_GetTick() - time > 1000) {
      time = HAL_GetTick();
      printf("Hello CDC Test\r\n"); 
    }
  
  }

}

프로그램 다운로드를 완료한 후 장치관리자에 보면 아래와 같이 USB 직렬 장치라고 인식이 됩니다.

Cubemx cdc library 설정하는 방법
USB를 인식한 화면

가지고 있는 시리얼 통신 프로그램으로 COM15에 연결하면 1초마다 Hello CDC Test 라는 메세지가 나타날 것입니다.

[자석으로 간치료 - 시즌2]
20여일동안 자석으로 간을 치료해 본 결과, 간은 좋아진 것은 확실하나 없던 간염 증상도 좀 생기는 듯 하다. 내가 내린 결론은 간도 좋아지지만 감염 바이러스도 같이 활성화 되는 것이 아닌가 하는 것이다. 왜냐하면 처음에는 간이 하도 나빠서 바이러스보다 간이 좋아지는 속도가 빨랐지만, 나중에는 둘다 같이 활성화되서 간이 나빠지는 속도 또한 빠른게 아닌가 싶다. 자석을 떼면 빨리 손이 까지는 것 을 보니 그렇다. 이번에 자석을 안 붙이고 바이러스만 잡아서 손은 거의 정상이 됐다.

내일부터는 자석을 붙이고 바이러스는 죽이면서, 저녁에 뗐을 때 바이러스를 또 죽이는 치료를 해 볼 예정이다. 그러면 간은 더 좋아지고 바이러스는 점점 더 사라져 갈 것으로 예상되며 컨디션은 더 좋아질 것이다.

[1일째]

오늘부터 간치료 및 기능 개선을 시작했습니다.
현재 간기능은 예전에 비해 많이 좋아졌지만, 제가 가정한 간기능 개선과 함께 간바이러스까지 활성화 된 것이 아닌가하는 것을 확인해 보려고 합니다.
그래서 간바이러스 제거를 위해 MMS 를 먼저 먹고 자석을 붙였습니다.이렇게 하면 간바이러스는 없어지거나 비활성화되고 간기능만 더 좋아지리라 예상됩니다. MMS 는 점심 먹고 1번 더 먹을 것이고, 저녁에는 마지막으로 자석을 떼고 MMS 를 한번 더 먹으면 간상태는 그대로 이고 간 바이러스는 제거 되리라 예상합니다.

점심 먹고 1시간 뒤에 다시 MMS를 먹었다. 간은 자석이 회복시켜 주는 중이고, 간염 바이러스는 MMS가 제거 또는 비활성화 하는 중이다. 자석을 떼고 MMS를 먹으면 비활성화 보다는 제거 수순으로 예상이 된다. 왜냐하면 만약 자석이 간염 바이러스도 활성화 시키는 작용을 한다면, 자석을 제거했으니 바이러스도 비활성화 되는 상태에서 제거제가 들어가니 그럴거라 예상을 해 본다.

오후 4:50 자석을 떼고 , MMS를 먹었다.

오후 10시, 자석은 뗀 상태로 MMS를 또 먹었다. 자석을 뗀 이후로 좀 가렵다. 손바닥은 까지나 뭐가 나지는 않았다.

오후 11시 59분 MMS 를 1번 더 먹는다. 손바닥 까지는 증상은 많이 완화되었다.

[2일째]

2일째, 계속해서 자석을 뗀 상태이며 자다가 일어나서 MMS를 1번 더 먹음. 새벽 3:44. 손은 많이 좋아짐.

아침 10시쯤 MMS 한 번 더 먹고 자석을 붙였는데, 손은 크게 좋아지지는 않는듯 하다. 좋아진 듯 하다가 다시까짐. 뭐지? 이건? 발은 좋아졌는데, 손은 왜 이모양이냐구...ㅜㅜ
손을 희생해서 몸이 좋아진다면... ㅉㅉ

오후 9시, 자석은 아침에 붙이고 아직 안 뗐다. 그리고 MMS 한번 또 먹음. 손아 뭔가 반응이라도 해라. ㅜㅜ

[3,4일째]

3,4 일째, 2일간 저녁에 집에 와서 붙이고 잤더니 아침에 눈이 붙고 손이 까진다. 그리고 아침에 떼고 회사에 오면 다시 좋아진다. 수질 정화제를 먹어도 이와 같은 것을 보니 현재 N극 과다 증상인듯 하다. 붙이지 말던가 저녁에 와서 붙인 후, 자기 전에 떼봐야 겠다. 수질 정화제를 먹은 후, 손에 뭐가 나지는 않는다. 다만 손은 위의 상황에서 처럼 까지므로 자석을 좀 자제해야 겠다.

4일째, 점심을 먹으니 배가 살살 안좋았는데 조금 있다가 설사를 했다. 자석을 안 붙인지 11시간이 됐는데, 예전의 자석을 전혀 안 썼던 때의 현상이다. 집에서도 이런 때에 바로 자석을 붙이면 속이 진정이 된다. 요즘은 자석을 안붙이면 손이 까지는 증상이 없어지면서 뭔가를 먹으면 쉽게 설사를 한다. 이제 어떤 시도를 해야 할까? 그렇다고 계속 붙이면 또 상태가 안좋아지고.. 하루에 밥먹을 때만 붙이고 떼어 볼까?

현재 오후 2시, 3시간만 붙이고 떼서 집에서는 괜찮은지 알아봐야겠다. 집에서 밥먹고 소화 될 때까지는 자석의 효과가 남아 있겠지.

[5,6일째]

 5,6일째, 이제는 자석을 붙이면 2~3시간 내에 간이 안좋아지는 증상이 생긴다. 아무리 수질정화제를 먹어도 나아지지 않는다. 그렇지만 간기능은 예전에 비해 좋아진 상태이다.
문제는 밥 먹을때와 밥 먹은 후에 속이 안좋은 것인데, 현재 상태는 자석을 안 붙인 상태가 몸상태가 더 좋아서 .. 밥먹을 때만 2시간 붙이고 뗄 예정이다.

요새 자석을 붙이면 안좋아지는 현상 중 하나로 오줌색이 노레지고, 떼면 다시 맑아진다. 이런 현상이 정말인지 좀 더 확인을 해볼 예정이다. 그런데, 밥먹을 때만 1~2시간 붙일 예정이라 다시 못 볼 수도 있다.

가장 먼저 자석으로 인한 몸의 변화는 눈인 것 같다. 안 좋으면 눈이 뻑뻑해지거나 붓는다. 그 다음으로 밥먹었을 때 소화도 되기 전에 속이 안좋아서 설사가 나오는 것, 그 다음은 손이 까지는 현상이고, 그 다음으로는 가슴에 반점이 생기거나 또는 진해지거나 흐려지거나 이다.

[7일째]

7일째, 밥먹을 때가 되서 붙였다. 지금부터 1시간 동안만 붙일 예정이다.

1시간 붙였는데 괜찮다가 떼니까 바로 신호가 오는구나. 2시간은 붙여야 될 것 같다. 그래서 다시 붙였더니 또 속이 편해진다.

[8,9일째]

8,9일째, 머리도 가렵고 손도 좋아지지 않아서 붙였다 뗐다를 반복해서 약 12시간 정도 자석을 붙인 듯 하다. 이번에는 N극이 과하지는 않았는지, 몸이 나빠지지는 않았다. 손도 많이 회복되고 반점도 더 흐려졌다. 
점점 더 미궁에 빠져든다. 정말 자석을 얼마나 붙여야 할 지를 모르겠다. 요즘엔, 눈이 가장 민감해서 자석을 붙여서 눈이 뻑뻑해지면 떼고, 안붙이고도 눈이 뻑뻑해지면 붙인다.

[10일째]

10일째, 이번에는 2일 넘게 동안 자석을 붙였는데 괜찮았다.

10일째, 혹시 핑크소금을 먹서서 그런걸까? 미네랑이 많아서 ? 간의 연료가 미네랄인것은 아닐까? 그동안 자석을 오래 붙였을 때 안좋아졌던것은 미네랄이 다타버려서 그럴수도 있다. 핑크 소금을 날마다 먹고 자석을 붙여놔 봐야겠다.

요새 회사에 커피가 떨어져서 커피를 많이 안먹었던 것과 핑크소금을 뜨거운 물에 타서 먹었던 점이 예전과 다른 것 같다. 정말 미네랄과 간과의 관계에 무언가 연결고리가 있는 것이 아닐까? 일단 커피는 미네랄 흡수를 막고 몸밖으로 배출해 버린다는 내용이 예전에도 들었지만 인터넷상에도 많이 보인다.
https://www.msn.com/.../%EC%BB%A4%ED%94%BC-%EB.../ar-AAw2HXU

우연치 않게 미네랄을 몸에 흡수를 많이 시킨 후, 자석을 붙였던 것도 같다. 커피를 덜 먹고 핑크 소금을 먹은 것이 그러하다. 현재 3일동안 붙였는데 부작용이 없다.

관리