1

コンポートに接続されたハイパーターミナルに定数文字列を送信するためのCDCとしてAT90USB162(Minimus USBボード)を使用しようとしています。そこで、デモコードDemos / Device / ClassDriver / VirtualSerialを入手し、いくつかの変更を加えました。

makefile内

MCU = at90usb162
BOARD = MINIMUS
F_CPU = 16000000

VirtualSerial.hの場合

  • AT90USB162にはJoystick.hがないため、Joystick.hに関連するすべてのエントリを削除しました
  • functon SendSpecificString()のヘッダーを作成しました(Joystick.hに関連していた古いCheckJoystickMovement()と引き換えに)

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に書き込んで有効にします。comport(私の場合は#6)が表示され、ハイパーターミナルから接続できます(ほとんどの場合、HypoTerminalを使用していますが、Microsoftハイパーターミナルでも同じ結果が得られます)。comportに接続すると、端末が期待どおりにスタックしませんが、文字列ReportString = "data packet"がハイパーターミナルに継続的に表示されることも期待していましたが、実際には何も表示されません。それでは、私は何を逃したでしょうか?

ありがとうございました。

4

1 に答える 1

1

問題がfputsまたはCDC_Device_SendString呼び出しにあるのではないことを発見しました。条件ループは必要ありませんでした。この場合、

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

それでおしまい。

于 2012-01-10T19:07:17.947 に答える