我试图将我的AT90USB162(Minimus USB板)用作CDC,以便将常量字符串发送到连接到comport的超级终端。 所以我得到了演示代码Demos / Device / ClassDriver / VirtualSerial并进行了一些更改:
在makefile中:
MCU = at90usb162
BOARD = MINIMUS
F_CPU = 16000000
在VirtualSerial.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并启用它。这个comport(在我的情况下是#6)出现了,我可以从超级终端连接到它(我大多数时候使用HypoTerminal,但是Microsoft Hyperterminal也会出现相同的结果)。当我连接到comport时,终端不会像预期的那样卡住,但是我也期望字符串ReportString =&#34;数据包&#34;会出现在超级终端中,但实际上什么都没有出现。然后,我会错过什么?
谢谢。
答案 0 :(得分:1)
我刚刚发现问题不在于fputs或CDC_Device_SendString调用。条件循环不是必需的,在这种情况下足以使
void SendSpecificString(void)
{
char* ReportString = "data packet\r\n";
fputs(ReportString, &USBSerialStream);
}
就是这样。