1

我希望这不是一个愚蠢的问题,但我自己无法找到问题的答案。

我正在开发一个 Atmega32U4 微控制器设备,它应该接收一系列字节并存储它们。我的代码基于 LUFA-Library 151115 中的 CDC Virtual Serial 驱动程序模板。为了测试我的代码,我使用了非常有用的工具 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 设备,例如鼠标?会是这样吗?

或者这可能是什么原因?

我该如何解决我的问题?

提前感谢任何提示和答案!

4

2 回答 2

1

格式使用错误。

int16_t serial_byte = 0;
//          v (remove i) 
// printf("%i" PRId32 "\n", serial_byte) ;
//             16 not 32
printf("%" PRId16 "\n", serial_byte) ;
于 2016-10-06T15:14:04.057 回答
0

感谢您的回答,这并没有直接解决我的问题,而是让我找到了解决方案。

解决方案:虽然我没有向 MCU 发送任何内容,但我收到了 255 个值。但是:如果没有接收到字节,LUFA CDC_Device_ReceiveByte 函数返回 -1。我忘了在 serial_byte &= 0x00FF; 之前检查那个值。陈述。然后混合了 -1 值,结果是 255 值。又犯了一个愚蠢的错误,这又让我浪费了很多时间。

于 2016-10-07T08:51:08.407 回答