2016-10-06 26 views
1

我希望这不是一个愚蠢的问题,但我无法自己找到我的问题的答案。微控制器通过虚拟串口连续收到“255ld”的值

我正在研究一个Atmega32U4单片机器件,它应该接收一系列字节并存储它们。我的代码基于来自LUFA-Library 151115的CDC虚拟串行驱动程序模板。为了测试我的代码,我使用了非常有用的工具ScriptCommunicator 04.11。微控制器单元(MCU)通过USB连接到PC,并被PC主机视为串行COM端口设备。我的操作系统是Windows 7 64位。

目前,我正在写一个函数,其中应接收和存储六个值。 对于我使用下面的代码:

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测试上面的代码时,我收到了这个值六次(这就是为什么printf语句包含在上面的代码中)。

我怀疑发生这种情况是因为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个值。 但是: 如果没有收到字节,则LUFA CDC_Device_ReceiveByte函数返回-1。我忘记检查serial_byte & = 0x00FF之前的值;声明。然后将-1值混合起来,并得出255值。 再次愚蠢的错误,这又耗费我很多时间。