gpt4 book ai didi

c - 使用 LUFA 作为 CDC 进行字符串传输

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:40 25 4
gpt4 key购买 nike

我正在尝试将我的 AT90USB162(Minimus USB 板)用作 CDC,用于将常量字符串发送到连接到 comport 的 super 终端。所以我得到了演示代码 Demos/Device/ClassDriver/VirtualSerial 并做了一些修改:

在生成文件中:

MCU = at90usb162
BOARD = MINIMUS
F_CPU = 16000000

在 VirtualSerial.h 中:

  • 删除了所有与 Joystick.h 相关的条目,因为 AT90USB162 没有它
  • 创建函数 SendSpecificString() 的 header (以替换与 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)出现,我可以从 super 终端连接到它(我大部分时间都在使用 HypoTerminal,但 Microsoft Hyperterminal 也会出现相同的结果)。当我连接到 comport 时,终端并没有像预期的那样卡住,但是我也期望字符串 ReportString = "data packet"会连续出现在 super 终端中,但实际上什么也没有出现。那么,我会错过什么?

谢谢。

最佳答案

我刚刚发现问题不在于 fputs 或 CDC_Device_SendString 调用。条件循环不是必需的,在这种情况下足以使

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

就是这样。

关于c - 使用 LUFA 作为 CDC 进行字符串传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com