微控制器通过虚拟串口

时间:2016-10-06 14:56:04

标签: c microcontroller atmega virtual-serial-port

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

我正在研究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设备,例如:一个鼠标?可能是这样吗?

或者其他原因可能是什么原因?

我如何解决我的问题?

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

2 个答案:

答案 0 :(得分:1)

错误使用格式。

def setup() {
    // make sure you are creating a new user with all the required fields    
    // otherwise GORM will throw validation error
    new User(username: "test", email:"test@test.com").save flush:true, failOnError:true
}

答案 1 :(得分:0)

感谢您的答案,但这并没有直接解决我的问题,但有点让我找到解决方案。

解决方案: 虽然我没有向MCU发送任何内容,但我收到了255个值。 但: 如果未收到任何字节,则LUFA CDC_Device_ReceiveByte函数返回-1。我忘记在serial_byte&amp; = 0x00FF之前检查该值;声明。然后将-1值混合起来,得出255值。 再次愚蠢的错误,这让我花了很多时间。