2016-10-06 7 views
1

을 통해 계속해서 "255ld"값을받습니다. 바보 같은 질문이 아니길 바래요. 내 문제에 대한 답을 직접 찾을 수는 없습니다.마이크로 컨트롤러는 가상 시리얼 포트

저는 일련의 바이트를 받고이를 저장해야하는 Atmega32U4 마이크로 컨트롤러 디바이스에서 작업하고 있습니다. 내 코드는 LUFA-Library 151115의 CDC 가상 직렬 드라이버 템플릿을 기반으로합니다. 내 코드를 테스트하기 위해 ScriptCommunicator 04.11이라는 매우 유용한 도구를 사용합니다. MCU (microcontroller unit)는 USB를 통해 PC에 연결되며 PC 호스트에 의해 직렬 COM 포트 장치로 처리됩니다. 내 OS는 Windows 7 64 비트입니다.

현재 6 개의 값을 받아 저장하는 함수를 작성하고 있습니다.

int16_t Register_1 = 0;  
int16_t Register_2 = 0;  
int16_t Register_3 = 0;  

int16_t Register_4 = 0; 
int16_t Register_5 = 0; 
int16_t Register_6 = 0;  

int16_t serial_byte = 0; 
int8_t loop = 1; 

do 
{ 
    serial_byte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); 

    serial_byte &= 0x00FF; 

    switch (loop) 
    { 
     case 1:  Register_1 = ad7194_byte;  break; 
     case 2:  Register_2 = ad7194_byte;  break; 
     case 3:  Register_3 = ad7194_byte;  break; 
     case 4:  Register_4 = ad7194_byte;  break; 
     case 5:  Register_5 = ad7194_byte;  break; 
     case 6:  Register_6 = ad7194_byte;  break; 
    } 


    CDC_Device_USBTask(&VirtualSerial_CDC_Interface); 

    USB_USBTask(); 

    loop ++ ; 

    printf("%i" PRId32 "\n", serial_byte) ; 

    _delay_ms(1000); 

} while (loop < 7); 

나는 이전에 유사한 코드를 사용하고 모든 것이 잘 작동 할 듯 : 는이를 위해 다음 코드를 사용합니다. 이제 다음 문제를 확인했습니다 : 장치가 계속 "255ld"값을 나타냅니다. ScriptCommunicator로 위의 코드를 테스트 할 때이 값을 6 번받습니다. (위의 코드에 printf-statement가 포함되어 있습니다).

Windows에서 MCU를 일반적인 USB 장치로 취급하고 있기 때문에 이러한 문제가 발생할 수 있습니다. 생쥐? 그럴 수 있습니까?

또는 그 이유는 무엇입니까?

문제를 해결하려면 어떻게해야합니까?

미리 알려 주셔서 감사합니다.

+0

장치 초기화가 필요하지 않습니까? –

+0

' "255ld"'는 5가 아닌 하나의 값입니다. – Olaf

답변

1

형식을 잘못 사용했습니다.

int16_t serial_byte = 0; 
//   v (remove i) 
// printf("%i" PRId32 "\n", serial_byte) ; 
//    16 not 32 
printf("%" PRId16 "\n", serial_byte) ; 
0

답장을 보내 주셔서 감사합니다. 직접 문제를 해결하지는 못했지만 해결책을 찾았습니다.

솔루션 : MCU에 아무 것도 보내지 않았지만 255 값을 받았습니다. But : 바이트가 수신되지 않으면 LUFA CDC_Device_ReceiveByte-function이 -1을 반환합니다. serial_byte 전에 해당 값을 확인하는 것을 잊었습니다 & = 0x00FF; 성명서. 그런 다음 -1 값이 혼합되어 255 값이 나타납니다. 어리석은 실수. 다시 많은 시간을 들였습니다.