Использование LUFA в качестве CDC для передачи строк - PullRequest
1 голос
/ 09 января 2012

Я пытаюсь использовать AT90USB162 (плату USB Minimus) в качестве CDC для отправки постоянной строки на гипертерминал, подключенный к компорту. Итак, я получил демонстрационный код Demos / Device / ClassDriver / VirtualSerial и внес некоторые изменения:

В make-файле :

MCU = at90usb162
BOARD = MINIMUS
F_CPU = 16000000

В VirtualSerial.h :

  • Удалены все записи, связанные с Joystick.h, поскольку у AT90USB162 его нет
  • Создал заголовок functon SendSpecificString () (взамен старого CheckJoystickMovement (), который был связан с Joystick.h)

В VirtualSerial.c :

Из SetupHardware (): удален вызов Joystick_Init (), поэтому новый код (без комментариев).

void SetupHardware(void)
{
    MCUSR &= ~(1 << WDRF);
    wdt_disable();
    clock_prescale_set(clock_div_1);
    LEDs_Init();
    USB_Init();
}

Удалил void CheckJoystickMovement (void) и создал void SendSpecificString (void), основываясь на первом, но без элементов джойстика:

void SendSpecificString(void)
{
    char*       ReportString  = "data packet";
    static bool ActionSent    = false;

    if ((ReportString != NULL) && (ActionSent == false))
    {
        ActionSent = true;
        fputs(ReportString, &USBSerialStream);
    }
}

И, наконец, в main (): обмен вызовом CheckJoystickMovement () на вызов void SendSpecificString ().

int main(void)
{
    SetupHardware();
    CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
    sei();

    for (;;)
    {
        SendSpecificString();
        CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
        CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
        USB_USBTask();
    }
}

Итак, код собирается, и я записываю в AT90USB162 и включаю его. Появляется компорт (в моем случае № 6), и я могу подключиться к нему из гипертерминала (я использую HypoTerminal большую часть времени, но тот же результат происходит с Microsoft Hyperterminal). Когда я подключаюсь к компорту, терминал не застревает, как ожидалось, однако я ожидал также, что строка ReportString = «пакет данных» будет постоянно появляться в гипертерминале, но на самом деле ничего не появляется. Тогда что бы я пропустил?

Спасибо.

1 Ответ

1 голос
/ 10 января 2012

Я только что обнаружил, что проблема не в вызовах fputs или CDC_Device_SendString. Цикл условия не был необходим, в этом случае достаточно сделать

void SendSpecificString(void)
{
    char*       ReportString  = "data packet\r\n";
    fputs(ReportString, &USBSerialStream);
}

Вот и все.

...