原创
XMEGA128B1 使用 USBCDC 的例子
在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
-
复制代码
-
#define UDI_CDC_ENABLE_EXT(port) stdio_usb_enable()
-
#define UDI_CDC_DISABLE_EXT(port) stdio_usb_disable()
-
复制代码
-
再打开文件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同时闪动,就代表成功了。
文章评论(0条评论)
登录后参与讨论