XMEGA128B1如何使用USBCDC串口的例子

作者: shaoziyang
上传时间为: 2015-01-26 09:14 AM

在ASF中有一个STDIO_USB_EXAMPLE的例子,可以方便的演示CDC串口。但是为了更好的理解这个例子,我们自己重新创建,然后通过ASF添加函数,这样可以更好的掌握整个过程。下面是我创建项目的过程,供大家参考。

  • 首先创建项目,选择gcc c asf project。

  • 然后选择xmega128B1以及xmega128B1-xplained模板。

  • 在ASF向导中,添加USB Device(server)- cdc_stdio

  • 然后打开config_usb.h。先注释掉第49行的强制警告提示,不然每次编译都会产生一个警告。
//#warning You must refill the following definitions with a correct values
  • 然后将124/125行修改为下面语句
#define UDI_CDC_ENABLE_EXT(port) stdio_usb_enable()
#define UDI_CDC_DISABLE_EXT(port) stdio_usb_disable()
  • 最后添加包含头文件 <stdio_usb.h>
#include <stdio_usb.h>
  • 再打开文件conf_clock.h,先将系统时钟改为SYSCLK_SRC_RC32MHZ。
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC2MHZ
#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32MHZ
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32KHZ
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_XOSC
//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL
  • 然后允许CONFIG_OSC_RC32_CAL 和CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC
#define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC
#define CONFIG_OSC_RC32_CAL 48000000UL
#define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_USBSOF
  • 最后在打开main.c,在main函数中输入下面代码
sysclk_init();
board_init();
// Initialize interrupt vector table support.
irq_initialize_vectors();
// Enable interrupts
cpu_irq_enable();
stdio_usb_init();
uint8_t ch;
while (true) {
ch = getchar();
putchar(ch);
LED_Toggle(LED2_GPIO);
}
  • 编译项目文件,通过Flip将编译后HEX写入芯片。


  • 重新上电(记得先取下短路块),应该就可以找到串口了。


  • 打开一个串口终端,选择上面的串口,并设置波特率为115200,随便输入什么,如果屏幕上可以显示出你输入的字符,LED同时闪动,就代表成功了。



  • 完整项目文件

GccBoardProject_USBCDC.zip

全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示