【发布时间】:2012-01-09 17:21:33
【问题描述】:
我正在尝试将我的 AT90USB162(Minimus USB 板)用作 CDC,以将常量字符串发送到连接到 comport 的超级终端。 于是我拿到了演示代码Demos/Device/ClassDriver/VirtualSerial并做了一些修改:
在makefile中:
MCU = at90usb162
BOARD = MINIMUS
F_CPU = 16000000
在 VirtualSerial.h 中:
- 删除了所有与 Joystick.h 相关的条目,因为 AT90USB162 没有它
- 创建了函数 SendSpecificString() 的标头(作为与 Joystick.h 相关的旧 CheckJoystickMovement() 的交换)
在 VirtualSerial.c 中:
来自 SetupHardware():删除了对 Joystick_Init() 的调用,因此新代码是(不带 cmets)。
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" 会在超级终端中连续出现,但实际上什么也没出现。那么,我会错过什么?
谢谢。
【问题讨论】:
-
尝试检查您的终端程序中的比特率是否与MCU板的传输率匹配。