赞
踩
1)实验平台:正点原子APM32E103最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban
本章将介绍使用APM32E103作为USB从设备,虚拟出串口与PC进行通信。通过本章的学习,读者将学习到APM32E103作为USB从设备虚拟出串口的使用。
本章分为如下几个小节:
54.1 硬件设计
54.2 程序设计
54.3 下载验证
54.1 硬件设计
54.1.1 例程功能
int main(void) { uint8_t t = 0; NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4); /* 设置中断优先级分组为组4 */ sys_apm32_clock_init(15); /* 配置系统时钟 */ delay_init(120); /* 初始化延时功能 */ usart_init(115200); /* 初始化串口 */ led_init(); /* 初始化LED */ lcd_init(); /* 初始化LCD */ lcd_show_string(30, 50, 200, 16, 16, "APM32", RED); lcd_show_string(30, 70, 200, 16, 16, "USB Virtual USART TEST", RED); lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED); CDC_Init(); while (1) { t++; if (t == 20) { LED0_TOGGLE(); t = 0; } delay_ms(10); } }
从上面的代码中可以看出,在调用完驱动库中的CDC初始化函数CDC_Init()后便进入死循环了,其他相关的操作都由驱动库和中断中完成了,在usbd_cdc.c文件中out endpoint传输完成回调函数USBD_VCP_OutEpCallback(),如下所示:
/*! * @brief OUT endpoint transfer done handler(except EP0) * * @param ep: OUT endpoint * * @retval None */ void USBD_VCP_OutEpCallback(uint8_t ep) { uint32_t dataCnt; if (ep == USB_EP_1) { dataCnt = g_usbDev.outBuf[USB_EP_1].xferCnt; USBD_TxData(USB_EP_1, dataBuf, dataCnt); } }
从上面的代码中可以看到,在out endpoint传输完成后,也就是USB的虚拟串口接收到数据后,便将数据原封不动地通过虚拟串口发送回去,达到“回显”的目的。
54.3 下载验证
在完成编译和烧录操作后,可以看到LCD上显示了本实验的相关实验信息,此时可以将开发板通过USB SLAVE接口与PC进行连接,待PC自动完成驱动安装后,便可看到PC上多出了一个端口设备,此时可以通过串口调试助手与该端口进行通信,可以看到无论串口调试助手发送任何数据,都会在串口调试助手的接受区看到发送出去的数据,这是因为APM32E103将虚拟串口接收到的数据原封不动地通过虚拟串口发送回去,实现了“回显”的效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。